如果在单元格中找到了特定的单词(“底部”),我正在尝试删除多行。我在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
(...)
...我只是不知道当行被删除并向上移动时如何处理。
我在这里看到了一个可能的解决方案:
但不知道如何实现。提前非常感谢!
答案 0 :(得分:1)
请尝试使用此代码。
此代码使用Find方法获取包含“底部”一词的单元格(如果找到),则Delete从其上方3行到其下方1行的单元格。
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
祝你好运。
答案 1 :(得分:0)
如果我从示例中正确地解决了您的问题,则确实需要删除数据中LAST“底部”行上方的所有内容-再加上一行。
Excel在范围的Find方法中具有执行此搜索的强大功能:
Dim SearchData as Range, LastBottom as Range Set SearchData = Range("A1",Range("A1").End(xlDown)) ' assumes no blank lines
Set LastBottom= SearchData.Find("Bottom ",SearchDirection:=xlPrevious) If LastBottom IS Nothing Then MsgBox "Couldn't find it" Else Range(Rows(1),Rows(LastBottom.Row+1).Delete End if
备注: 如评论所述,我假设使用“ End(xlDown)”而不是电子表格最后一行的“ xlUp”来查找数据的末尾时,数据没有空行。
因此,您会看到“查找”功能,“ xlPrev”搜索方向从底部开始向上,找到最后一个“底部”单元格。
如果要删除整个行,请使用Row()函数,或使用多个函数,请使用Range(Rows(X),Rows(Y))来运行“ .Delete”方法以及整个批次他们中的一个命令消失了。
答案 2 :(得分:0)
尝试:
Option Explicit
Sub test()
Dim LastRow As Long, i As Long
With ThisWorkbook.Worksheets("Sheet1")
LastRow = .cells(.Rows.Count, "A").End(xlUp).Row
For i = LastRow - 1 To 1 Step -5
If InStr(.Range("A" & i).Value, "Bottom") <> 0 Then
.Rows(i + 1).Delete
.Rows(i).Delete
.Rows(i - 1).Delete
.Rows(i - 2).Delete
.Rows(i - 3).Delete
End If
Next i
End With
End Sub