今回は特定の文字列が含まれているか判定する方法を紹介したいと思います。
任意の文字列が含まれているか判定する方法
それでは早速コードを紹介します。
検索先の文字列base_str
に検索対象の文字列target_str
が含まれているか判定するコードです。
Sub check_TargetStr()
Dim base_str As String
Dim target_str As String
'検索先の文字列
base_str = "はりぼなブログにようこそ!"
'検索対象の文字列
target_str = "はりぼな"
If base_str Like "*" & target_str & "*" Then
MsgBox "「" & target_str & "」が見つかりました。"
Else
MsgBox "「" & target_str & "」が見つかりませんでした。"
End If
End Sub
実行するとbase_str
とtarget_str
の中身に応じて処理が変化します。
含まれていれば見つかった旨のメッセージが表示され、含まれていなければ見つからなかった旨のメッセージが表示されます。
コードの解説
それではコードについてざっくり解説します。
ポイントになるのはメインの処理になるif~Like
になります。
If~Likeについて
If~Like
はざっくり言うと指定した条件が部分一致しているか判定する処理になります。
今回の例ではbase_str
にtarget_str
が含まれているか判定したいので、base_str Like target_str
としています。
しかし、実際にIf base_str Like target_str
としても部分一致させることができず、完全一致かどうかでの判定になってしまいます。
'検索先の文字列
base_str = "はりぼなブログにようこそ!"
'検索対象の文字列
target_str = "はりぼな"
'部分一致にならず完全一致かどうかの判定になる(Falseになる)
If base_str Like target_str Then
~
これを回避する為にはワイルドカードを付与する必要があります。
「ワイルドカードとは何ぞや」ってなると思いますが、ざっくり不特定多数の文字列のことで、これを文字列に付与すれば部分一致で判定できる、と思っておけばとりあえずOKです。
ワイルドカードにも色々種類があるのですが、今回は*(アスタリスク:半角)を使用します。
*は0文字以上の不特定多数の文字列のことで、これを付与すれば文字列の前後に何かしらの文字列が入っていても問題なく判定ができるようになります。
付与の仕方も特に難しくなく、文字列の任意の位置に*を付けてあげるだけです。
'target_strの前後に*を付与すれば部分一致で判定できる
If base_str Like "*" & target_str & "*" Then
...
ちなみに*を文字列の前にだけ付けると指定の文字列で終わっているかが判定でき、後ろにだけ付けると指定の文字列で始まっているかが判定できます。
'base_strにtarget_strが含まれているか判定
base_str = "はりぼなブログです"
target_str = "はりぼな"
'base_strがtarget_strで始まっているか判定
If base_str Like target_str & "*" Then
~
End If
'base_strの最後にtarget_strがあるか判定
If base_str Like "*" & target_str Then
~
End If
文字列が含まれていない時に処理したい場合
今回は文字列が含まれている場合の処理を紹介しましたが、逆に「特定の文字列が含まれていない時に処理したい」なんて場合もあると思います。
そういった時はNot
を使用すれば実現できます。
書き方も簡単で、条件式をNot(~)
で囲むだけです。
'条件式をNot(~)で囲む
'base_strにtarget_strが含まれていないか判定
If Not(base_str Like "*" & target_str & "*") Then
'target_strがなかった時に処理する
Else
'target_strがあった時に処理する
End if
こうすると条件式を満たさない時にTrue部分の処理が実行されるようになります。
要はNot
を付けると処理が反転する、といった感じです。
まとめ
今回は特定の文字列が含まれているか判定する方法を紹介しました。
文字列操作の際に多用する処理になるので、是非覚えておきましょう!
このブログではVBAに関する記事を不定期で投稿していますので、是非ご覧ください!
コメント