【问题标题】:如果选定行中的所有单元格为空白,则删除行
【发布时间】:2022-01-23 15:05:15
【问题描述】:

我有财务数据,其中某些行是空白的,如果选定范围内的整行都是空白的,我希望能够删除整行(它在选定范围内很重要,因为我可能有“收入” A 列,但 BD 列是空白数据(基本上没有数字)。

我希望它应用于选定的范围,而不是在代码中具有预定范围(以使代码灵活)。

我正在尝试使用这种格式,但它似乎不起作用:

Sub deleteBlankRows()
Dim c As Range

On Error Resume Next
For Each c In Selection.Row.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Next
End Sub

欢迎提出任何想法。

【问题讨论】:

    标签: excel vba delete-row


    【解决方案1】:

    循环遍历每个完整行选择并检查空白单元格的数量是否与行中所有单元格的数量匹配:

    我的代码:

    Dim rng As Range
    
    For Each rng In Selection.Rows
        If Application.WorksheetFunction.CountBlank(rng) = rng.Cells.Count Then rng.EntireRow.Delete
    Next rng
    

    执行代码后:

    空行不见了

    更新:

    @VasilyIvoyzha 是绝对正确的。 For each 在这种情况下无法正常工作。更好的方法是:

    Dim i&, x&, lastRow&
    lastRow = Range(Split(Selection.Address, ":")(1)).Row
    x = Selection.Rows.Count
    For i = lastRow To Selection.Cells(1).Row Step -1
        If WorksheetFunction.Concat(Selection.Rows(x)) = "" Then Rows(i).Delete
        x = x - 1
    Next i
    

    这种方式会在选择时删除空行,即使它们是连续的。

    【讨论】:

    • 如果一行一行是空的,第二行不会被删除,我这边提前加1但是最好把for each改成forstep -1
    • @VasilyIvoyzha 你是对的。更新了代码。谢谢!
    • 大家好,谢谢您的反馈,我确实注意到第一个代码与@VasilyIvoyzha 相同,第二个代码 --------- Dim i&, lastRow& lastRow = Selection .SpecialCells(xlLastCell).Row For i = lastRow To Selection.Cells(1).Row Step -1 If WorksheetFunction.Concat(Rows(i)) = "" Then Rows(i).Delete Next i End Sub ' -- -------它似乎根本不起作用(我选择范围c1:f5)可能是因为我在A列中有文字吗? (不好意思不知道如何在cmets中贴出代码)
    • @JROB 认为整行都是空的,请参阅更新
    • 非常感谢你们,是的,它就像一个魅力!
    猜你喜欢
    • 2015-11-13
    • 2019-06-18
    • 2019-06-16
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 2018-04-15
    • 1970-01-01
    相关资源
    最近更新 更多