2017-02-26 133 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")