[ VBA ] Select Case 文の書き方(範囲指定:To 比較演算:Is 複数条件:カンマ)

Pocket

ここでは、VBA の Select Case 文において記述可能な処理の分岐方法について掲載しています。C言語における switch 文などと似たような機能ですが、記述の仕方は若干異なります。ついつい、間違えがちえてしまうので気をつけたいものです。

スポンサーリンク

基本的な Select Case 文の記述方法

VBA において、Select Case 文の基本的な記述方法は次の通りです。数値だけではなく、文字列でも処理を分岐させることができます。

    Dim str As String
    str = "春一番"
    Select Case str    
        Case "春一番"
            MsgBox "春"
        Case "夏一番"
            MsgBox "夏"
        Case "秋一番"
            MsgBox "秋"
        Case "冬一番"
            MsgBox "冬"
        Case Else ' 上記以外の場合
            MsgBox "あの世"
    End Select

C言語との違いは break 等が必要ないことです。上記の場合でも出力されるメッセージは「春一番」だけです。いくつもメッセージが出力されるようなことはありません。

複数の条件を一致させる(カンマ)

では、複数の条件の場合に同じ処理をさせるにはどのようにするかと言うと、VBA では複数の条件をカンマで区切って記述することができます。

    Select Case str    
        Case "春一番", "夏一番", "秋一番", "冬一番"
            MsgBox "春夏秋冬のどれか"
        Case Else ' 上記以外の場合
            MsgBox "あの世"
    End Select

Select Case で比較演算を行う( Case Is )

VBA では Case Is によって比較演算を行って処理分岐させることもできます。なかなかに機能が豊富です。

    Dim 偏差値 As Integer
    偏差値 = 40 ' ギリギリ人判定です
    Select Case 偏差値
        Case Is < 40
            MsgBox "人ではありません"
        Case Is < 60
            MsgBox "凡人です"
        Case Is < 80
            MsgBox "上出来です"
        Case Else
            MsgBox "神です"
    End Select

Select Case で範囲指定( A To Z )

VBA ではさらに、範囲指定もできます。恐るべしです。直感的に分かりやすいと思いますので説明の必要はないと思います。また、比較演算子を使った Case Is と一緒にも使用できます。


    Dim 偏差値 As Integer
    偏差値 = 40 ' ギリギリ人判定です
    Select Case 偏差値
        Case Is < 40
            MsgBox "人ではありません"
        Case 40 To 59
            MsgBox "凡人です"
        Case 60 To 79
            MsgBox "上出来です"
        Case Else
            MsgBox "神です"
    End Select

駄目な Select Case の記述方法

VBA では条件に数値だけではなく文字列も使用することができます。よって、次のように記述して処理を分岐させようと考える人がいるかもしれませんが、以下のように数値と文字列を同時に判定するような記述は止めた方が無難です。なお、このように発想すること自体、問題ありです。

次の VBA サンプルスクリプトは期待を裏切り、「数字の1」とダイアログが出力されてしまいます。

    Dim str As String    
    str = "1"

    Select Case str
        Case 1
            MsgBox "数字の1"
        Case "1"
            MsgBox "文字列の1"
        Case Else
            MsgBox "セクシーダイナマイト"
    End Select

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *