0

私は現在、修正するのがそれほど難しくないように見える問題に遭遇していますが、それでも、自分でそれを行うクリーンな方法を見つけることができません.

「置換」機能を使用して、ユーザーが入力した文の一部の表現を変更しています。たとえば、ユーザーが「va」と入力した場合、代わりに「VA」に変換して、以降の操作でデータベースとより簡単に一致するようにします。

これを行うための私の簡単なコードは次のとおりです。

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

それはうまくいきます。
問題は、「VA」が個々の表現としてだけでなく、単語の一部としても認識されていることです。

したがって、ユーザーが「Vatican」と入力すると、「VAtican」に変わります... もちろん、これは望ましくありません。

私のコードを簡単に指定して、式に一致する単語全体の置換のみを考慮する方法を知っていますか? (私はこれらの置換の行を何十も持っているので、理想的には、「置換」機能に直接作用する方が良いでしょう-可能であれば)。

前もって感謝します !

4

2 に答える 2

2

分割して各単語を確認できます。使いやすさと柔軟性のために関数に入れました。

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","V. A.")
there is a vatican in V. A..
于 2013-08-02T03:27:50.083 に答える