我是 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