VBA 複数の(入れ子の)Ifステートメント
Last updated on 6月 29, 2022
In this Article
このチュートリアルでは、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
入れ子の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シートで使用すると、注文の合計金額を確認し、その合計金額に応じてさまざまな割引を適用することができます。
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
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