In VBA, you can use one IF statement inside another IF statement to create nested IFs. In simple words, you can execute one test statement using IF based on the result of another IF statement. In this kind of conditional statement, you need to test complex conditions. Let’s see an example:
In the above example, we are testing two conditions, condition1 (1 + 1 = 2) and condition2 (2 + 2 = 4).
But as we are the IF statement inside the IF statement, VBA will first test the first condition and then move to the next IF.
In the second IF, we have a message box to show if the condition is TRUE.
Sub myMacro1() 'first if statement If 1 + 1 = 2 Then 'second if statement If 2 + 2 = 4 Then MsgBox True End If Else MsgBox False End If End Sub
Here’s an example of using multiple IFs in one IF.
There is one difference between the example that we used earlier and in the above example: In this code, we have used a nested condition for “Else”.
If the first condition is not true, VBA will move to the “Else” and test the condition, and if that condition is not true then to the next.
In this way, we have a total of four conditions to test.
Sub myMacro2() Dim myScore As Single: myScore = Range("A1").Value If myScore >= 80 Then MsgBox "Excellent" Else If myScore >= 60 And myScore < 80 Then MsgBox "Good" Else If myScore >= 40 And myScore < 60 Then MsgBox "Average" Else If myScore < 40 Then MsgBox "Poor" End If End If End If End If End Sub
This nested IF statement will test for the score from cell A1 and show a message box accordingly.
VBA Nested IF with Multiple Lines (IFs)
You can also use separate two different IFs to execute for both results (True and False).
In the above example, as you can see we first have a condition to test, and if that condition is TRUE and then you have another condition to test, and if that second condition is TRUE, you’ll get a message box.
And if the main condition is false, you have another condition to test and you’ll get a message box if that condition is true.
Sub myMacro3() If 1 + 1 = 2 Then If 2 - 1 = 1 Then MsgBox "Condition1 is TRUE." End If Else If 3 - 2 = 1 Then MsgBox "Condition2 is TRUE." End If End If End Sub