VBScriptでSelect Case文をマスターする

VBScript

どのプログラミング言語でも基礎として使用される「Select Case文」ですが、プログラミング初心者がはじめに学習するべきステートメントの1つです。

VBScriptでも「Select Case文」は存在します。

当記事では、Select Case文の使い方について初心者の方にもわかるようご紹介します。

Select Case文とは

Selectセレクトは「選択する」、Caseケースは「場合」という英単語で、値に応じて処理を分岐したいときに使用されます。

例えば、変数「food」がパンだったら、”パン”というメッセージを出力する。変数「food」がマックだったら、”マクド”というメッセージを出力する。

それ以外の文字の場合は、”その他”というメッセージを出力する。という処理があったとします。

これを「Select Case文」で書くと下記のように記述します。

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

'食べ物の値によって処理を行う
Select Case food  
    Case "パン"
        Msgbox "パン"	'パンの場合の処理をここに記述する
    Case "マック"
        Msgbox "マクド"	'マックの場合の処理をここに記述する
    Case Else
        Msgbox "その他"	'上記以外の条件の処理をここに記述する
End Select

変数「food」の値が”パン”なので、「Case “パン”」の条件に当てはまり、その下の「Msgbox “パン”」が処理されます。

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

「Case “マック”」と「Case Elseエルス」の条件には当てはまらないため、「Msgbox “マクド”」と「Msgbox “その他”」は処理されません。

「Select Case」などスペースが登場しますが、すべて半角スペースです。

VBScriptは、全角スペースで記述すると、エラーになりプログラムが動かないので半角スペースで記述しましょう。

Select Caseの「値」が文字の値であれば、Caseの条件の値も文字で指定します。

同様にSelect Caseの「値」が整数の値であれば、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のSelect Case文を使いこなすことで、複数の条件に応じた処理を簡潔に記述することができます。

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