我在 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
第一个没问题,但是有很多问题:
- 耗时是单次更换的两倍
- 它是否已经崩溃或继续工作并不总是很清楚
- 如果它确实崩溃了,我会留下一些包含 -@- 的单元格,这并不总是很明显,并且该工具应该可以被无法理解 VBA 的人使用。
所以我的问题:
- 有没有办法只使用一个替换来做到这一点?为什么替换与双重替换一起使用,而不是单一替换?
- 如果第一个是不可能的,那么如果代码崩溃,有没有办法“回滚”替换?
- 有没有一种方法可以更新状态栏以显示替换的程度以证明代码正在运行(就像在 Excel 本身中运行替换时一样)?
- 还是有更好的方法来完成这一切?
提前致谢!
编辑:不幸的是,由于正在处理数据,我需要保留格式,包括前导零
编辑:这是我正在查看的数据类型的示例。我想替换零长度字符串(它们是没有值的非空白单元格),因此它们是一个真正的空白单元格。