- Home ›
- Excel VBA入門 ›
- 条件分岐 ›
- HERE
条件分岐(select)
条件によって処理を分ける方法として、if文の他にselect文があります。select文はある1つの値を複数の他の値を比較する場合に使います。
基本的な構文は下記の通りです。
Select Case 比較対象 Case 条件式1 (条件式1がTrueの時に行う処理1) (条件式1がTrueの時に行う処理2) Case 条件式2 (条件式2がTrueの時に行う処理1) (条件式2がTrueの時に行う処理2) Case 条件式3 (条件式3がTrueの時に行う処理1) (条件式3がTrueの時に行う処理2) Case Else (どの条件式もFalseの時に行う処理1) (どの条件式もFalseの時に行う処理2) End Select
if文と似ていますが、if文の場合は複数の条件式を記述する場合に別々の条件式を記述することが出来ましたが、select文の場合には比較する対象が1つあり、その値に対する条件式を記述していきます。また「Case Else」は不要であれば記述しなくても構いません。
具体的な例で見てください。下記の例は変数「x」に格納されている値を色々な値と比較しています。
If x = "東京" Then Range("A1").Value = "Tokyo" ElseIf x = "大阪" Then Range("A1").Value = "Osaka" ElseIf x = "名古屋" Then Range("A1").Value = "Nagoya" ElseIf x = "札幌" Then Range("A1").Value = "Sapporo" ElseIf x = "福岡" Then Range("A1").Value = "Fukuoka" End If
これをselect文を使って書くと次のようになります。
Select Case x Case "東京" Range("A1").Value = "Tokyo" Case "大阪" Range("A1").Value = "Osaka" Case "名古屋" Range("A1").Value = "Nagoya" Case "札幌" Range("A1").Value = "Sapporo" Case "福岡" Range("A1").Value = "Fukuoka" End Select
select文を使う場合は、まず比較対象として変数「x」を指定し、条件を「Case」の値に続けて記載します。条件の部分に何も演算子が書かれていない場合には値が同じなのかどうかを判別する条件式となります。
if文で書けるものをなぜselect文を使って書くのかと言うと、select文の場合は比較対象となる値が1つあり、それを色々な値と比較するということが明確になるため、後でプログラムを読み返した時に分かりやすくなるためです。
select文で書ける条件分岐のプログラムは全てif文を使って書き直すことができます。ただしselect文では条件式の対象となる値が1つに決まっているため次のようなif文をselect文を使って書き直すことはできません。
If x> 10 Then ElseIf y > 8 Then End If
この場合は、最初の条件式で変数「x」を他の値と比較していますが、2番目の条件式では変数「y」を他の値と比較しています。このように比較対象となる値が異なるような条件式を記述するにはif文を使うしかありません。
サンプルプログラム
では簡単なサンプルで試してみましょう。
Sub テスト() Dim x As String x = "福岡" Select Case x Case "東京" Range("A1").Value = "Tokyo" Case "大阪" Range("A1").Value = "Osaka" Case "名古屋" Range("A1").Value = "Nagoya" Case "札幌" Range("A1").Value = "Sapporo" Case "福岡" Range("A1").Value = "Fukuoka" End Select End Sub
上記のマクロを実行すると次のようになります。
また、ここまでのサンプルでは同じ値かどうかだけを判別する書き方をしていましたが、比較対象となる値が数値の場合に、大きいとか小さいとかの判別を行う事も可能です。その場合は次のように記述します。
Dim x As Integer x = 10 Select Case x Case < 5 Range("A1").Value = "5より小さい" Case >= 20 Range("A1").Value = "20以上" Case Else Range("A1").Value = "5以上20より小さい" End Select
if文の場合と違うのは条件式の記述が「x < 5」などと書かずに「< 5」とだけ記述する事です。
( Written by Tatsuo Ikura )