Developer

【ExcelVBA】Select Caseステートメント①
2021.10.03
Lv1

【ExcelVBA】Select Caseステートメント①

条件分岐

条件分岐とはある条件によって処理を変えることを言います。
例としてExcelを使ってなんらかのデータを管理することを考えてみましょう。
ただ毎日のデータを入力するだけならばマクロやVBAの出番はありませんが、データが多くなってくるにつれて見やすくしたい、処理を自動化したいといった要望が出てきたりします。
家計簿などでは毎日の想定支出額よりも多かった場合は文字やセルを赤くしたいといったことを考えるかもしれませんし、
出退勤を管理しているなら労働時間がある値を超えたらメールを自動送信するがそうでなければ何もしないといったことがあります。
このようなある条件に当てはまった場合はある処理を行い、そうじゃなかった場合は別の処理を行うのが条件分岐となります。
出退勤の例で言えば、労働時間がある値を超えたらという条件によって、メールを送るもしくは送らないというように処理を変えるということになります。
実際、VBAでいろいろな処理を行わせる際に、何も分岐せずに最後まで処理が進むといったことはあまりなく、何かの条件により処理を変えるといったことはよくあります。
また条件分岐の処理はVBAに限らず、プログラムで非常によく使われるものですので、使いこなせるようになることでプログラミングの幅が広がります。
今回はそうした条件分岐の処理について説明します。

条件分岐のためのステートメント

条件分岐を行うためのステートメントにはこれまでに出てきたIfステートメントやSelect Caseステートメントがあります。
これまでにの連載で出てきたIFとSelect Caseはどちらを使ってもほぼ同じことができます。
Ifステートメントはこれまでの連載ですでに出てきましたので、Select Case構文を見ておきましょう。

select Case 値
	Case 条件1
		処理1
	
	Case 条件2
		処理2	

	'Caseの部分は複数個指定できます。
		
	Case Else
		処理
End Select

最初の値のところには変数を指定します。
その変数に入っている値で処理を変更する形となります。
実際に条件を指定するのは2行目からのCaseのところになります。
Caseの後ろに条件式をつけ、その次の行でその条件に該当する場合の処理を記述します。
このCase文は複数繰り返すことができます。上記の構文では処理2までしか書いていませんが、処理を変えたい条件の分だけCase文を続けることができます。
Ifステートメントではelse ifを使うことで複数の条件が指定できましたが、それと同じです。
最後のCase Elseは上に書いてある条件式に該当する処理がなかった場合に実行する処理を指定します。
特に処理が必要なければ省略することもできます。
省略しない場合は、Caseの最後に書く必要があります。

条件の書き方

条件の記載の仕方はIfステートメントの条件式と少し異なります。
まず値が等しいかを条件にする場合は、値をそのまま条件のところに記述します。
例えば、変数numの値が5の場合と10の場合、それ以外で処理を分岐させたい場合以下のように記述します。

Sub VBA基礎第32回_1()

    Dim num As Integer
    
    num = 5
    
    Select Case num
        Case 5			'numが5だった場合
            MsgBox "numは5"
        
        Case 10			'numが10だった場合
            MsgBox "numは10"
            
        Case Else		'numがどちらでもない場合
            MsgBox "numは5でも10でもない"
    End Select
            
End Sub

numの値を変えてみて実行してみてください。
Select Caseのところで判定に使用するnumを指定しています。
そして条件のところでは5や10といったようにそのまま値を指定します。
numを8とかに変更するとCase Elseのところに該当します。

比較のためにIfステートメントで同じことを行うコードを見てみましょう。

Sub VBA基礎第32回_2()
    Dim num As Integer
    
    num = 5
    
    If num = 5 Then
        
        MsgBox "numは5"
        
    ElseIf num = 10 Then
       
        MsgBox "numは10"
            
    Else
        MsgBox "numは5でも10でもない"
    End If
            
End Sub

Ifステートメントであれば条件式のところではnum=5やnum=10のように式を書く形になります。

条件の書き方 複数の値や範囲の指定

次に条件で複数の値や範囲を指定する場合を見てみましょう。
numが1から5までの場合とnumが6から10の場合で処理を分けるといったような場合です。
このときnumが1の場合、2の場合、3の場合と1つずつ書いていっても動作はしますが、非常に手間がかかります。
そこで複数を1つのCaseで指定する方法があります。
複数の条件を指定する場合はカンマで区切ります。範囲を指定する場合はToを使用します。
ではnumが1から5までの場合とnumが6から10の場合で処理を分けるコードを見てみましょう。

Sub VBA基礎第32回_3()
    Dim num As Integer
    
    num = 4
    
    Select Case num
        Case 1, 2, 3, 4, 5		'1 To 5 でも可能です
            MsgBox "numは1から5の間"
        
        Case 6 To 10
            MsgBox "numは6から10の間"
            
        Case Else
            MsgBox "numは1から10の数ではない"
    End Select
    
End Sub

最初の条件は値を複数指定しています。1から5を指定するのに1,2,3,4,5と値をすべて記述しています。
別の書き方をするなら1 To 5となります。
このように1つのCaseで範囲を指定することができますが、決まった範囲ではなく以上や以下といった条件の場合はToでは指定できません。
例えば平均以上か以下かで処理を分けるといったような場合です。
こうした際に使用できるのがIsです。

条件の書き方 比較の場合

次にIsを使用した条件の書き方を見てみましょう。

Sub VBA基礎第32回_4()
    Dim num As Integer
    
    num = -4
    
    Select Case num
        Case Is < 0
            MsgBox "numは負の数"
        
        Case Is >= 0
            MsgBox "numは正の数"
            
    End Select
    
End Sub

Isを使って比較を行っています。
Is < 0と書くことでnumが0より小さい場合という意味になります。

まとめ

ある条件によって処理を変えることを言います。
条件分岐を行うためのステートメントにはこれまでに出てきたIfステートメントやSelect Caseステートメントがあります。

確認問題

以下の「○○○」に当てはまる文言を解答してください。

・ある条件によって処理を変えることを条件分岐といい、これまでに出てきたIfステートメントや○○〇ステートメントがあります。
・条件判定の際に範囲を指定する場合は○○〇を、以上や以下といった条件を指定する場合は、○○〇を使用します。

答え


・ある条件によって処理を変えることを条件分岐といい、これまでに出てきたIfステートメントやSelect Caseステートメントがあります。
・条件判定の際に範囲を指定する場合はToを、以上や以下といった条件を指定する場合は、Isを使用します。

次回は、「select caseステートメント②」です。

 
 

連載目次リンク

ExcelVBA 入門 連載目次