【问题标题】:Racking my brain trying to replace a substring in a formula without replacing a slightly larger substring?绞尽脑汁试图替换公式中的子字符串而不替换稍大的子字符串?
【发布时间】:2021-11-10 01:27:02
【问题描述】:

简单地说,我有一个带有公式的单元格

=IF(A4="Name", IFERROR(J4*(I4-AI4), 0), "")

我正在尝试用“BH4”替换“I4”,而“AI4”也不会变成“ABH4”。但不能假设该公式将始终遵循这种模式(因此不是真正的选项来查找和替换字符串的第一次出现或类似的东西

我研究了 Replace 和 Substitute 函数,但它们似乎不处理通配符。 我还尝试使用 Range.Replace 方法,我认为该方法可以处理通配符,但我无法真正让它工作。但即便如此,如果我不确定哪种通配符设置会起作用

【问题讨论】:

  • (BH4替换(I4?
  • @ScottCraner 哈哈,这实际上是我最终不得不做的,只是为了让宏能够工作,同时还要检查其他运算符和标点符号,如“”、“-”、“*” , 和 "," 但我希望找到一个更优雅的解决方案

标签: excel vba replace substitution


【解决方案1】:

假设公式在单元格B9中。

这只会改变子字符串的第一次

Sub FixFormula()
    With Range("B9")
        .Formula = Application.Substitute(.Formula, "I4", "BH4", 1)
    End With
End Sub

【讨论】:

  • 谢谢,我唯一的问题是我希望在其他列中使用相同的一般原则,这些列将有不同格式的公式,我不能假设需要替换的字符串只需要被替换一次,否则它将是最左边的出现
【解决方案2】:

我认为您需要使用类似这样的正则表达式:

Sub regex()

    Set myRegExp = New RegExp
    myRegExp.Pattern = "([^a-zA-Z])I4([^a-zA-Z])"
    
    With Range("A1")
        .Formula = myRegExp.Replace(.Formula, "$1AB4$2")
    End With

End Sub

请注意,您必须首先在 VBA 屏幕中转到工具|参考并启用 Microsoft VBScript 正则表达式 5.5。

【讨论】:

  • 谢谢,这看起来符合我希望能够做到的事情,我会调查一下。
猜你喜欢
  • 2017-03-16
  • 2018-03-26
  • 2014-05-18
  • 2012-04-03
  • 2013-07-23
  • 1970-01-01
相关资源
最近更新 更多