【VBAスタンダード対策】Select Caseによる「文字列パターンマッチング」を攻略!
Select Case は数値だけでなく、文字列の分岐にも威力を発揮します。特に「〇〇で始まる」といった、ワイルドカードを使った柔軟なパターンマッチングを行う際の、VBA特有の構文構造をマスターしましょう。
1. 問題:ワイルドカードを使った文字列判定の文法
【 問題 】 変数 buf に格納された文字列が「Excel」で始まるかどうかを判定し、メッセージボックスを表示したい。空欄 ( A ) に入る正しい記述はどれでしょうか?
Sub StringTest()
Dim buf As String
buf = "Excel_VBA_Standard"
Select Case True
Case ( A )
MsgBox "Excel関連のデータです"
Case Else
MsgBox "その他のデータです"
End Select
End Sub
Dim buf As String
buf = "Excel_VBA_Standard"
Select Case True
Case ( A )
MsgBox "Excel関連のデータです"
Case Else
MsgBox "その他のデータです"
End Select
End Sub
① buf = "Excel*"
② buf Like "Excel*"
③ Is Like "Excel*"
④ "Excel*"
2. 正解:文字列パターン判定に関する正解
正解: ② buf Like "Excel*"
3. 解説:「Select Case True」という特殊な構文構造
`Select Case` で文字列の「部分一致」や「パターン判定」を行う場合、通常の数値判定とは異なる特殊な構造(テクニック)が使われます。
[ 文字列パターン判定の構造ルール ]
1. 通常の書き方(Case "Excel*")は使えない
もし
2. 「Select Case True」の構造マジック
部分一致を行いたいときは、最初の行を
3. ワイルドカードのルール
・
・
・
1. 通常の書き方(Case "Excel*")は使えない
もし
Select Case buf と書き、Case "Excel*" と指定した場合、VBAは「Excel*」という文字そのものと完全に一致するか(完全一致)を判定してしまいます。ワイルドカードとして機能しません。2. 「Select Case True」の構造マジック
部分一致を行いたいときは、最初の行を
Select Case True(条件が正しいものを探す)にします。そして、Caseの後ろに buf Like "Excel*" という、判定結果が True か False になる条件式を直接記述します。3. ワイルドカードのルール
・
*(アスタリスク):0文字以上の任意の文字列(Excel* で「Excelで始まる」)・
?(クエスチョン):任意の1文字・
#(シャープ):任意の数字1文字(0〜9)ここが試験に出る!: スタンダード試験では、Select Case True の構文パターンや、ワイルドカード * ? # の意味の違いが正確に理解できているかが問われます。特に不等号の時は Case Is > 10 のように Is を使いましたが、Like演算子の時は Is を使わず「変数名 Like ...」と書く構造の明確な違いを整理しておきましょう。
4. まとめ
「あいまい検索は Select Case True と Like のコンビで通す」。この特殊な構文構造をマスターすれば、ファイル名のルールチェックや、特定のキーワードが含まれるデータの仕分けなど、実務でよくある文字列処理を美しくコントロールできるようになります。
PR