Excel VBA > VBA:実務活用 > Like演算子(「○○が含まれない」検索)で気を付けること
このエントリーをはてなブックマークに追加

Like演算子(「○○が含まれない」検索)で気を付けること

Like演算子は手軽な文字列検索機能だけど・・

Like演算子は文字列の検索では手軽です。InStrよりも柔軟性があるので、正規表現よりも勝手がよくこの手の検索では重宝します。
しかしながらちょっと気を付ける点もあります。逆に気を付けないと全く予期しない結果が返ってくるので要注意です。

実際に検索すると気を付けることが分かる

どんな点を注意するのかは、実際に例を見てもらった方が早いです。
下記の表は対象となる都道府県をLike演算子で判別し、Trueなら「○」を入れるようにしています。
like_chui_01

Sub 対象となる都道府県の抽出1()

    Dim i As Integer
    For i = 2 To 6

        ‘————————–
        ‘東京以外を対称にする
        ‘————————–
        If Cells(i, 1).Value Like “[!東京]*” Then
            Cells(i, 2).Value = “○”

        ‘対称でなければ空白
        Else
            Cells(i, 2).Value = “”
        End If
    Next i

End Sub

「東京」以外で実際に行った処理結果を見ると下記のようになります。
どういうわけか「京都府も対象から漏れている」ことが分かります。
like_chui_02

charlistは「1文字」単位となる

マイクロソフトのページにも記載がありますが、[]を使ったcharlistは複数の文字があっても1文字単位で判定されるということです。
つまりこれは上記は簡単に言えば、
「東」からなる文字がないかどうか
「京」からなる文字がないかどうか

でチェックされると言えます。

「文字列が含まれない」は反転してみるのが楽

「○○」が含まれない、という判定は逆説的なロジックがシンプルだと思います。
つまり、

Sub 対象となる都道府県の抽出2()

    Dim i As Integer
    For i = 2 To 6

        ‘————————–
        ‘東京以外を対称にする
        ‘————————–
        If Not Cells(i, 1).Value Like “東京*” Then
            Cells(i, 2).Value = “○”

        ‘対称でなければ空白
        Else
            Cells(i, 2).Value = “”
        End If
    Next i

End Sub

上記にすることで「1文字以上の文字列」を「含む」判定できので、逆にFalse(True)であったデータを「Not」で反転させています。
like_chui_03

カテゴリ:VBA:実務活用