如果在字符串中找到值,如何删除多行?

问题描述 投票:0回答:3

如果要在单元格中找到特定的单词(“底部”),我将尝试删除多行。我在A列中的数据如下所示:

OMC
Hold
Value
Bottom 13%
Advertising and Marketing
WPP
Sell
Momentum | B VGM
Bottom 13%
Advertising and Marketing
AIR
Sell
Growth
Top 9%
Aerospace - Defense Equipment
(...)

...所以我想做的是从A4开始,如果单元格包含单词“ Bottom”,则需要删除单元格A1,A2,A3,A4和A5。

我尝试了以下代码:

Sub DeleteRow()

Dim N As Long, i As Long
N = Cells(Rows.Count, "A").End(xlUp).Row
For i = 4 To N
ActiveSheet.Cells(i, 1).Select
If InStr(1, ActiveCell.Value, "Bottom", vbTextCompare) <> 0 Then
ActiveCell.Offset(-3, 0).Delete
ActiveCell.Offset(-3, 0).Delete
ActiveCell.Offset(-3, 0).Delete
ActiveCell.Offset(-3, 0).Delete
ActiveCell.Offset(-3, 0).Delete 


ElseIf InStr(1, ActiveCell.Value, "Bottom", vbTextCompare) = 0 Then
i = i + 4
End If
Next i

End Sub

...基本上是尝试从列的顶部开始,检查单元格A4是否包含单词Bottom,如果确实如此,它将删除单元格A1,这会将数据向上移动,因此它一次又一次地删除A1直到下一个股票代码在单元格A1中。但是现在我希望它再次从A4开始,然后重复该过程。如果A4中的新值不包含“底部”(即,如果它说“顶部”或其他任何内容),则它需要跳到下一行并在此处进行检查。总是从单元格A4再次开始,以便不会丢失任何内容。

我本质上是试图最后得到不包含“底部”的所有正确数据,上面的示例让我留下了:

AIR
Sell
Growth
Top 9%
Aerospace - Defense Equipment
(...)

...我只是不知道如何删除行并向上移动行。

我在这里看到了一个可能的解决方案:

Excel VBA Delete Rows

但不知道如何实现。

excel vba
3个回答
1
投票

改为尝试此代码。

此代码使用Find方法获取包含单词“ bottom”的单元格,如果找到,则从其上方3行到其下方1行Delete

Sub DeleteRow()
  Dim R As Range, cellsToDel As String
  'looking for cells that contain the word 'bottom'
  Set R = ActiveSheet.Range("A:A").Find("Bottom", LookIn:=xlValues)
  'if found
  Do While Not R Is Nothing
    'get cells address to be deleted
    cellsToDel = "A" & R.Row - 3 & ":A" & R.Row + 1
    'delete the cells
    ActiveSheet.Range(cellsToDel).Delete xlShiftUp
    'looking for cells that contain the word 'bottom' again
    Set R = ActiveSheet.Range("A:A").Find("Bottom", LookIn:=xlValues)
  Loop
End Sub

参考:Excel VBA reference


0
投票

尝试:


0
投票

如果我从示例中正确地解决了您的问题,那么您确实需要删除数据中LAST“ Bottom”行以上的所有内容-再加上一行。

© www.soinside.com 2019 - 2024. All rights reserved.