Excel – VBA:使“replace”function更具体

我目前遇到了一个似乎并不难解决的问题,但是,我却找不到一个干净的方法。

我正在使用“replace”function来更改用户键入的句子中的某些expression式。 例如,如果用户键入“va”,我希望它被转换成“VA”,所以它将更容易地与我的数据库匹配以进一步操作。

这是我的简单代码来做到这一点

sMain.Range("J3").Replace "VA", "VA" 

它运作良好。
问题在于, 不仅将“VA”看作个人expression,而且还将其看作是词的一部分

所以,如果我的用户input“梵蒂冈”,它会变成:“VAtican”…当然我不想要。

你知道如何轻松地指定我的代码,使其只考虑replace匹配expression式的整个单词 ? (我有几十行这样的replace是如此理想,如果可能,最好直接采取“replace”function)。

提前致谢 !

做这个:

 sMain.Range("J3").Replace " VA ", "VA" 

然后处理原始string以VA开始或结束的情况,处理所有可能是(例如)制表符,空格或逗号的分隔符的情况。 要做到这一点:

 const nSep As Integer = 3 Dim sep(nSep) As String sep(1) = " " sep(2) = vbTab sep(3) = "," for i=1 to nSep for j=1 to nSep sMain.Range("J3").Replace sep(i) & "VA" & sep(j), "VA" next next 

可以将其分解并检查每个单词。 我已经把它变成了一个易于使用和灵活的function。

 Function ReplaceWordOnly(sText As String, sFind As String, sReplace As String) As String On Error Resume Next Dim aText As Variant, oText As Variant, i As Long aText = Split(sText, " ") For i = 0 To UBound(aText) oText = aText(i) ' Check if starting with sFind If LCase(Left(oText, 2)) = LCase(sFind) Then Select Case Asc(Mid(oText, 3, 1)) Case 65 To 90, 97 To 122 ' obmit if third character is alphabet (checked by ascii code) Case Else aText(i) = Replace(oText, sFind, sReplace, 1, -1, vbTextCompare) End Select End If Next ReplaceWordOnly = Join(aText, " ") End Function 

示例输出:

 ?ReplaceWordOnly("there is a vatican in vA.","Va","VA") there is a vatican in VA.