この記事を読むのに必要な時間は約 8 分です。
条件分岐させる方法の1つに、SelectCase文というのがあります。
「これ、SelectCase文で書いたらスッキリとキレイに見えるのに・・・」
という場合もあれば、IF文じゃないと書けないものも。
実際どんな風に処理を書くのか、どんな時が適しているのか、紹介します。
目次(リンク)
SelectCase文の書き方
日本語で書くと、次のようになります。
Select Case 変数
Case 条件式1
処理1
Case 条件式2
処理2
Case 条件式3
処理3
Case Else
その他の処理
End Select
値や条件式などを入れて、具体的な書き方を見てみましょう。
値が一致する場合
変数i が1のとき、2のとき、3のとき、・・・ のように、それぞれの値の場合の処理を書きます。
SelectCase文だけど、最初から i = 3と入れているので、どの分岐に入るのかバレバレです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Public Sub CaseTest1() Dim i As Integer i = 3 Select Case i Case 1 MsgBox "一" Case 2 MsgBox "二" Case 3 MsgBox "三" Case 4 MsgBox "四" Case Else MsgBox "その他" End Select End Sub |
もちろん、「三」を表示する処理が行われました。
Isで範囲指定する場合
Case 1, 2, 3,4 ・・・
のように、1つの分岐に入る条件をカンマ区切りで書いていくことも可能です。
でもこれを全部書いていたら、ソースを読みづらくて仕方ありません。
書く方も辛いですし。
そんな時は範囲で指定して書くと楽です。
15未満なら、Case < 15 で表現できます。
以下ならCase <= 15と書けますし、「より大きい」なら Case > 15、以上なら Case >= 15。
「=」を入れるか入れないか、含むか含まないかが重要だったりします。
2つめの分岐である18未満(< 18)、その中に15未満(15 <)も含まれるんじゃ??と思ってしまうかもしれません。
もちろんその通りなんですが、処理は上から先に実行されます。
先に15未満の分岐を書いておけば、15以上18未満の場合は最初引っかからず、18未満(< 18)で初めて条件に当てはまるわけです。
なので、順番大事です。
2つ目のソースコードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
'Case文、範囲 Public Sub CaseTest2() Dim i As Integer i = InputBox("年齢を入力してください") Select Case i Case Is < 15 MsgBox "購入には、保護者の同意が必要です" Case Is < 18 MsgBox "18歳以上が対象の商品は・・・" & vbCrLf _ & "15歳以上対象の商品まで購入可能です" Case Else MsgBox "購入可能です" End Select End Sub |
InputBoxで年齢を入力できるようにしました。
「15」を入力してみると・・・、
15以上、18未満なので2番目の分岐に入りました。
Toで範囲指定する場合
先ほどIsで範囲指定したところ、Toでもほとんど同じことが出来ます。
15未満ならCase 0 To 14、18未満ならCase 15 To 17と書き換えました。
ソースコードはこちら。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
'Case文、範囲2 Public Sub CaseTest3() Dim i As Integer i = InputBox("年齢を入力してください") Select Case i Case 0 To 14 MsgBox "購入には、保護者の同意が必要です" Case 15 To 17 MsgBox "18歳以上が対象の商品は・・・" & vbCrLf _ & "15歳以上対象の商品まで購入可能です" Case Else MsgBox "購入可能です" End Select End Sub |
同じように動かしてみます。
今回は「10」を入れてみます。
Case 0 To 14 に当てはまるので、最初の分岐の処理が行われました。
今回はIsでの範囲指定もToの場合も同じ結果になりますが、注意したいのは境界値のところです。
整数(Integer)ではなく少数(Double)だったら、14より大きくて15より小さいところは漏れて、Case Elseに入ってしまいます。
そんな細かい指定も必要なら、Isで含むか含まないかを表現できる書き方がベストです。
条件分岐でIF文よりもSelectCase文のほうが良いときは?
SelectCase文は、同じ変数の中で分岐が多い場合に役立ちます。
分岐が多くても、IF文で書くことも可能です。
IF文の書き方はこちら。
じゃあ、If文とSelectCase文、どっちが正解なんだよって思いますよね。
SelectCase文のほうが良いとき
ElseIfでたくさん繋げていけば、分岐をたくさん書けるんですが、SelectCase文なら変数を書くのが1回で済みます。
Select Case 変数
と書いたら、そのあとの分岐は
Case 10とか、Case >100、Case like “山田*” だけ。
スッキリ書くことが出来ます。
IF文だと、変数 = 10、変数 > 100、変数 like “山田*”
のように書かないといけません。
IF文のほうが良いとき
具体的な書き方はIF文の記事を参考にしていただければと思いますが、IF文が力を発揮するのはこんな時です。
- 条件が少ないとき
- 1行でも書ける
- 条件となる変数が2つ以上
男性か女性かで処理を分けるとか、
If ~ Then
Else
End If
で書けちゃいます。
1行で書く方法もありますし、場合によってはIF文がシンプルです。
また、変数が1つではない時、Else Ifで別の変数の値を評価することも可能、そんなことはSelectCase文ではスマートに出来ません。
Case Elseの中に、別の変数についてSelectCase文を書く羽目になります。
だったらそんな無理せずに、IF文使って楽したいですよね。
まとめ:SelectCase文で条件分岐する書き方
SelectCase文の書き方と、If文との比較でした。
エラーコードによって処理を分岐させる時など、SelectCase文がよく使われます。
それぞれ使いやすい場面が違いますし、出来ること出来ないこともあります。
あれ、どうやって書くんだっけ?となったら、記事を参考にしてみてくださいね。
最後までお読みいただき、ありがとうございました。