VBA 在有空白时删除行

VBA 在有空白时删除行

我是 VBA 的新手,因此我发现我的任务很困难。

我有一个包含 2500 行和三列 A、B、C 的 Excel。
我需要删除整行仅当 C 列中的值为空时
我搜索了类似的问题,但它们并不适用于我的任务。

我找到了这段代码,但它对我的情况不起作用:

Sub DeleteBlankRows1()

'Deletes the entire row within the selection if the ENTIRE row contains no data.

'We use Long in case they have over 32,767 rows selected.

Dim i As Long 

'We turn off calculation and screenupdating to speed up the macro.

With Application
    .Calculation = xlCalculationManual
    .ScreenUpdating = False

'We work backwards because we are deleting rows.

For i = Selection.Rows.Count To 1 Step -1
    If WorksheetFunction.CountA(Selection.Rows(i)) = 0 Then
        Selection.Rows(i).EntireRow.Delete
    End If
Next i

    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With

End Sub

我更喜欢使用 VBA 来执行此操作,而我每天必须对 50 个 Excel 文件执行此操作。

有什么想法可以这样做吗?

答案1

你发表评论是为了寻求帮助

我假设最后一行总是 2500,就像你的帖子一样(如果不是,这篇文章展示了如何获取最后一行

然后循环遍历每一行,从最后一行开始。

如果该行在 C 列中有值,则不执行任何操作。否则将其删除。

剧透警告:如何做到这一点,并附有注释来解释它在做什么

Sub doIt()    
 Dim MyRange As Range
 Dim lngLastRow As Long    
    Set MyRange = Range("A:C") ' grab the range    
    lngLastRow = Cells(Rows.Count, MyRange.Column).End(xlUp).Row  ' grab the last value, swap it for 2500        
    Dim i As Integer        
    For i = lngLastRow To 1 Step -1 ' loop through, starting at the last column        
        If Range("C" & i).Value = "" Then ' test if there is not a value
            Rows(i).EntireRow.Delete   'delete!
        End If        
    Next i
End Sub

相关内容