条件分岐(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文を使うしかありません。

サンプルプログラム

では簡単なサンプルで試してみましょう。

testif5.bas

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

上記のマクロを実行すると次のようになります。

Select Caseによる条件分岐

また、ここまでのサンプルでは同じ値かどうかだけを判別する書き方をしていましたが、比較対象となる値が数値の場合に、大きいとか小さいとかの判別を行う事も可能です。その場合は次のように記述します。

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 )