Home » エクセルマクロ・Excel VBAの使い方 » 条件分岐 » VBAのSelect CaseでLikeを使ったあいまい条件の判定を行うには

VBAのSelect CaseでLikeを使ったあいまい条件の判定を行うには

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「エクセル マクロ select case value like」
「マクロ 指定文字を含む select case」
「vba select case ワイルドカード」
といった検索で、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。

条件分岐文の一つ、Select Case文で、ワイルドカードを使ったあいまい条件の判定・文字列を含む場合といった判定を行う方法を探している方による検索です。

[スポンサードリンク]

Select Case文のサンプル

まずはSelect Case文の基本を確認しましょう。

Sub SelectCaseのサンプル()

 Dim addr As String

 addr = ActiveCell.Value

 Select Case addr
  Case "東京都"
   MsgBox "○"
  Case Else
   MsgBox "-"
 End Select

End Sub

上記のマクロを実行すると、アクティブセルに「東京都」という文字列が入力されていれば「○」、そうでなければ「-」がメッセージボックスに表示されます。

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演算子を使ってあいまい条件の判定を行うサンプル

で、以下のような書き方をするとアクティブセルの値が「東京都」という文字列で始まっているとき、という判定を行うことができます。

Sub SelectCaseでLike判定サンプル()

 Dim addr As String

 addr = ActiveCell.Value

 Select Case True
  Case addr Like "東京都*"
   MsgBox "○"
  Case Else
   MsgBox "-"
 End Select

End Sub

ポイントは、
 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を使ったあいまい条件の判定を行うには

「条件分岐」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.