【问题标题】:EXCEL VBA EVALUATE and REPLACEEXCEL VBA 评估和替换
【发布时间】:2017-04-17 15:51:06
【问题描述】:

我需要让 Evaluate 为 Replace 函数工作。该代码应该什么都不替换“-0700”。下面提供了代码以及 C 列中的数据:

Set sh = ThisWorkbook.Sheets(1)
Set rangc = sh.Range("c2:c10")
For Each area In rangc.Areas
  area.Value = Evaluate("IF(ROW(" & area.Address & ")," & Replace(area.Address, " -0700", "") & ")")
Next area

-这是工作表中的数据:

ColumnC(original data)
 -0700
sdfg -0700
how  -0700 saf
2016-10-16 10:13:41 -0700

ColumnC(After code is run)
-700
sdfg -0700
how  -0700 saf
10/16/2016 10:13

为什么代码对第一行做了一些事情(-700)但没有用“”替换。它也确实删除了第 4 行中的“-700”(2016 年 10 月 16 日 10:13)。但它不适用于第 2 行和第 3 行?如何使其适用于字符串或数字?

我正在尝试使用类似的代码非常快速地替换另一个字符串中的部分字符串。我不能接受使用循环方法,因为有数十万行。

【问题讨论】:

  • 为什么代码对第一行(-700)做了一些事情,但没有用“”替换。它也确实删除了第 4 行中的“-700”(2016 年 10 月 16 日 10:13) 我认为这些删除不是您的代码替换的结果,而只是 Excel 进行的一些自动格式化。
  • 你可能是对的,我正在寻求一个不存在的 Evaluate 解决方案。
  • 您正在将Replace 函数应用于地址,该地址不会替换任何内容。可能有一些方法可以使用SUBSTITUTE,但我认为.Replace 方法将是这里的首选解决方案。

标签: excel vba replace evaluate


【解决方案1】:

您不需要遍历整个范围。你可以使用 .Replace 方法,它非常快:

Set sh = ThisWorkbook.Sheets(1)
Set rangc = sh.Range("c2:c10")
rangc.Replace What:=" -0700", Replacement:=""

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2013-07-15
    • 2016-08-19
    相关资源
    最近更新 更多