次にSelect〜Caseを使った複数の条件分岐について解説しよう。
条件が多い場合は、上記ElseIfよりも、この処理を使うと簡潔にマクロを書ける。構文は下記のようになる。
Select Case {元になる式}
Case {比較する式1}
'〜ここに{元になる式}と{比較する式1}が一致する場合の処理を書く〜
Case {比較する式2}
'〜ここに{元になる式}と{比較する式2}が一致する場合の処理を書く〜
……
Case {比較する式N}
'〜ここに{元になる式}と{比較する式N}が一致する場合の処理を書く〜
Case Else
'〜ここに{元になる式}がどの式とも一致しなかった場合の処理を書く〜
End Select
例えば、図8のような氏名別の英語の点数があったとしよう
「ランク」ボタンをクリックすると、「ランク」の欄に、「ランクA」から「ランクE」までの値が入るようにしてみよう。マクロはリスト6のようになる。
Option Explicit Sub ランクを付ける() Dim i As Integer For i = 5 To 12 Select Case Range("C" & i).Value Case Is >= 90 Range("D" & i).Value = "ランクA" Case Is >= 80 Range("D" & i).Value = "ランクB" Case Is >= 70 Range("D" & i).Value = "ランクC" Case Is >= 60 Range("D" & i).Value = "ランクD" Case Is >= 50 Range("D" & i).Value = "ランクE" Case Else Range("D" & i).Value = "ランクF" End Select Next End Sub
「得点」のセルを繰り返し処理しながらSelect〜Caseで条件分岐を行い、「ランク」ボタンをクリックすると点数に応じてランク付けされる。「ランク」ボタンには「ランクを付ける」マクロを登録しておく。
実行すると、図9のように表示される。
次に、条件が成立している間、処理を繰り返す、Do While〜Loopについて解説しよう。これは、条件が成立している間、処理を繰り返す。構文は下記の通りだ。
Do While {条件}
'〜ここに条件が成
書く〜
Exit Do
Loop
図10のような売上金額の入ったデータがあったとする。
「売上が500,000円以下の場合」ボタンをクリックすると、ボタンのタイトルの金額であった場合、背景色が赤で塗りつぶされる。マクロはリスト7だ。
Sub 売上が50万以下の場合() Dim no As Long no = 5 Do While Cells(no, 13) <> "" If Cells(no, 13).Value < 500000 Then Cells(no, 13).Interior.ColorIndex = 3 End If no = no + 1 Loop End Sub
Do While〜Loopを使って、5行目から13列(M)目に対して繰り返し処理を行う。繰り返し処理の中でセルの値が50万円以下の場合は、そのセルの背景色を赤で塗りつぶす。「no=no+1」はセルが空でない間、行を下りながら空のセルが見つかるまで処理を繰り返している。
「no=no+1」は変数noの数を1ずつ増加させている意味になる。ここでは、1行ずつ下に移動する意味になる。
実行すると、図11のようになる。
Copyright © ITmedia, Inc. All Rights Reserved.