「エクセル マクロ select case value like」
「マクロ 指定文字を含む select case」
「vba select case ワイルドカード」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。
条件分岐文の一つ、Select Case文で、ワイルドカードを使ったあいまい条件の判定・文字列を含む場合といった判定を行う方法を探している方による検索です。
Select Case文のサンプル
まずはSelect Case文の基本を確認しましょう。
Dim addr As String
addr = ActiveCell.Value
Select Case addr
Case "東京都"
MsgBox "○"
Case Else
MsgBox "-"
End Select
上記のマクロを実行すると、アクティブセルに「東京都」という文字列が入力されていれば「○」、そうでなければ「-」がメッセージボックスに表示されます。
Select Case文であいまい判定したいという要望
これを例えば、「東京都」ではじまる文字列だったとき、といったあいまい条件で処理を分岐をさせたいというのが実務でよく出てくる要望です。
上記のマクロの、
Select Case addr
Case "東京都"
の部分を、
Select Case addr
Case "東京都*"
のようにワイルドカードを追加してみる方が、多いでしょうか。
残念ながら、
Select Case addr
Case "東京都*"
という指定では、変数・addrの値が「東京都*」という文字列だったとき、という条件になってしまいます。
Like演算子を使って、
Select Case addr
Case addr Like "東京都*"
という書き方を試す方も多いでしょう。
「addr Like "東京都*"」という比較演算がTrueかFalseを返すため、
Select Case addr
Case addr Like "東京都*"
もダメです。
なお「addr Like "東京都*"」という比較演算が何を返してくるのかがピンと来ない方は、
Dim addr As String
addr = ActiveCell.Value
MsgBox addr Like "東京都*"
というコードを是非試してみてください。
Select Case文でLike演算子を使ってあいまい条件の判定を行うサンプル
で、以下のような書き方をするとアクティブセルの値が「東京都」という文字列で始まっているとき、という判定を行うことができます。
Dim addr As String
addr = ActiveCell.Value
Select Case True
Case addr Like "東京都*"
MsgBox "○"
Case Else
MsgBox "-"
End Select
ポイントは、
Select Case True
Case addr Like "東京都*"
の部分の「Select Case True」です。
比較演算のサンプルコード
Dim addr As String
addr = ActiveCell.Value
MsgBox addr Like "東京都*"
を試してみると、「addr Like "東京都*"」という比較演算が行われると、TrueかFalseを返してくることがわかります。
このTrueをSelect Caseの直後に書くわけです。
この考え方はなかなか納得できないという方も少なくないようです。
その場合Select Case文にこだわるのではなくIf文のLike演算子・InStr関数を利用するというのも一案でしょう。
Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » VBAのSelect CaseでLikeを使ったあいまい条件の判定を行うには