2017-02-26 183 views
1

我想从另一个字符串中使用VBA替换函数删除字符串。使用VBA的精确匹配替换

从我试图消除看起来像下面包含单元格地址通过;

"$B$1;$B$21;$B$2;$C$3;$B$20;$B$201"

串接的字符串,我想删除该字符串为$B$2的发言权XXX。

的替换功能相匹配的字符串中$B$2所有事件和给我的输出如下

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

不过,我想寻找$B$2正是在串并期待一个输出像

$B$1;$B$21;xxx;$C$3;$B$20;$B$201

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

回答

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) 
+0

感谢这样一个美丽的解决方案 –

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 

到在你的“主”子目录中被利用如下:

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