Read our blogs, tips and tutorials
Try our exercises or test your skills
Watch our tutorial videos
Catch up on one of our webinars
Take a self-paced course
Read our recent newsletters
License our courseware
Book expert consultancy
Buy our publications
Get help in using our site
401 attributed reviews in the last 3 years
Refreshingly small course sizes
Outstandingly good courseware
Whizzy online classrooms
Wise Owl trainers only (no freelancers)
Almost no cancellations
We have genuine integrity
We invoice after training
Review 30+ years of Wise Owl
View our top 100 clients
Search our website
We also send out useful tips in a monthly email newsletter ...
This module introduces two important VBA concepts: testing conditions, and doing something repeatedly (looping).
| 3.3 - Select Case Statements |
|---|
| 3.3.1 - The Select Case Statement |
| 3.4 - Conditional Functions |
|---|
| 3.4.1 - The IIf Function |
| 3.4.2 - The Switch Function |
| 3.5 - Conditional Loops |
|---|
| 3.5.1 - Basic Do Loops |
| 3.5.2 - Do Until Loops |
| 3.5.3 - Do While Loops |
Choose what you want to learn from the list of lessons above.
This page provides a brief summary of what you've learned in this module. You can click here to download the example code shown below.
You can write a basic If statement to perform an action if a condition is met.
If Range("A1").Value = "" Then Exit Sub
You can write a block If statement to perform multiple actions if a condition is met.
If Range("A1").Value = "" Then
Range("A1").Interior.Color = rgbPink
Range("A1").Select
Exit Sub
End If
You can use the Else clause to perform actions if the condition is not met.
If Range("A1").Value = "" Then
Range("A1").Interior.Color = rgbPink
Range("A1").Select
Exit Sub
Else
Range("A1").ClearFormats
End If
You can use ElseIf to test multiple conditions in the same block If statement.
If Range("A1").Value > Range("B1").Value Then
Range("C1").Value = "Player 1 wins"
ElseIf Range("B1").Value > Range("A1").Value Then
Range("C1").Value = "Player 2 wins"
Else
Range("C1").Value = "Draw"
End If
You can nest If statements.
If IsNumeric(Range("A1").Value) Then
If Range("A1").Value < 0 Then
Range("A2").Value = "Negative number"
Exit Sub
End If
Else
Range("A2").Value = "Not a number"
Exit Sub
End If
You can combine conditions using the Or operator.
If Range("A1").Value < 0 _
Or Range("A1").Value > 10 Then
Exit Sub
End If
You can combine conditions using the And operator.
If Month(Now) = 12 And Day(Now) = 25 Then
Range("A1").Value = "Tis the season"
End If
You can use the Not operator to change True to False and vice versa.
If Not IsDate(Range("A1").Value) Then
Range("A2").Value = "Not a date"
Exit Sub
End If
You can write a Select Case statement to assign a value to one of a set of discrete categories.
Select Case Month(Date)
Case 1
Range("A1").Value = "Jan"
Case 2
Range("A1").Value = "Feb"
Case 3
Range("A1").Value = "Mar"
Case 4
Range("A1").Value = "Apr"
Case 5
Range("A1").Value = "May"
Case 6
Range("A1").Value = "Jun"
Case 7
Range("A1").Value = "Jul"
Case 8
Range("A1").Value = "Aug"
Case 9
Range("A1").Value = "Sep"
Case 10
Range("A1").Value = "Oct"
Case 11
Range("A1").Value = "Nov"
Case 12
Range("A1").Value = "Dec"
Case Else
Range("A1").Value = "Unknown"
End Select
You can test multiple values in each case.
Select Case Month(Date)
Case 12, 1, 2
Range("A1").Value = "Winter"
Case 3, 4, 5
Range("A1").Value = "Spring"
Case 6, 7, 8
Range("A1").Value = "Summer"
Case 9, 10, 11
Range("A1").Value = "Autumn"
Case Else
Range("A1").Value = "Unknown"
End Select
You can test a range of values in each case.
Select Case Month(Date)
Case 1 To 3
Range("A1").Value = "Quarter 1"
Case 4 To 6
Range("A1").Value = "Quarter 2"
Case 7 To 9
Range("A1").Value = "Quarter 3"
Case 10 To 12
Range("A1").Value = "Quarter 4"
Case Else
Range("A1").Value = "Unknown"
End Select
You can use the IIf function to return a value based on a logical test.
Range("A2").Value = IIf( _
Expression:=Range("A1").Value < 0, _
TruePart:="Negative", _
FalsePart:="Positive")
You can use the Switch function to test multiple conditions in the same expression.
Range("A2").Value = Switch( _
Range("A1").Value < 3, "Rubbish", _
Range("A1").Value < 6, "Average", _
Range("A1").Value < 8, "Good", _
True, "Great")
You can use a Do - Loop statement to execute instructions repeatedly, with an Exit Do statement to stop the loop.
Range("A1").Select
Do
'do something useful
ActiveCell.Offset(1, 0).Select
If ActiveCell.Value = "" Then Exit Do
Loop
You can use a Do Until - Loop statement to automatically exit the loop when the condition returns True.
Range("A1").Select
Do Until ActiveCell.Value = ""
'do something useful
ActiveCell.Offset(1, 0).Select
Loop
You can use a Do - Loop Until statement to test the condition at the end of the loop.
Range("A1").Select
Do
'do something useful
ActiveCell.Offset(1, 0).Select
Loop Until ActiveCell.Value = ""
You can use a Do While - Loop statement to automatically exit the loop when the condition returns False.
Range("A1").Select
Do While ActiveCell.Value <> ""
'do something useful
ActiveCell.Offset(1, 0).Select
Loop
You can use a Do - Loop While statement to test the condition at the end of the loop.
Range("A1").Select
Do
'do something useful
ActiveCell.Offset(1, 0).Select
Loop While ActiveCell.Value <> ""
This page contains reference material for the code used in this module.
The table below shows a list of comparison operators that you can use in logical tests:
| Operator | Description |
|---|---|
| = | Is equal to |
| <> | Is not equal to |
| > | Is greater than |
| < | Is less than |
| >= | Is greater than or equal to |
| <= | Is less than or equal to |
The table below shows a list of logical operators you can use in VBA:
| Operator | Description |
|---|---|
| Or | Combines two logical tests. Returns True when either or both logical tests returns True. |
| And | Combines two logical tests. Returns True when both logical tests return True. |
| Not | Changes True to False and vice versa. |
| Xor | Combines two logical tests. Returns True when only one of the logical tests returns True. |
| Eqv | Combines two logical tests. Returns True when both logical tests return the same result. |
Try doing one or more of the following exercises for this module:
Exercise 3.01 Exercise 3.02 Exercise 3.03There is currently no test for this module.
Kingsmoor House
Railway Street
GLOSSOP
SK13 2AA
Elementa Workspace
6 Bevis Marks
LONDON
EC3A 7BA
c/o Holiday Inn
25 Aytoun Street
MANCHESTER
M1 3AE
© Wise Owl Business Solutions Ltd 2026. All Rights Reserved.