VBA 複数の(入れ子の)Ifステートメント

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 6月 29, 2022

このチュートリアルでは、VBAでネストされたIf文を使用する方法について説明します。

If文は、VBAで1つの条件に対してTrueかFalseかをテストすることができ、その答えによってコードがTrue時の処理かFalse時の処理を実行します。

単独のIF文

Sub TestIf
   Dim x as Integer
   x = 10
   If x = 10 Then
'もし x が10ならば、条件は真となる
      MsgBox "xは10です"
   Else
'x が10でないならば、条件は偽となる
      Msgbox "xは10ではありません"
   End If
End Sub

ネストされたIFの説明

Nested Ifは、元のIfのTrueやFalseの文の中に複数の条件を入れることができます。

Sub TestNestedIf()
Dim x as Integer
Dim y as Integer
Dim z as Integer
x = 10
y = 9
z = 8
If x = 10 Then
   'x が 10 であれば、条件は真なので y をテストする
   If y = 9 Then
       MsgBox "yは9です"
   Else
       'yが9でない場合、条件は偽となる
       Msgbox "yは9ではありません"
   End If 
Else
   'x が 10 でない場合、条件は偽なので z をテストする
   If z = 8 Then 
      MsgBox "zは8です" 
   Else 
      'z が 8 でない場合、条件は偽となる
      Msgbox "zは8ではありません" 
   End If 
'元の if を閉じるには別の End If が必要となる
End If
End Sub

コードを書くときにインデント(字下げ)をすると、後で読み返すときや、他のプログラマーが読むときに読みやすく、分かりやすいコードになります。 また、ユーザー設計関数(UDF)を作成し、Excelからパラメータを使っていくつかのセルの値をこの関数に呼び出すこともできます。

Function GetIf(x as Integer, y as Integer, z as Integer) as String
   If x = 10 Then
      'xが10であれば、条件は真なのでyをテストする
      If y = 9 Then
         GetIf = "yは9です" 
      Else
         'yが9でない場合、条件は偽となる
         GetIf = "yは9ではありません" 
      End If 
   Else 
      'x が 10 でない場合、条件は偽であるため、z をテストする
      IF z = 8 Then 
           GetIf = "zは8です"
      Else 
         'z が 8 でない場合、条件は偽となる
         GetIf = "zは8ではありません" 
      End If 
   '元の if を閉じるために別の End If が必要 
   End If 
End Function

vba nested if

入れ子のIfの例

次のような関数を考えてみましょう。

Function GetDiscount(dblPrice As Double) As Double
   If dblPrice >= 1000 Then
      '価格が1000より大きい場合、割引を割り当てる
      If dblPrice >= 2000 Then
         'もし、2000より大きいなら、10%の割引を与える
         GetDiscount = dblPrice * 0.1
      Else
         'そうでなければ、5%の割引を与える
         GetDiscount = dblPrice * 0.05
      End If
   '価格が1000より大きくない場合
   Else
      '500より大きい場合は、2.5%の割引を与える
      If dblPrice >= 500 Then
          GetDiscount = dblPrice * 0.025
      Else
         'そうでなければ、割引はありません
         GetDiscount = 0
      End If
   '元の if を閉じるために別の End If が必要 
   End If
End Function

この関数をExcelシートで使用すると、注文の合計金額を確認し、その合計金額に応じてさまざまな割引を適用することができます。

vba nested ifs example

ElseIfの使用

ElseIfを使用すると、最初のif文がfalseを返した場合にのみ2番目のif文に移動するため、コードを簡素化することができます。

Function GetDiscount(dblPrice As Double) As Double
'else ifを使用してコードの量を減らす
   If dblPrice >= 2000 Then
      GetDiscount = dblPrice * 0.1
   ElseIf dblPrice >= 1000 Then
      GetDiscount = dblPrice * 0.075
   ElseIf dblPrice >= 500 Then
      GetDiscount = dblPrice * 0.05
   ElseIf dblPrice >= 200 Then
      GetDiscount = dblPrice * 0.025
   ElseIf dblPrice >= 100 Then
      GetDiscount = dblPrice * 0.01
   Else
      GetDiscount = 0
   End If
End Function

if else example

Caseステートメントの使用

Caseステートメントを使用して、同じ効果を得ることもできます。

Function GetDiscount(dblPrice As Double) As Double
   Select Case dblPrice
'このケースステートメントは、6つの異なる割引レベルを持つ
   Case Is >= 2000
      GetDiscount = dblPrice * 0.1
   Case Is >= 1000
      GetDiscount = dblPrice * 0.075
   Case Is >= 500
      GetDiscount = dblPrice * 0.05
   Case Is >= 200
      GetDiscount = dblPrice * 0.025
   Case Is >= 100
      GetDiscount = dblPrice * 0.01
   Case Else
      GetDiscount = 0
   End Select
End Function

vba if case example

vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples