よく使うステートメント

If ~ Then

 日常生活の中で ”条件によって次の行動を決める” ことがよくあります。
たとえば
「明日は晴れだったらサッカーの練習しよう」
といったことです。

 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で書いて、確認をしてください。