我的数据看起来像这样。
我想删除名为 Position 的列中的值从 first 值为 1 的行。我写了一个宏来做这样的事情
Sub DEL_row()
row_number = 2
Do
DoEvents
row_number = row_number + 1
Position_from_first = Sheet8.Range("E" & row_number)
If InStr(Position_from_first, "1") >= 1 Then
Sheet8.Rows(row_number & ":" & row_number).Delete
End If
Loop Until Position_from_first = ""
MsgBox "completed"
End Sub
但是当我运行它时,我得到一个错误。消息框显示已完成,但当我浏览 excel 表时它没有完成所需的工作。
谁能帮我解决问题。
非常感谢您的帮助...
最佳答案
虽然您的概念是正确的,但您的语法和对 VBA 的理解存在一些错误。我在下面列出了它们。
.EntireRow.Delete
. .Delete
只会删除单元格内容。 我已在下面修复了您的代码以反射(reflect)这些问题。我还提供了一个更简单的替代方案来解决您使用 AutoFilter 方法的问题。
Sub DEL_row()
'get last used row in column E
row_number = Sheet8.Range("E" & Sheet8.Rows.Count).End(xlup).Row
For x = row_number to 2 Step -1
Position_from_first = Sheet8.Range("E" & row_number)
If InStr(Position_from_first, "1") >= 1 Then
'If Sheet8.Range("E" & row_number) = 1 ' this will also work
Sheet8.Rows(row_number & ":" & row_number).EntireRow.Delete
End If
Next
MsgBox "completed"
End Sub
如果您使用 AutoFilter,您可以完全避免循环(并节省时间),如下所示:
Sub DEL_row()
With Sheet8
'get last used row in column E
row_number = .Range("E" & .Rows.Count).End(xlup).Row
With .Range("E1:E" & row_number)
.AutoFilter 1, "1"
.Offset(1).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
.AutoFilterMode = False
End With
Msgbox "completed"
End Sub
关于excel - 一旦条件在列中匹配,删除excel表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33856269/