VBScriptのSelect Case文をマスターしよう: シンプルで効果的な条件分岐

VBScriptの中で、条件分岐を行う際に非常に便利な構文が「Select Case文」です。

この構文は、複数の条件を簡潔に記述できるため、コードの可読性が向上します。

この記事では、Select Case文の基礎から応用までを詳しく解説し、実際に使用できるようになることを目指します。

また、最後に演習問題と解答例も用意しているので、理解を深めるために挑戦してみてください。

Select Case文の基本構造

Selectセレクトは「選択する」、Caseケースは「場合」という英単語で、Select Case文は、指定した式の値に応じて異なる処理を実行するための構文です。

構文は以下のようになります。

Select Case 式
    Case 値1
        ' 値1の場合に実行する処理
    Case 値2
        ' 値2の場合に実行する処理
    Case Else
        ' 上記のいずれにも該当しない場合の処理
End Select

には任意の評価可能な式を指定でき、Caseにはその式と一致する値を記述します。Case Elseは、どのCaseにも該当しない場合の処理を記述します。

式の値は、上が優先度が高く、下へいくほど優先度が下がっていきます。

以下に、基本的なSelect Case文の例を示します。この例では、曜日に応じて異なるメッセージを表示します。

Dim dayOfWeek
dayOfWeek = "月曜日"

Select Case dayOfWeek
    Case "月曜日"
        MsgBox "今週も頑張りましょう!"
    Case "金曜日"
        MsgBox "もうすぐ週末です!"
    Case Else
        MsgBox "今日も良い一日を!"
End Select

このコードでは、dayOfWeekが「月曜日」の場合、「今週も頑張りましょう!」というメッセージが表示されます。

「金曜日」の場合には「もうすぐ週末です!」というメッセージが、それ以外の日の場合には「今日も良い一日を!」が表示されます。

複数の値に対応するCase

複数の条件を指定する場合は、「Case 条件の値,条件の値」のように半角カンマで区切って条件を指定します。

カンマで区切ることで2つの条件だけではなく、3つ、4つと条件を指定することができます。

以下の記述例を実行すると、変数「food」の値が”米”なので、「Case “パン”,”米”,”パスタ”」の条件に当てはまり、その下の「Msgbox “おいしい”」が処理されます。

'変数の宣言と初期化
Dim food : food = "米"

'食べ物の値によって処理を行う
Select Case food  
    Case "パン","米","パスタ"
	msgbox "おいしい"
    Case Else
    	msgbox "好みではない"
End Select

文字列だけではなく、下記のように数値の値によって分岐する使い方も主に使用されます。

'変数の宣言と初期化
Dim suti : suti = 2

'数値の値によって処理を行う
Select Case suti
    Case 0
        Msgbox "0です"
    Case 1,2,3
        Msgbox "1~3の整数です"
    'Case 4 To 8	※VBSでは使用不可です
        'Msgbox "4~8の整数です"
    Case Else
        Msgbox "上記の条件に当てはまらない"
End Select

応用した使い方

これまで値が文字列や数値の場合でご紹介してきましたが、条件の式の結果(TrueまたはFalse)に応じて分岐する方法をご紹介します。

この使い方は、結構便利ですので知らない方は、ここでしっかり身につけましょう。

'変数の宣言と初期化
Dim suti : suti = 2

'例1)式の結果がTrueの場合、その条件内の処理を行う
Select Case True
    Case 2 < suti And suti < 8
        Msgbox "2より大きく8より小さい"
    Case suti = 2
        Msgbox "2と等しい"
    Case Else
        Msgbox "上記の条件に当てはまらない"
End Select

'変数の宣言と初期化
Dim strVBS : strVBS = "VBScript"

'例2)式の結果がTrueの場合、その条件内の処理を行う
Select Case True
    Case 0 < Instr(strVBS,"A")
        Msgbox "Aの大文字を含んでいる"
    Case 0 < Instr(strVBS,"s")
        Msgbox "sの小文字を含んでいる"
    Case 0 < Instr(strVBS,"t")
        Msgbox "tの小文字を含んでいる"
    Case Else
        Msgbox "上記の条件に当てはまらない"
End Select

例1は、比較演算子(<小なり>大なり=イコール)を用いた式の条件です。結果がしん(正しい)の場合は、「Trueトュルー」を返し、(正しくない)の場合は、「Falseフォルス」返します。

2行目で変数「suti」に数値の2を代入しているため、変数「suti」と数値の2は等しい(イコール)のため、9行目のメッセージが出力されます。

例2は、Instr関数を用いた式の条件です。Instr関数は、引数1の文字から引数2の文字を左から検索し、存在したらその位置の番号を返します。存在しない場合は、0を返します。

15行目で変数「strVBS」に文字のVBScriptを代入しています。変数「strVBS」に大文字のAと小文字のsを含んでいないため、24行目のメッセージが出力されます。

if文とSelect Case文の違い

if文とSelect Case文は、条件によって処理を分岐させることでとても似ていて、なんとなくで使い分けている方も多くいらっしゃるのではないでしょうか。

例を交えながら、使い分け方を解説したいと思います。まずは、下記の記述例を見てください。

'◆-----例1)条件の値が統一されている場合-----
Dim suti : suti = 2

Select Case suti
    Case 0
        Msgbox "0と一致しました"
    Case 1,2,3
        Msgbox "1~3の整数と一致しました"
    Case Else
        Msgbox "上記の条件に当てはまらない"
End Select

If suti = 0 Then
    Msgbox "0と一致しました"
elseif suti = 1 Or suti = 2 Or suti = 3 Then
    Msgbox "1~3の整数と一致しました"
Else
    Msgbox "上記の条件に当てはまらない"
End if

'◆-----例2)条件の値が統一されていない場合-----
Dim strVBS : strVBS = "VBScript"

Select Case True
    Case Not 0 < Instr(strVBS,"A")
        Msgbox "Aの大文字を含んでいない"
    Case 0 < Instr(strVBS,"s")
        Msgbox "sの小文字を含んでいる"
    Case 0 < Instr(strVBS,"t")
        Msgbox "tの小文字を含んでいる"
    Case Else
        Msgbox "上記の条件に当てはまらない"
End Select

If Not 0 < Instr(strVBS,"A") Then
    Msgbox "Aの大文字を含んでいない"
elseif 0 < Instr(strVBS,"s") Then
    Msgbox "sの小文字を含んでいる"
elseif 0 < Instr(strVBS,"t") Then
    Msgbox "tの小文字を含んでいる"
Else
    Msgbox "上記の条件に当てはまらない"
End if

例1の場合、「Select Case suti」の値である変数「suti」に対して、「Case 条件の値」がすべて整数で統一されています

この場合、カンマ区切りで指定することで複数の条件の指定が、if文よりSelect Case文の方が見やすいのでSelect Case文にしましょう。

例2の場合、「Select Case」の値が「True」に対して、「Case 条件の値」がTrueとFalseどちらも混在しており、統一されていません

紛らわしいので、この場合はif文を使いましょう。

しかし、if文とSelect Case文の行数は「Select Case文」の方が1行多いです。プログラミングは、コードの簡略化が一般的です。少ない条件分岐であれば、if文が無難だと思います。

つまり、処理結果は同じなので、結果的に見やすいコードであればどちらでも良いでしょう。

演習問題

VBScriptの基本を確認するための演習問題を紹介します。以下の問題を解いて、VBScriptの理解を深めましょう。

演習1

次のコードを完成させ、入力された月の季節を表示するプログラムを作成してください。

Dim month
month = 4 ' ここに1から12の間の数値を設定します

Select Case month
    ' ここにコードを記述
End Select
演習1 解答例
Dim month
month = 4

Select Case month
    Case 12, 1, 2
        MsgBox "冬"
    Case 3, 4, 5
        MsgBox "春"
    Case 6, 7, 8
        MsgBox "夏"
    Case 9, 10, 11
        MsgBox "秋"
    Case Else
        MsgBox "無効な月です。"
End Select

演習2

次のコードにCase Elseを追加して、無効な入力があった場合に「無効な入力です」というメッセージを表示するように修正してください。

Dim color
color = "青"

Select Case color
    Case "赤"
        MsgBox "止まれ"
    Case "黄"
        MsgBox "注意"
    Case "青"
        MsgBox "進め"
    ' ここにコードを記述
End Select
演習2 解答例
Dim color
color = "青"

Select Case color
    Case "赤"
        MsgBox "止まれ"
    Case "黄"
        MsgBox "注意"
    Case "青"
        MsgBox "進め"
    Case Else
        MsgBox "無効な入力です"
End Select

まとめ

VBScriptのSelect Case文を使いこなすことで、複数の条件に応じた処理を簡潔に記述することができます。

条件分岐の際には、適切な比較演算子や論理演算子を使って条件を組み合わせ、必要に応じてCase Elseを使ってデフォルトの処理を設定しましょう。