私は、文字列内の単語を検索する次の関数を持っています。例えば、donを検索すると、donが見つかり、それは私が望むものではありません。 "私はDonを知らないのですか?文字列内の単語を検索するExcel VBA関数でワイルドカード*を使用するにはどうすればよいですか?
私はまた、私はレース、レース、レースのような言葉を探す必要があることを知っています。私はrac *を検索して、そのようなバリアントをすべて検索するのではなく、そのようなバリアントをすべてカバーできるようにしたいと考えています。
これを行うにはコードを更新することはできますか?あるいは誰かがこの問題を解決できるコードを持っていますか?私は次のように行くと思い
Function InStrExact(Start As Long, SourceText As String, WordToFind As String, _
Optional CaseSensitive As Boolean = False)
Dim x As Long, Str1 As String, Str2 As String, Pattern As String
If CaseSensitive Then
Str1 = SourceText
Str2 = WordToFind
Pattern = "[!A-Za-z0-9]"
Else
Str1 = UCase(SourceText)
Str2 = UCase(WordToFind)
Pattern = "[!A-Z0-9]"
End If
For x = Start To Len(Str1) - Len(Str2) + 1
If Mid(" " & Str1 & " ", x, Len(Str2) + 2) Like Pattern & Str2 & Pattern _
And Not Mid(Str1, x) Like Str2 & "'[" & Mid(Pattern, 3) & "*" Then
InStrExact = x
Exit Function
End If
Next
End Function
パターンマッチングが複雑になるにつれて、正規表現を学習して使用すると、より便利で柔軟なツールになることがあります。 [VBAの正規表現の使い方](http://stackoverflow.com/questions/22542834/how-to-use-regular-expressions-regex-in-microsoft-excel-both-in-cell-and-loops) –
@Delについて*「私はドンの友人です」*?この場合、あなたのコードは* "Don" *にマッチしますか? –