ExcelVBA_Select文の書き方

この記事を読むのに必要な時間は約 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のとき、・・・ のように、それぞれの値の場合の処理を書きます。

VBA_SelectCase文

 

SelectCase文だけど、最初から i = 3と入れているので、どの分岐に入るのかバレバレです。

 

もちろん、「三」を表示する処理が行われました。

VBA_SelectCase文

 

Isで範囲指定する場合

Case 1, 2, 3,4 ・・・
のように、1つの分岐に入る条件をカンマ区切りで書いていくことも可能です。

 

でもこれを全部書いていたら、ソースを読みづらくて仕方ありません。
書く方も辛いですし。

 

そんな時は範囲で指定して書くと楽です。

 

15未満なら、Case < 15 で表現できます。
以下ならCase <= 15と書けますし、「より大きい」なら Case > 15、以上なら Case >= 15。

 

「=」を入れるか入れないか、含むか含まないかが重要だったりします。

VBA_SelectCase文

 

2つめの分岐である18未満(< 18)、その中に15未満(15 <)も含まれるんじゃ??と思ってしまうかもしれません。

 

もちろんその通りなんですが、処理は上から先に実行されます。
先に15未満の分岐を書いておけば、15以上18未満の場合は最初引っかからず、18未満(< 18)で初めて条件に当てはまるわけです。

 

なので、順番大事です。

 

2つ目のソースコードはこちら。

 

InputBoxで年齢を入力できるようにしました。

 

「15」を入力してみると・・・、
15以上、18未満なので2番目の分岐に入りました。

VBA_SelectCase文

 

Toで範囲指定する場合

先ほどIsで範囲指定したところ、Toでもほとんど同じことが出来ます。

VBA_SelectCase文

 

15未満ならCase 0 To 14、18未満ならCase 15 To 17と書き換えました。

 

ソースコードはこちら。

 

同じように動かしてみます。

 

今回は「10」を入れてみます。
Case 0 To 14 に当てはまるので、最初の分岐の処理が行われました。

VBA_SelectCase文

 

今回は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 “山田*” だけ。

 

スッキリ書くことが出来ます。

VBA_SelectCase文

 

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文がよく使われます。
それぞれ使いやすい場面が違いますし、出来ること出来ないこともあります。

 

あれ、どうやって書くんだっけ?となったら、記事を参考にしてみてくださいね。

 

最後までお読みいただき、ありがとうございました。