【问题标题】:Replace, Clean & Trim VBA更换、清洁和修剪 VBA
【发布时间】:2018-10-25 07:54:08
【问题描述】:

我正在尝试:

  1. 将双空格替换为单空格。
  2. 干净
  3. 修剪

和我使用相同的字符串:

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

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

【问题讨论】:

  • 在同一个测试字符串上尝试所有可能的函数顺序并比较输出应该非常简单......你试过吗?需要清理的测试字符串是什么?
  • @Olly 我有一个 Excel 文档,其中有一列包含从网站下载的描述(通过复制粘贴),我将循环该列以清除从网站上抓取的多余字符,删除双倍空格或多余空格在字符串的开头或结尾,
  • 我的意思是,只有 6 种不同的方法可以对这三个函数进行排序 - 针对单个已知测试字符串测试所有 6 种组合、比较输出并确保选择函数顺序将返回您的预期结果。
  • 这是我发帖前的第一个想法。我想要的是确保没有任何标准化的方式来组合这三个功能。
  • ... 如果你从三个空格开始呢?最好摆脱替换并使用 application.trim。

标签: excel vba


【解决方案1】:

vba.trim 不会删除双倍空格,只会删除前导/尾随空格。您需要工作表版本 Application.Trim 或 WorksheetFunction.Trim 来删除临时双空格。

如果您有三倍间距,则单个替换将为您留下双倍空格。 Application.Trim 不会。

您不希望 Clean 处理无论如何都要删除的字符(即空格),因此请先修剪。

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

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

【讨论】:

  • clean 不影响空格,只影响 ascii
  • ...但它仍然需要确定是否处理它。用 990 个空格清除 1K 个字符不会比清除没有前导/尾随或双空格的 10 个字符更快,无论哪种情况,Trim 仍然需要它的工作。
【解决方案2】:
 AmountI = Trim(Replace(Application.WorksheetFunction.Clean(.Cells(j, 9).text), "  ", " "))

我的逻辑是: 1 .Text 比 .Value 快 2 Clean 可能会通过删除它们之间的非打印字符来关闭两个空格,所以在此之前执行此操作... 3 用替换将双空格变成单空格,然后 4 删除前导和尾随空格

【讨论】:

  • 如果单元格有缩进格式,.Text 将显示前导空格并必须对其进行处理。 .Value2 是没有其他考虑的原始基础文本值。
  • .Value2 也比.Text
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-12
  • 1970-01-01
  • 2016-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多