使用VBA替换的完全匹配

时间:2017-02-26 09:57:57

标签: regex vba excel-vba replace pattern-matching

我正在尝试使用VBA替换函数从另一个字符串中删除字符串。

我想要删除的字符串如下所示,其中包含由x连接的单元格地址

if

我想删除的字符串是; xxx。

替换函数匹配字符串中所有出现的"$B$1;$B$21;$B$2;$C$3;$B$20;$B$201"并给出输出如下

$B$2

但是我想在字符串中准确搜索$B$2并期望输出

$B$1;xxx1;xxx;$C$3;xxx0;xxx01

我可以想到这样做的一种方法是将$B$2上的字符串拆分(分隔符和循环并查看每个值),但我在这里寻找更直接的解决方案。就像使用模式匹配技术或其他东西一样。

2 个答案:

答案 0 :(得分:3)

您可以在替换操作中包含以下;,以确保只匹配“完整”引用。您只需要采取预防措施以匹配最后一个条目,最后在末尾添加一个虚拟分号:

s = "$B$1;$B$21;$B$2;$C$3;$B$20;$B$201"
find = "$B$2"
repl = "xxxx"
result = Replace(s & ";", find & ";", repl & ";")
result = Left(result, Len(result)-1) ' Remove the final semicolon

虽然这适用于您的情况,但在更一般的练习中,您还需要测试前面的分隔符,然后最后两行看起来像这样:

result = Replace(";" & s & ";", ";" & find & ";", ";" & repl & ";")
result = Mid(result, 2, Len(result)-2)

答案 1 :(得分:2)

你冷酷的使用:

Function myReplace(strng As String, findStr As String, replacementStrng As String)
    myReplace = Replace(strng & ";", findStr & ";", replacementStrng & ";")
    myReplace = Left(myReplace, Len(myReplace) - 1)
End Function

在你的" main"中被利用子如下:

strng = "$B$1;$B$21;$B$2;$C$3;$B$20;$B$201"
MsgBox myReplace(strng, "$B$2", "xxx")