excel - 如何使用 VBA 删除 Excel 中的零长度字符串?

标签 excel vba replace nonblank

我在 VBA for Excel 中创建了一个工具,可以根据多种标准分析我们收到的 .xlsx 文件。其中之一是数据集中的空单元格数量。但不幸的是,我注意到我们收到的许多文件包含带有零长度字符串的单元格,这些单元格被“错误地”计为非空单元格。

如果我能够从文件中删除这些内容,实际上对整个过程非常有益。

我已经用谷歌搜索了很多这个问题,但到目前为止我能找到的唯一解决方案是循环遍历工作表中的所有单元格(我也尝试过只使用常量,并且还使用 Find 来查找所有 zls) 。这不是很有效,因为工作表中包含大量数据。 编辑:我还尝试了UsedRange.values =usedRange.values方法,但这会删除我需要的前导零。

我还发现这是可行的(-@- 是一个随机字符串,极不可能是我的数据中的单个单元格,如果存在,则可以将其删除):

ws.UsedRange.Replace what:=vbNullString, replacement:="-@-", _
                            lookat:=xlWhole, MatchCase:=False
ws.UsedRange.Replace what:="-@-", replacement:="", _
                            lookat:=xlWhole, MatchCase:=False

但如果我只使用单个替换来完成它,则不会:

ws.UsedRange.Replace what:=vbNullString, replacement:="", _
                            lookat:=xlWhole, MatchCase:=False

第一个是可以的,但是有很多问题:

  1. 所需时间是单次替换的两倍
  2. 并不总是清楚它是崩溃了还是继续工作
  3. 如果它确实崩溃了,我会留下许多包含 -@- 的单元格,这并不总是显而易见的,并且该工具应该可以被无法理解 VBA 的人使用。<

所以我的问题:

  1. 有没有办法只使用一次替换来做到这一点?为什么替换可以使用双重替换,但不能使用单一替换?
  2. 如果第一个不可能,那么在代码崩溃时是否有办法“回滚”替换?
  3. 有没有办法更新状态栏以显示替换进行了多远,以证明代码正在运行(很像在 Excel 本身中运行替换时)?
  4. 或者是否有更好的方法来完成这一切?

提前致谢!

编辑:不幸的是,由于正在处理数据,我需要保留格式,包括前导零

编辑:这是我正在查看的数据类型的示例。我想替换零长度字符串(它们是没有值的非空白单元格),因此它们是真正的空白单元格。

Table containing zero-length-strings

最佳答案

我知道这也是一个循环,但也许是一种更快的方法:

之前:

enter image description here

在示例数据上运行此代码:

Dim X As Double

Option Explicit

Sub Test()

Application.ScreenUpdating = False
Application.Calculation = xlManual

With ActiveWorkbook.Sheets(1).Range("A1:C7")
    For X = 1 To 3
        .AutoFilter Field:=X, Criteria1:=""
        .Columns(X).Offset(1, 0).SpecialCells(xlCellTypeVisible).Clear
    Next X
    .AutoFilter
End With

Application.Calculation = xlAutomatic
Application.ScreenUpdating = True

End Sub

之后:

enter image description here

关于excel - 如何使用 VBA 删除 Excel 中的零长度字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56021321/

相关文章:

excel - 替换Excel中的所有字母

javascript - 如何替换 javascript/jquery 中嵌套元素上的文本

使用awk将一个文件中的列替换为另一个文件中的列?

java - 来自sheet.drawingPatriarch.getChildren()的空指针

excel - 如何在 Excel 工作表中提取完整路径的文件名

r - Excel VBA 和 R : batch mode vs interactive mode

excel - 我可以使用函数返回两个值吗?

c# - 检索最后一列在 excel 中具有值

vba - 将 ActiveWindow.SelectedSheets 存储为对象以供稍后引用

vba - 从电子表格引用单元格并填充相应的单元格