Excel。マクロ017。条件分岐 「If Then ElseIf Then End If」
<VBA>
事務職でも、少しExcel VBAを知っていると、確かに作業効率は改善されるようですが、
難しいと感じている人も多いようです。
とはいえ、少しずつでいいので、慣れていくといいですね。
今回は、条件分岐処理のIf Then ElseIf Then End If
をご紹介していきます。
If Then ElseIf Then End Ifは、Exceでいうと、IF+IF関数と同じですね。
ABCの三分岐処理を行うのと同じイメージですね。
ステートメントとしては、
If 条件式1 Then
処理内容1
ElseIf 条件式2 Then
処理内容2
ElseIf 条件式3 Then
処理内容3
Else
処理内容4
End If
です。
では、次の表を使って
売上金額が20万以上なら赤色で塗りつぶし、
10万以上なら青色で塗りつぶし、8万以上なら黄色で塗りつぶし、
それ以外なら、塗りつぶさない。
というマクロVBAを作っていきましょう。
Sub 条件分岐04()
Dim i As Long
For i = 2 To 18
If Cells(i, "G").Value >= 200000 Then
Cells(i, "G").Interior.Color = vbRed
ElseIf Cells(i, "G").Value >= 100000 Then
Cells(i, "G").Interior.Color = vbBlue
ElseIf Cells(i, "G").Value >= 80000 Then
Cells(i, "G").Interior.Color = vbYellow
Else
Cells(i, "G").Interior.Color = xlNone
End If
Next
End Sub
実行してみましょう。
では、少しずつ説明をしていきます。
変数iを使って、2行目から18行目までを繰り返して処理をさせるのが、
Dim i As Long
For i = 2 To 18~Next
ですね。
そして、For To Nextの中身のIf~EndIfまでが、
判定させている処理にあたります。
If Cells(i, "G").Value >= 200000 Then は、
20万以上だったら?という意味になりますね。
Cells(i, "G")ですが、Cells(i, 7)というように列数にしなくても、
直接”G”列と入力してもOKなんですね。
当然ですが、列数が多いデータの場合、
AZは何列目だ?なんて数えなくてもいいわけですね。
Cells(i, "G").Interior.Color = vbRed は、
セルの色を赤色で塗りつぶすという処理をさせていますね。
そして、このあとが20万以上でない場合は、
別の処理をするのではなくて、もう一つ質問をしていくわけですね。
ElseIf Cells(i, "G").Value >= 100000 Then
ExcelのIF+IF関数のネストならば、IFでいいのですが、
マクロVBAでは、ElseIfという形になるので、注意が必要ですね。
あと処理を繰り返していきます。
条件式の最後は、
ElseIfではなくて、Elseになりますので、注意しましょう。
Cells(i, "G").Interior.Color = xlNone
の
xlNoneは、塗りつぶしなしを意味しています。
ExcelのIF+IF関数のネストでは、条件分岐の数が増加すると、
数式が煩雑になる傾向にありますが、
マクロVBAのIf Then ElseIf Then End Ifは、
縦に構文を作っていく事もあって、比較的わかりやすくなりますし、
条件を増減させる場合も、効率がよくなります。
また、今回のように、書式関係ですと、
Excelでは条件付き書式を使って設定していきますが、
条件数が増えてしまうと、設定も面倒ですし、
ファイルサイズも増えてしまうので、
If Then ElseIf Then End Ifを使ってみるというのもいいかもしれませんね。