替换、清理和修剪VBA代码

3
我将尝试:
  1. 将双空格替换为单个空格。
  2. 清理
  3. 修剪
我使用以下代码来处理相同的字符串:
AmountI = Replace(Application.WorksheetFunction.Clean(Trim(.Cells(j, 9).Value)), "  ", " ")

我想知道这三个VBA函数是否有特定的顺序,或者顺序对结果没有任何影响。谢谢帮助!


1
尝试在同一个测试字符串上尝试所有可能的函数顺序并比较输出应该很简单...你尝试过这个吗?需要清理的测试字符串是什么? - Olly
@Olly,我有一个包含从网站下载的描述的列的Excel文档(通过复制粘贴),我将循环遍历此列以清除从网站抓取的额外字符,在字符串开头或结尾删除双倍间距或额外空格。 - Error 1004
这是我发布之前做的第一件事。我的目的是确保没有任何标准化的方法来组合这三个函数。 - Error 1004
vba.trim 无法删除双倍间距,只能删除前导/尾随空格。您需要使用工作表版本的 Application.Trim 或 WorksheetFunction.Trim 来删除临时的双倍间距。 - user4039065
1
如果你使用三个空格开头会怎么样呢?最好不要使用“replace”,而是使用“application.trim”来去除空格。 - user4039065
显示剩余2条评论
2个回答

5

vba.trim无法去除双倍空格,只能去除前导/尾随空格。你需要使用工作表版本的Application.Trim或WorksheetFunction.Trim来去除中间的双倍空格。

如果您有三倍空格,一次替换将使您剩下双倍空格。而Application.Trim则不会这样。

您不希望Clean处理您要删除的字符(即空格),因此请先进行Trim。

.Value2(没有货币或日期信息)在您没有货币或日期数据时处理速度略快;因为您有一个字符串,所以请使用.Value2。

AmountI = Application.Clean(Application.Trim(.Cells(j, 9).Value2))

清除不会影响空格,只会影响ASCII码小于等于31的字符。 - Harassed Dad
...但它仍然需要确定是否要处理它。清理带有990个空格的1K字符不可能比清理没有前导/尾随或双倍空格的10个字符更快,而且在任何情况下,Trim仍然需要完成它的工作。 - user4039065

0
 AmountI = Trim(Replace(Application.WorksheetFunction.Clean(.Cells(j, 9).text), "  ", " "))

我的逻辑是: 1. 文本比值快。 2. 清理可能会通过删除两个空格之间的非打印字符来关闭这两个空格,因此请在此之前执行此操作... 3. 使用替换将双空格转换为单个空格,然后 4. 删除前导和尾随空格。

1
如果单元格具有左缩进格式,则.Text将显示该前导空格并必须处理它。.Value2是没有其他考虑因素的原始基础文本值。 - user4039065
.Value2 is also faster than .Text - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接