如果要在单元格中找到特定的单词(“底部”),我将尝试删除多行。我在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
(...)
...我只是不知道如何删除行并向上移动行。
我在这里看到了一个可能的解决方案:
但不知道如何实现。
改为尝试此代码。
此代码使用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
尝试:
如果我从示例中正确地解决了您的问题,那么您确实需要删除数据中LAST“ Bottom”行以上的所有内容-再加上一行。