Excel中高级删除空白行

Excel中高级删除空白行

我遇到了一个严重的问题,我需要从一个巨大的 Excel 表中删除空行。

我的问题是我无法使用经典的 F5->选择空白->删除,因为非空白行上的某些字段也是空白的。

简化示例:

在此处输入图片描述

在上面的例子中,我该如何删除第 2、3、5、6、8、9、11、12、14、15、16 行,而不让 fx C7 出现在 C2 中?

在真正的 Excel 表中单独选择空白行会非常耗时,因为它有超过 35,000 行,而且这个操作不是一次性的事情。

答案1

这是一个 VBA 解决方案,无论空白在哪里都可以使用。只需将代码中的工作表名称替换为您的工作表名称,如代码注释中所述。

Sub delblankrows()

Dim s1 As Worksheet
Dim tmpR As Range
Dim rowcount As Long, colcount As Long, i As Long, j As Long, k As Boolean

'Change "Sheet1" to the name of your worksheet.
Set s1 = Sheets("Sheet1")
Set tmpR = s1.UsedRange
rowcount = tmpR.Rows.Count
colcount = tmpR.Columns.Count

'Starts from bottom row and looks for non-empty cells from left to right.
'Moves to row above if non-empty cell is found.
'If none is found, then deletes row and shifts values up.
For i = rowcount To 1 Step -1
    k = 0
    For j = 1 To colcount
        If tmpR.Value2(i, j) <> "" Then
            k = 1
            Exit For
        End If
    Next j
    If k = 0 Then
        tmpR.Rows(i).Delete Shift:=xlUp
    End If
Next i

End Sub

答案2

您可以使用以下公式在第 2 行的 A 列之前插入一个辅助列:

=COUNTA(B2:XFD2)

将其向下复制 35,000 行,自动筛选 A 列中的 0,突出显示可见的行,然后删除它们。取消筛选,至少有一列中有值的行将保留。然后删除辅助列。

答案3

Sub DeleteEmptyRows()

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

Dim i As Long
ActiveSheet.UsedRange.Select

With Application
    ' Turn off calculation and screenupdating to speed up the macro.
    .Calculation = xlCalculationManual
    .ScreenUpdating = False

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

    .Calculation = xlCalculationAutomatic
    .ScreenUpdating = True
End With

End Sub

答案4

只需同时选择整个 B 行和 C 行,右键单击并选择删除。从给出的选项中选择“整列”。这将删除空的 B 行和 C 行,并将 D (1-3) 移至 B (1-3) 中,紧挨着 A 行。

相关内容