The Select Case statement works very much like the If..Then..Else If
unlike an If..Then..Else If
Select/Case statement evaluates a single expression. It is better to use the Select Case statement
if you are testing an expression for more than two possibilities. Using a multitude of If statements
or if statements with many else if
statements can get confusing and lead to errors. The Select Case
provides a simpler structure which is much easier to read. Case statements are also more efficient.
The Select Case statement starts with a Select Case
and ends with an End Select
Its syntax is as follows:
Select Case [tested Expression]
Case [expression list1]
Statements executed if expression list1 contains a value that matches the tested expression
Case [expression list2]
Statements executed if expression list2 contains a value that matches the tested expression
Case [expression listN]
- The Tested Expression can be either a numeric or string expression.
- The expression lists are the possibilities we are testing for.
- If a value in the Case expression list matches the Tested Expression then the statements following that
Case clause are executed up to the next Case clause.
- If no values in the Case expression lists match the Tested Expression, the Case Else
Statements are executed
- The Case Else clause is not required. If there is no Case Else clause and none of the Case expressions match the value
in the tested Expression, execution will continue with whatever statement follows the End Select.
The Select Case statement tests a single expression. The result of the expression is checked against values in the Case expression list. If
one of the values listed in the Case expression matches the result of the test expression then all statements in that Case clause are executed
up to the next Case clause. When a Case clause is run, no other clauses are checked. The next line of code to be run will be the one following
the End Select
. The Case Else clause is not required but if it is used the statements in the Case Else clause will be executed if none of the
other Case expression lists contains a value that matches the tested expression.
The case clause can check individual values, ranges and variables or a combination of individual values, ranges, and variables
Case 3, 5, 8 To 12, 23 To 29, intTest
The statements in the Case clause will be executed if the tested expression matches any of the individual values, falls within a range, or is equal to the value stored
in the variable intTest.
*Note: Items are separated by commas.
*Note: You must use the word to when giving a range. You can not use 23-29.
The smaller number must always be the first number in a range. You can not use
29 to 23.
*Note: You use the Is
keyword when using comparison operators (<, <=, >, >=) to specify a range of value. If you do not key in the word Is
it will be automatically inserted for you. The Keyword Is in an If statement and the Keyword Is in a Select Case statement are not the same. The Keyword Is can be used in an If statement to compare objects. The Keyword Is in the Select Case statement is used with comparison operators.
Example: Using Select Case
The example below uses the Select Case statement to evaluate the value of the variable intNumber
. The value stored in intNumber is 17 which
falls in the range given by the clause Case 15 to 19
, therefore only the statement in its clause is executed.
Dim intNumber As Integer
intNumber = 17
Select Case intNumber 'intNumber is evaluated
Case Is < 5 'checks if intNumber is less than 5
MsgBox("The number is less than 5")
Case Is > 35 'checks if intNumber is greater than 35
MsgBox("The number is greater than 35")
Case 6, 9, 12 'checks if intNumber is 6 or 9 or 12
MsgBox("The number is 6 or 9 or 12")
Case 15 To 19 'checks to see if intNumber is between 15 and 19 'inclusive
'The variable IntNumber contains a value of 17 which matches the requirement of this clause
'This is the only Case clause that evaluates to True.
MsgBox("The Number is between 15 and 19 inclusive")
Case Else 'Catch all
'If no other clauses are true this statement will be executed
MsgBox("There is no match for intNumber")
Result of Running Program
In the example below, each Case clause evaluates the value of dblSales. If the Case statement is True then all statements within that Case clause are executed. If for example, the value in dblSales is greater than 8000, the value of 0.11 times dblSales will be placed in the dblCommission variable.
If the value in dblSales falls in the range of 6500 to 8000 inclusive then the value of .10 times dblSales will be placed in the dblCommission variable.
If none of the Case statements are True, the Case Else statement is executed, the value of .5 times dblSales will be placed in the dblCommission variable.
Select Case dbSales
Case Is > 8000
dblCommission = 0.11 * dblSales
Case 6500 to 8000
dblCommission = 0.1 * dblSales
dblCommission = 0.05*dblSales
Example: Using Select Case
This program will display the message “You got a hit” if the user enters any of the following: 3, 5, any number
between 8 and 12 inclusive, 20, any number between 23 and 29 inclusive and any number greater than 45. The program
will display “Number wasn’t found” if the user enters any other number.
Private Sub Button1_Click(ByVal sender As
System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim intTestNumber As Int32
intTestNumber = CInt(TextBox1.Text)
Select Case intTestNumber
Case 3, 5, 8 To 12, 20, 23 To 29, Is > 45
MsgBox("You got a hit")
Case 3, 5, 9 ' clause will never run because it
'contains values from the previous clause
MsgBox("This message will never be displayed")
MsgBox("Number wasn't found")
*Note: The second case clause will never be executed because all of its values are contained in the first case clause. After the first case
clause statements are executed the program will continue with whatever line follows the End Select statement.
Using String Ranges and Lists in Case clauses
Case clauses can also test for individual string values or strings that fall in a range:
Select Case strTestName
Case "Johnson", "Knoph" To "Smith", strEmployeeName
All the statements in this Case clause will be executed if the value in strTestName is equal to Johnson, or a name that falls in the alphabetic
range of Knoph to Smith such as Lynn, or if there is a name in the strEmployeeName variable that matches what is in strTestName.