テーマ
第12回目となる本稿のテーマは、「条件分岐を表現する構文の一つである Select Case 文を理解する」です。
前回の Chapter 11 では条件分岐構文 If について学習しました。本稿ではもう一つの条件分岐構文である Select Case について学習を進めていきます。
If と比較すると登場の機会は少ないですが、If よりもスマートに記述できるケースもありますので本稿で記述の仕方と動作について学習しましょう。
Select Case
構文
それでは早速 Select Case の構文を見ていきましょう。
Select Case 評価したい式 Case 値の表現 「評価したい式」が上の「値の表現」に合致したときに実行する文 複数の文を記述できます Case 値の表現 「評価したい式」が上の「値の表現」に合致したときに実行する文 複数の文を記述できます Case Else どの Case にも合致しなかったときに実行する文 複数の文を記述できます End Select
少々難しい表現になってしまいましたが、正確性を考慮した結果です。Select Case 評価したい式 とは、この「評価したい式」の評価によってその後の流れを分岐させたいということです。「評価したい式」には当然ながら何らかの式を記述します。ここまで学習してきた皆さんには、コードを示した方が理解しやすいと思いますので早速コードを記述していきましょう。
Case に値を指定する場合
Boolean 型 Case 句
次のマクロを Sheet1 シートモジュールに作成してください。
Public Sub Chapter12_Select_Case_1()
Dim bool As Boolean
Select Case bool
Case True
Debug.Print "初期値は True です"
Case False
Debug.Print "初期値は False です"
End Select
End Sub
それでは上記コードを解説します。まず最初の行で bool というBoolean 型変数を宣言しています。
そして次の行
Select Case bool
Select Case の構文をもう一度確認してください。このコードでは「評価したい式」の部分に変数 bool を記述しています。これが意味するところは、「変数 bool が保持している値によってコードの流れを分岐してください」と言う意味になります。
そして次の 2 行
Case True
Debug.Print "bool は True です"
この行は、「 変数 bool の値が True のケースでは、Debug.Print “初期値は True です” を実行してください」という意味になります。
さらに次の 2 行
Case False
Debug.Print "bool は False です"
この行は、「変数 bool の値が False のケースでは、Debug.Print “初期値は False です” を実行してください」という意味になります。
そして最後の
End Select
この行は、Select Case の終了を意味しています。(分岐の終了です)
何はともあれこのマクロを実行してみましょう。イミディエイトウインドウに以下のように表示されます。
初期値は False です
この結果は予想通りでしたか?一応簡単に説明しておきましょう。
最初の行で宣言した Boolean 型変数 bool には何も代入していません。そのため変数 bool が保持している値は Boolean 型の初期値である False です。このまま Select Case bool へと進んでいくので
「 変数 bool が保持している値によってコードの流れを分岐してください」という指示を受けます。
次行へ進み Case True という記述にたどり着き「変数 bool の値が True のケースでは」という指示を受けます。しかし、変数 bool が保持しているのは False ですからこの指示は無視して次の Case へと進み Case False という記述にたどり着きます。ここでは「変数 bool の値が False のケースでは」という指示を受け、そして変数 bool が保持している値はまさに False ですからこの指示に従って、次行の Debug.Print “初期値は False です” を実行します。この時点でイミディエイトウインドウに「 初期値は False です」というテキストが表示されます。最後に End Select へジャンプして Select Case 構文は終了となります。
流れは大体掴めたでしょうか?大事なポイントは以下の二つです。
テキスト型 Case 句
さて、先ほどの例では「評価したい式」に Boolean 型を指定しましたが、他の型を指定することも可能です。テキスト型変数を使った例も示しておきましょう。
Public Sub Chapter12_Select_Case_2()
Dim sheetName As String
sheetName = Me.Name
Select Case sheetName
Case "Sheet1"
Debug.Print "このシートは Sheet1 です"
Case "Sheet2"
Debug.Print "このシートは Sheet2 です"
Case Else
Debug.Print "このシートは Sheet1 でも Sheet2 でもありません"
End Select
End Sub
このマクロを実行してみましょう。実行結果は以下の通りです。
このシートは Sheet1 です
Me.Name
このコードは初めて紹介しますね。Me はすでに何度か使用しているので意味はお分かりかと思います。自分自身という意味でしたね。このマクロを記述しているのは Sheet1 シートモジュールですから、Me は Sheet1 シートを意味しています。Name というのはシートの名前のことです。Sheet1 の名前を変更していなければこのシートの名前は Sheet1 ですので、変数 sheetName には “Sheet1” というテキストが代入されます。(ここで言う「シートの名前」とは、Excel 画面の下方にある各シートタブに表示されているテキストです)
続く Select Case sheetName は sheetName の評価によって分岐するのでしたね。
最初の Case “Sheet1” に合致しますので、Debug.Print “このシートは Sheet1 です” このコードが実行され、End Select へとジャンプして終了します。
Case に比較演算子を用いる場合
次に Case の後ろに比較演算子を用いる場合について説明します。もう一度、構文を確認してください。
次のマクロを Sheet1 シートモジュールに作成してください。
Public Sub Chapter12_Select_Case_3()
Dim result As Long
result = Conversion.Fix(Application.InputBox("テストの点数を入力してください。( 0 点から 100 点)", "テスト結果", Type:=1))
Select Case result
Case Is >= 80
Debug.Print "評価:優"
Case Is >= 70
Debug.Print "評価:良"
Case Is >= 60
Debug.Print "評価:可"
Case Else
Debug.Print "評価:不可"
End Select
End Sub
このマクロは Chapter 11 で If を学習したときに作成したものを Select Case 用に改変したものです。マクロを実行し、テストの点数を入力して成績がどのように評価されるか見てみましょう。
このように、Case には Is と比較演算子を組み合わせて用いることも出来ます。先に示した例では「評価したい式」が値と一致するという表現を用いた Select Case を紹介しましたが、今回の例では、〇以上、〇未満などの表現を使いました。これが Select Case における二つ目の Case の記述方法となります。
Case に範囲を指定する場合
最後に、Case の後ろに範囲を記述する方法を紹介します。以下のマクロを Sheet1 シートモジュールに記述してください。
Public Sub Chapter12_Select_Case_4()
Dim result As Long
result = Conversion.Fix(Application.InputBox("テストの点数を入力してください。( 0 点から 100 点)", "テスト結果", Type:=1))
Select Case result
Case 80 To 100
Debug.Print "評価:優"
Case 70 To 79
Debug.Print "評価:良"
Case 60 To 69
Debug.Print "評価:可"
Case Else
Debug.Print "評価:不可"
End Select
End Sub
このマクロも点数を評価して成績を示すマクロです。記述の仕方を若干変更してあります。
各 Case の後ろに 数値 To 数値 という形で値の範囲を表現しています。このような方法でも処理を分岐させることができるため、ときに If よりも分かりやすい表現となることがあります。
まとめ
今回は、分岐構文の一つ Select Case について学習しました。前 Chapter で学習した If と合わせて繰り返し練習してみてください。以下に Select Case のポイントをまとめておきます。
Select Case 評価したい式 Case 値の表現1 値の表現1 に合致したときに実行する文 Case 値の表現2 値の表現2 に合致したときに実行する文 Case Else いずれの Case にも合致しなかったときに実行する文 End Select
それでは本稿はここで終了です、お疲れさまでした。次回またお会いしましょう。
