我已经在Excel的VBA中创建了一个工具,可以根据多个标准分析我们收到的.xlsx文件。其中之一是数据集中空单元格的数量。然而,不幸的是,我注意到我们收到的一些文件中包含长度为零的字符串,这些字符串被“错误地”计算为非空单元格。
如果我能够将它们从文件中删除,对整个过程实际上会有很大的好处。
我已经搜索了很多关于此问题的解决方案,但到目前为止,我唯一找到的解决方案是遍历工作表中的所有单元格(我也尝试过仅使用常量,以及使用查找来查找所有zls)。这并不是很有效,因为工作表中有大量的数据。编辑:我还尝试过UsedRange.values = UsedRange.values方法,但这会删除前导零,而我需要保留。
我还发现以下方法可行(-@-是一个随机字符串,在我的数据中极不可能是一个单独的单元格,如果存在,可以被删除):
第一种方法可以,但存在以下几个问题:
如果我能够将它们从文件中删除,对整个过程实际上会有很大的好处。
我已经搜索了很多关于此问题的解决方案,但到目前为止,我唯一找到的解决方案是遍历工作表中的所有单元格(我也尝试过仅使用常量,以及使用查找来查找所有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中运行替换一样)?
- 还是有更好的方法来完成所有这些操作?
提前感谢您!
编辑:由于处理的数据,我需要保留格式,包括前导零
编辑:这里有一个我正在查看的数据示例。我想要将零长度字符串(即非空单元格但其中没有值)替换为真正的空单元格。
""
替换掉所有包含公式的单元格?或者你有一些包含公式但不能删除的重要信息吗? - Foxfire And Burns And Burns