11/18/2017

Excel。マクロ017。条件分岐 If Then ElseIf Then End If

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を使ってみるというのもいいかもしれませんね。