Not a Like bがLike否定の正しい構文
Notを付ける場所が分からない。VBAあるあるです。
「a Not Like b」だっけ?
「a Like Not b」だっけ?
「a Like Is Not b」だっけ?
正解は「Not a Like b」です。
それを踏まえて、以下では通常のLike検索と、Like否定検索について説明します。
指定文字列が含まれるか検索(Like)
ある文字列の中に、指定した文字列が含まれるかを調べる場合は、Like演算子を使って判定できます。
検索したい文字列は2文字以上設定可能です。
以下のコードは、配列に格納された各文字列の中で、指定文字を含む場合はMatch、含まない場合はUnMatchを出力します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub LikeTest1() Dim s Dim ar() ReDim ar(4) ar(0) = "大学" ar(1) = "高校" ar(2) = "中学校" ar(3) = "小学校" ar(4) = "幼稚園" For Each s In ar If s Like "*学校*" Then Debug.Print s & " 学校を含む" Else Debug.Print s & " 学校を含まない" End If Next End Sub |
実行結果
大学 学校を含まない
高校 学校を含まない
中学校 学校を含む
小学校 学校を含む
幼稚園 学校を含まない
指定文字列が含まれないか検索(Likeの否定)
指定文字列が含まれないことを検索する場合は、含む場合の条件にNotを付けて、結果を反転させます。
Notを付けるときにどこに付ければいいのかを忘れがちですが、構文を考えると理屈としてどこに付ければよいのかを覚えられます。
Like演算子は「a Like b」の構文で書いて、判定結果としてTrueかFalseを返します。
Notを付けるのはTrueとFalseを反転させることになるため、Like演算子の構文にNotを付けて「Not」+「a Like b」とします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub LikeTest2() Dim s Dim ar() ReDim ar(4) ar(0) = "大学" ar(1) = "高校" ar(2) = "中学校" ar(3) = "小学校" ar(4) = "幼稚園" For Each s In ar If Not s Like "*学校*" Then Debug.Print s & " 学校を含まない" Else Debug.Print s & " 学校を含む" End If Next End Sub |
実行結果
大学 学校を含まない
高校 学校を含まない
中学校 学校を含む
小学校 学校を含む
幼稚園 学校を含まない