替换VBA中的变量字符串

F.P*_*F.P 6 string excel vba replace excel-vba

我需要在字符串中替换somethin,但替换的内容可能会有所不同.有可能

XY - test
XXxY-test
XXyyXx-TEST
yXyy     -Test
Run Code Online (Sandbox Code Playgroud)

几乎任何其他空白组合和上述情况.

我需要更换"-test"部分并单独留下"XXX".所以,当使用简单的替换

Replace("XXX  -test", "- test", "")
Run Code Online (Sandbox Code Playgroud)

显然,它不会起作用.所以我需要一个更复杂的Replace版本来处理这个任务.有什么我可以使用或我必须自己写吗?

egg*_*yal 8

如果您需要比mj82方法提供的更多灵活性(例如,您可能不知道初始表达式的长度),则可以使用正则表达式.例如:

Regex.Replace("XXX  -test", "\s*-\s*test", "", RegexOptions.IgnoreCase)
Run Code Online (Sandbox Code Playgroud)

  • 我正在尝试使用你的函数,我得到的对象不存在错误.当我为"Regex"添加一个手表时,它表示该对象是空的.任何想法为什么会这样?我需要加载库吗?我在Excel 2010中 (2认同)

aev*_*nko 8

这是为了赞美eggyal的答案.这是一个VBA regexreplace函数,以便您可以使用他的答案.您会注意到我添加了ignore_case作为灵活性的选项,因此您的调用将是:

=RegexReplace(cell, "\s*-\s*test", "", TRUE)
Run Code Online (Sandbox Code Playgroud)

这是函数,我希望你发现它很有用:

' -------------------------------------------------------------------
' Search and Replace using a regular expression
' -------------------------------------------------------------------

Function RegexReplace(ByVal text As String, _
                      ByVal replace_what As String, _
                      ByVal replace_with As String, _
                      Optional ByVal ignore_case As Boolean = False) As String

Dim RE As Object
Set RE = CreateObject("vbscript.regexp")

RE.ignorecase = ignore_case
RE.pattern = replace_what
RE.Global = True
RegexReplace = RE.Replace(text, replace_with)

End Function
Run Code Online (Sandbox Code Playgroud)