如何完全删除空白行 VBA
How to Delete COMPLETELY Blank Rows VBA
在我的宏中,我想删除完全空白的行。不是在一列中有内容的行,因为那仍然是有价值的信息。
我在整个互联网上都看过了,但如果有人能想出一个函数来删除完全空白的行,而不仅仅是在几列中缺少某些内容的行,那就太棒了。
(信息仅在 A 至 N 列和大约 7000 行上)。我还没有为此开发任何代码,因为我真的很困惑。
你可以使用这个...
Sub ClearEmptyRows()
Dim r As Long, lastrow As Long, WS As Worksheet, killRng As Range
Set WS = ActiveSheet
lastrow = WS.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Set killRng = WS.Rows(Rows.Count)
For r = 1 To lastrow
If Application.WorksheetFunction.CountA(WS.Rows(r)) = 0 Then
Set killRng = Union(killRng, WS.Rows(r))
End If
Next r
killRng.Delete
End Sub
对新手这段代码的一些评论,因为它是遍历行并执行某事(删除、突出显示、隐藏等)的常见例程
- 最好不要经常与 Worksheet 交互。因此,我们在识别出所有行后执行
Delete
。
- 你不能
Union
一个空范围,所以我将 killRng
设置为最初的整个最后一行(希望这总是空白),然后宏可以继续 Union
。可以通过包含一个 if 语句来解决这个问题,但这需要宏检查每一行是否存在范围。
如果您只想删除空行而不关心格式化,这非常快。
Sub RemoveEmptyRows()
Dim results As Variant, Target As Range
Dim c As Long, r As Long, n As Long
Set Target = Worksheets("Sheet1").UsedRange
If Target.Count > 0 Then
ReDim results(1 To Target.Rows.Count, 1 To Target.Columns.Count)
For r = 1 To Target.Rows.Count
If WorksheetFunction.CountA(Target.Rows(r)) > 0 Then
For c = 1 To Target.Columns.Count
n = n + 1
results(n, c) = Target.Cells(r, c).Value
Next
End If
Next
End If
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Target.Value = results
Application.ScreenUpdating = xlCalculationAutomatic
Application.ScreenUpdating = False
End Sub
在我的宏中,我想删除完全空白的行。不是在一列中有内容的行,因为那仍然是有价值的信息。
我在整个互联网上都看过了,但如果有人能想出一个函数来删除完全空白的行,而不仅仅是在几列中缺少某些内容的行,那就太棒了。
(信息仅在 A 至 N 列和大约 7000 行上)。我还没有为此开发任何代码,因为我真的很困惑。
你可以使用这个...
Sub ClearEmptyRows()
Dim r As Long, lastrow As Long, WS As Worksheet, killRng As Range
Set WS = ActiveSheet
lastrow = WS.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Set killRng = WS.Rows(Rows.Count)
For r = 1 To lastrow
If Application.WorksheetFunction.CountA(WS.Rows(r)) = 0 Then
Set killRng = Union(killRng, WS.Rows(r))
End If
Next r
killRng.Delete
End Sub
对新手这段代码的一些评论,因为它是遍历行并执行某事(删除、突出显示、隐藏等)的常见例程
- 最好不要经常与 Worksheet 交互。因此,我们在识别出所有行后执行
Delete
。 - 你不能
Union
一个空范围,所以我将killRng
设置为最初的整个最后一行(希望这总是空白),然后宏可以继续Union
。可以通过包含一个 if 语句来解决这个问题,但这需要宏检查每一行是否存在范围。
如果您只想删除空行而不关心格式化,这非常快。
Sub RemoveEmptyRows()
Dim results As Variant, Target As Range
Dim c As Long, r As Long, n As Long
Set Target = Worksheets("Sheet1").UsedRange
If Target.Count > 0 Then
ReDim results(1 To Target.Rows.Count, 1 To Target.Columns.Count)
For r = 1 To Target.Rows.Count
If WorksheetFunction.CountA(Target.Rows(r)) > 0 Then
For c = 1 To Target.Columns.Count
n = n + 1
results(n, c) = Target.Cells(r, c).Value
Next
End If
Next
End If
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Target.Value = results
Application.ScreenUpdating = xlCalculationAutomatic
Application.ScreenUpdating = False
End Sub