【问题标题】:Delete Empty Rows In Excel Using VBA使用 VBA 删除 Excel 中的空行
【发布时间】:2020-03-22 10:18:25
【问题描述】:

我正在尝试使用以下代码删除 excel 中的空行:

iRowLast = .Cells(.Rows.Count, iCol_Exp).End(xlUp).Row
Set r = .Range("A1:F48")
Set Z = ActiveSheet.Range("A1:Z50")

For i = iRowLast To 10 Step (-1)
    r.Rows(i).Replace What:=Chr(32), Replacement:="", LookAt:=xlPart
    If WorksheetFunction.CountA(r.Rows(i)) = 0 Then Z.Rows(i).Delete
Next

我也在寻找空的单元格和空格,并且只有在所有相应的列都是空的或没有任何实际数据的空格时才想删除该行。

此代码中的问题是它还删除了 excel 表中数据之间的空格。请提供建议如何避免这种情况。

【问题讨论】:

  • 什么是r,什么是Z
  • 我已经编辑了代码并提到了 r 和 z。根据我要检查的单元格的需要,这些是我自己的范围。
  • r.Rows(i).Formula = Application.Trim(r.Rows(i).Formula)替换r.Rows(i).Replace What:=Chr(32), Replacement:="", LookAt:=xlPart
  • 这很好,谢谢

标签: excel vba


【解决方案1】:

如果您不介意同时具有数据和前导/滞后空格的单元格被修改(修剪),那么 Siddharth 的响应非常简洁。另一种选择是检查单元格是否完全由空格组成......类似于......

iRowLast = .Cells(.Rows.Count, iCol_Exp).End(xlUp).Row
Set r = .Range("A1:F48")
Set Z = ActiveSheet.Range("A1:Z50")

For i = iRowLast To 10 Step (-1)
    'r.Rows(i).Replace What:=Chr(32), Replacement:="", LookAt:=xlPart
    For Each vcell In r.Rows(i).Columns
        If Len(Replace(vcell, " ", "")) = 0 Then vcell = ""
    Next

    If WorksheetFunction.CountA(r.Rows(i)) = 0 Then Z.Rows(i).Delete
Next

【讨论】:

  • 如果单元格中有空格,则不会删除该行。如果没有数据并且单元格中有空格,我希望删除整行。
  • 我在精简的上下文中使用我自己的测试数据测试了代码,它可以工作,但是没有看到您的数据集等,我无法说出为什么它特别不适合您。您是否在调试中运行它并检查过,例如,数据中是否存在隐藏字符(如 Alt-Enter 或 =CHAR(10)),这使得它看起来应该可以工作,但实际上会使逻辑出错?鉴于代码添加只是检查一个单元格是否完全由空格组成,如果是,则将其设为空......检查起来应该不会太难。干杯。
猜你喜欢
  • 1970-01-01
  • 2013-10-18
  • 2012-03-11
  • 1970-01-01
  • 1970-01-01
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多