日常生活の中で ”条件によって次の行動を決める” ことがよくあります。
たとえば
「明日は晴れだったらサッカーの練習しよう」
といったことです。
VBAを含む多くのプログラミング言語にも、プログラムの流れを変化させる仕組み(条件分岐)があります。
「If ステートメント」による条件分岐です。
条件の数によって記述が異なります。
3つのタイプに分けて説明します。
この通称「If 文」と呼ばれるステートメントは非常に重要です。
使用頻度が極めて高いステートメントです。
条件を満たす時の処理
If (条件) Then
(条件を満たす時の処理)
End If
ある一定の条件を満たす時、処理を実行させるステートメントです。
条件分岐の中で、基本的で超重要なステートメントになります。
例で説明します。
売り上げ増加を目的に「値引きキャンペーン」を展開中です。
10月の取引額が200万円を超えていたら、2%の値引きをします。
取引先山田商店への10月の売り上げは下記のとおりです。
条件に基づき値引き額を求める。
そして合計金額から値引き額を差し引き、総合計欄に記入する。
以上の処理を行います。

このような流れです。

Sub nebiki()
Dim UR As Long ’ ①
Dim DC As Long ’ ②
’ ① 変数=売上合計金額 型は数字
’ ② 変数=値引き金額 型は数字
‘ ③ 値引き額をゼロにリセット
DC = 0
‘ ④ 合計金額をURに代入
UR = Range(“F20”).Value
‘ ⑤ 条件分岐
If UR >= 2000000 Then
DC = Int(UR * 0.02)*(-1)
End If
‘ ⑥ 値引きと総合計の書き入れ
Range(“F21”) = DC
Range(“F22”) = UR + DC
End Sub
① UR を数字として宣言
② DC を数字として宣言
③ DCをゼロにセット
値引き金額をまずはゼロにセットします。
④ URに10月の売上合計を入れます。
⑤ もし売上合計金額が200万円を超えていたら、「値引き額の計算」をおこないます。
UR*0.02 は 「UR × 0.02」です。
つまり 「売上合計金額 × 2%」です。
Int で 小数点以下を切り捨てます。
売上 2,267,054 × 0.02 = 45,341.08
⇓
小数点以下切り捨てで 45,341
値引き額 DC = 45,341 となります。
値引きですのでマイナスにするため -1 を掛けます。
超えていなかったら、何もせずスルーします。
よって DC = 0 のままです。
⑥ 値引き欄に値引き金額を書き入れます。
⑦ 売上合計に値引き額(-)を加え、総合計欄に書き入れます。
結果は

条件を満たす・満たさない両方の処理
条件を満たしている場合と、満たしていない場合で異なる処理行う場合です。
If (条件) Then
条件を満たす時の処理
Else
条件を満たさない時の処理
End If
先ほどの 山田商店の例で説明します。
売上合計金額が200万円を超えていたら 2%の値引きを計算し表記しました。
200万円未満の場合は何もしませんでした。
今度は200万円以上の場合はその2%値引きで、200万円未満の場合は 1%の値引きとします。


Sub nebiki2()
Dim UR As Long
Dim DC As Long
‘ 合計金額をURに代入
UR = Range(“F20”).Value
‘ 条件分岐
If UR >= 2000000 Then
DC = Int(UR * 0.02)*(-1)
Else ‘200万円を超えない場合
DC = Int(UR * 0.01)*(-1)
End If
‘ 値引きと総合計の書き入れ
Range(“F21”) = DC
Range(“F22”) = UR + DC
End Sub
変わったのは条件分岐の欄だけです。
Else は、「If 以下の条件でない場合は」と読み替えたらわかりやすいです。
結果は


いくつかの条件がある処理
条件がいくつかあり、それぞれで異なる処理を実行したい場合は、Elseif を使って複数条件を指定します。
If (条件1) Then
条件1を満たす時の処理
ElseIf(条件2) Then
条件2を満たす時の処理
Elseif(条件3)Then
条件3を満たす時の処理
Else
1~3の条件を満たさない時の処理
End If
先ほどの山田商店のケースで説明します。
売上合計が200万円未満は、値引き1%
同 200万円以上300万円未満は2%
同 300万円以上500万円未満は3%
同 500万円以上は5%
とします。

Sub nebiki3()
Dim UR As Long
Dim DC As Long
‘ 合計金額をURに代入
UR = Range(“F20”).Value
‘ 条件分岐
If UR >= 5000000 Then ‘①
DC = Int(UR * 0.05) * (-1)
ElseIf UR >= 3000000 And _ ‘②
UR < 5000000 Then
DC = Int(UR * 0.03) * (-1)
ElseIf UR >= 2000000 And _ ‘③
UR < 3000000 Then
DC = Int(UR * 0.02) * (-1)
Else ‘200万円を超えない場合 ④
DC = Int(UR * 0.01) * (-1)
End If
‘ 値引きと総合計の書き入れ
Range(“F21”) = DC
Range(“F22”) = UR + DC
End Sub
① 売上金額が 500万円以上の場合
② 売上金額が 300万円以上 500万円未満の場合
③ 売上金額が 200万円以上 300万円未満の場合
④ それ以外の場合(売上金額が200万円未満の場合)
一見複雑そうに見えますが、ただ条件が増えているだけです。
注:ElseIf UR >= 3000000 And _
UR < 5000000 Then
And の後ろの「_(アンダーバー)」があります。
これは記述が長くなるとき、これによって改行するために使用します。
Elseif UR >= 3000000 And UR < 5000000 Then
が改行しないときの記述です。
結果は以下の通りです。


まとめ
◆パターン 1
If 条件式 Then
条件式成立時に実行するコード
(条件式がTrueの時)
End If
◆パターン 2
If 条件式 Then
条件式成立時に実行するコード
(条件式がTrueの時)
Else
条件式以外の時実行するコード
(条件式がFalseの時)
End if
◆パターン 3
If 条件式1 Then
条件式1成立時に実行するコード
(条件式1がTrueの時)
ElseIf 条件式2 Then
条件式2成立時に実行するコード
(条件式2がTrueの時)
ElseIf 条件式3 Then
条件式3成立時に実行するコード
(条件式3がTrueの時)
Else
全条件式以外の時実行するコード
(全条件式がFalseの時)
End if
パターン 3 の場合、条件式が増えるとこのステートメントでは、書く際も後でチェックする際も見ずらい状態になります。
こうした場合、「Select Case ~ End Select」を使うと便利でスマートになります。
この 「If ~ Then」は非常にポピュラーかつ重要なステートメントです。
自分でいろいろなケースを想定して、実際にExcel VBAで書いて、確認をしてください。

