Vba 检查每行中列的范围,如果所有列中都没有值,则删除行

Vba 检查每行中列的范围,如果所有列中都没有值,则删除行,vba,excel,Vba,Excel,我想创建一个宏,它遍历工作表中的每一行,并检查F:I列中是否有值。 如果所有列均为空,则应删除当前行 我试图循环使用一些代码,但当我运行它时,由于某种原因,该工作表中的所有行都被删除 这是我目前掌握的代码: Sub DeleteRowBasedOnCriteria() Dim RowToTest As Long Dim noValues As Range, MyRange As Range For RowToTest = Cells(Rows.Count, 3).End(xlUp).Row

我想创建一个宏,它遍历工作表中的每一行,并检查F:I列中是否有值。 如果所有列均为空,则应删除当前行

我试图循环使用一些代码,但当我运行它时,由于某种原因,该工作表中的所有行都被删除

这是我目前掌握的代码:

Sub DeleteRowBasedOnCriteria()

Dim RowToTest As Long
Dim noValues As Range, MyRange As Range

For RowToTest = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1

Set MyRange = Range("F" & RowToTest & ":I" & RowToTest)

On Error Resume Next
Set noValues = Intersect(ActiveCell.EntireRow.SpecialCells(xlConstants), MyRange)
On Error GoTo 0

If noValues Is Nothing Then
    Rows(RowToTest).EntireRow.Delete

End If

Next RowToTest


End Sub

尝试使用
工作表函数.CountA

Option Explicit

Sub DeleteRowBasedOnCriteria()

Dim RowToTest As Long
Dim MyRange As Range

For RowToTest = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
    Set MyRange = Range("F" & RowToTest & ":I" & RowToTest)

    If WorksheetFunction.CountA(MyRange) = 0 Then
        MyRange.EntireRow.Delete
    End If
Next RowToTest

End Sub

尝试使用
工作表函数.CountA

Option Explicit

Sub DeleteRowBasedOnCriteria()

Dim RowToTest As Long
Dim MyRange As Range

For RowToTest = Cells(Rows.Count, 3).End(xlUp).Row To 2 Step -1
    Set MyRange = Range("F" & RowToTest & ":I" & RowToTest)

    If WorksheetFunction.CountA(MyRange) = 0 Then
        MyRange.EntireRow.Delete
    End If
Next RowToTest

End Sub
可以这样做(使用Union一次性删除所有行更有效):

可以这样做(使用Union一次性删除所有行更有效):

请尝试以下操作:

On Error Resume Next
Set noValues = Intersect(myRange.EntireRow.SpecialCells(xlConstants), MyRange)
On Error GoTo 0

If noValues Is Nothing Then
    Rows(RowToTest).EntireRow.Delete
Else
    Set noValues = Nothing
End If
请尝试以下操作:

On Error Resume Next
Set noValues = Intersect(myRange.EntireRow.SpecialCells(xlConstants), MyRange)
On Error GoTo 0

If noValues Is Nothing Then
    Rows(RowToTest).EntireRow.Delete
Else
    Set noValues = Nothing
End If

您有一个输入错误:
Set neValues
,如果noValues,则输入
。。。在代码开头使用
Option Explicit
,它会捕捉到类似这样的错误。@BigBen A是的,我之前已经修复了这个错误,但一定是将旧版本复制到了这里,谢谢你指出了这一点。但一般问题仍然存在。您有一个输入错误:
Set neValues
,然后是
If noValues
。。。在代码开头使用
Option Explicit
,它会捕捉到类似这样的错误。@BigBen A是的,我之前已经修复了这个错误,但一定是将旧版本复制到了这里,谢谢你指出了这一点。不过,一般问题仍然存在。谢谢你的建议,很遗憾,我得到了完全相同的结果。代码运行得很快,但什么也没发生。似乎它可能无法正确地遍历所有行并查看请求的列。您是否正在处理多个
工作表
?您没有限定正在处理的工作表,但应该这样做。感谢您的建议,很遗憾,我得到了完全相同的结果。代码运行得很快,但什么也没发生。似乎它可能无法正确地遍历所有行并查看请求的列。您是否正在处理多个
工作表
?您尚未确定您正在处理的工作表,但应该这样做。刚刚测试了您的第一个解决方案,它似乎按照预期工作,尽管我不完全理解如何工作。所以谢谢你!我可以解释你想知道的任何事情。请告诉我。我在代码中添加了更多注释。刚刚测试了您的第一个解决方案,它似乎按照预期工作,尽管我不完全理解如何工作。所以谢谢你!我可以解释你想知道的任何事情。请告诉我。我在代码中添加了更多注释。