删除 row.cell 具有 VBA 特定字符串的行
Delete rows where a row.cell has a specific string with VBA
我有一个包含 390 行的 Excel 文件。第五列只有两个字符串。它是 "YES" 或 "NO"。因此,如果第五列中的单元格包含 "NO" 使用 VBA,我将尝试删除这些行。我可以通过使用过滤器然后使用宏来删除隐藏的行来做到这一点,但我想找到一种方法在 VBAs 中完成它而不使用过滤器。我想更好地学习它,并保留该文件以备将来使用。
我尝试使用在堆栈中找到的一些脚本,但它们不起作用。它们中的大多数用于整数而不是字符串。我试过这个,但它不起作用:
Sub Delete_Rows_With_Specific_String_In_Cell()
Dim myRow As Long
Dim myCounter As Long
myRow = 390
For myCounter = myRow To 1 Step -1
If Cells(myCounter, 5).Value = "NO" Then
Rows(myCounter).Delete
End If
Next
End Sub
我尝试为该列添加第二个 For,但它也没有用。我想找到我已经写过的解决方案。我也许可以在互联网上找到其他脚本,但我想让它基于这段代码工作。
http://analysistabs.com/vba/delete-row-if-cell-contains-string-excel-macro-example-code/
这个解决方案有效
也许您没有作为模块插入?
另一种删除行的方法,可能会更快一些(我没有测试过所以不要引用我的话)- 找出需要先删除哪些行,合并范围并将它们全部删除去吧。
Sub Delete_Rows_With_Specific_String_In_Cell()
Dim myRow As Long
Dim myCounter As Long
Dim rngDeletion As Range
myRow = 390
With ThisWorkbook.Worksheets("Sheet1")
For myCounter = 1 To myRow
If .Cells(myCounter, 5).Value = "NO" Then
If rngDeletion Is Nothing Then
Set rngDeletion = .Rows(myCounter)
Else
Set rngDeletion = Union(rngDeletion, .Rows(myCounter))
End If
End If
Next
End With
rngDeletion.Delete
End Sub
注意:我在代码中使用了 With 关键字来确保我引用了正确的 sheet每时每刻。
有关 With...End With 的解释,请参阅 https://msdn.microsoft.com/en-us/library/wc500chb.aspx。
我有一个包含 390 行的 Excel 文件。第五列只有两个字符串。它是 "YES" 或 "NO"。因此,如果第五列中的单元格包含 "NO" 使用 VBA,我将尝试删除这些行。我可以通过使用过滤器然后使用宏来删除隐藏的行来做到这一点,但我想找到一种方法在 VBAs 中完成它而不使用过滤器。我想更好地学习它,并保留该文件以备将来使用。
我尝试使用在堆栈中找到的一些脚本,但它们不起作用。它们中的大多数用于整数而不是字符串。我试过这个,但它不起作用:
Sub Delete_Rows_With_Specific_String_In_Cell()
Dim myRow As Long
Dim myCounter As Long
myRow = 390
For myCounter = myRow To 1 Step -1
If Cells(myCounter, 5).Value = "NO" Then
Rows(myCounter).Delete
End If
Next
End Sub
我尝试为该列添加第二个 For,但它也没有用。我想找到我已经写过的解决方案。我也许可以在互联网上找到其他脚本,但我想让它基于这段代码工作。
http://analysistabs.com/vba/delete-row-if-cell-contains-string-excel-macro-example-code/
这个解决方案有效
也许您没有作为模块插入?
另一种删除行的方法,可能会更快一些(我没有测试过所以不要引用我的话)- 找出需要先删除哪些行,合并范围并将它们全部删除去吧。
Sub Delete_Rows_With_Specific_String_In_Cell()
Dim myRow As Long
Dim myCounter As Long
Dim rngDeletion As Range
myRow = 390
With ThisWorkbook.Worksheets("Sheet1")
For myCounter = 1 To myRow
If .Cells(myCounter, 5).Value = "NO" Then
If rngDeletion Is Nothing Then
Set rngDeletion = .Rows(myCounter)
Else
Set rngDeletion = Union(rngDeletion, .Rows(myCounter))
End If
End If
Next
End With
rngDeletion.Delete
End Sub
注意:我在代码中使用了 With 关键字来确保我引用了正确的 sheet每时每刻。 有关 With...End With 的解释,请参阅 https://msdn.microsoft.com/en-us/library/wc500chb.aspx。