VBA 选择

程序三大基础结构:顺序结构、选择结构、循环结构。

顺序结构:多条语句会依次执行。

选择结构:根据条件判断,条件成立则执行相应语句,条件不成立则不执行相应语句。

循环结构:根据循环条件判断,循环条件成立,则执行循环体中的内容,循环条件不成立,则结束循环的执行。

程序三大基础结构,构成了程序代码的运行逻辑。


VBA选择结构包括四类结构:if、if else、if else if、select case。


1 if语句

语法

If 条件 Then 语句

条件成立,则执行相应语句;否则不执行。然后继续之后的语句。


示例

根据用户输入的成绩,判断是否及格:如果大于60显示及格,否则不做显示。

Sub if1()
  Dim score As Integer
  score = InputBox("请输入分数:", "小步教程")
  If score >= 60 Then Debug.Print "及格"
  Debug.Print "程序继续执行"
End Sub

运行结果:

当输入分数100时,输出结果:
及格
程序继续执行

当输入分数0时,输出结果

程序继续执行

执行多条语句

如果条件成立时需要执行多行语句,需加end ,结构如下:

If 条件 Then
  语句1
  …
  语句n
End If

示例如下。如果大于60显示两句:第1句"及格",第2句"加油"。

Sub if2()
  Dim score As Integer
  score = InputBox("请输入分数:", "小步教程")
  If score >= 60 Then
    Debug.Print "及格"
    Debug.Print "加油"
  End If

  Debug.Print "程序继续执行"

End Sub

运行结果:

1)输入100分,输出结果:

及格
加油
程序继续执行

2)输入分数0分,输出结果:

程序继续执行

2 if else语句

语法

If 条件 Then 
	语句块1
Else
	语句块2
End if

条件成立,则执行语句块1中的内容;否则执行语句块2的内容。然后继续之后的语句。


示例

根据用户输入的成绩,判断是否及格:如果大于60显示及格,加油;否则显示:不及格,大大加油。

Sub if3()

  Dim score As Integer
  score = InputBox("请输入分数:", "小步教程")

  If score >= 60 Then
    Debug.Print "及格"
    Debug.Print "加油"
  Else
    Debug.Print "不及格"
    Debug.Print "大大加油"
  End If

  Debug.Print "程序继续执行"
End Sub

显示结果:

1)输入100分,输出结果:

及格
加油
程序继续执行

2)输入分数0分,输出结果:

不及格
大大加油
程序继续执行

3 if elseif语句

语法

If 条件1 Then 
	语句块1
ElseIf 条件2 Then
	语句块2
…
Else
	语句块n
End if

如果条件1成立,则执行语句块1中的内容;

继续判断条件2,如果条件2成立,执行语句块2的内容;

省略…表示类似Else if条件2 Then 语句块2 可以继续加入条件3、条件4的判断与执行;

如果上述条件都不成立,则执行Else中的语句块n。

Else与语句块n也可以省略。


示例

根据用户输入的成绩,判断是否及格:如果小于60显示不及格;60到69显示及格;70到79显示中;80到89显示良;90到100显示优。

Sub if4()
  Dim score As Integer
  score = InputBox("请输入分数:", "小步教程")

  If score < 60 Then
    Debug.Print "不及格"
  ElseIf score < 70 Then '实际条件为 >= 60 and <70
    Debug.Print "及格"
  ElseIf score < 80 Then '实际条件为 >= 70 and <80
    Debug.Print "中"
  ElseIf score < 90 Then '实际条件为 >= 80 and <90
    Debug.Print "良"
  Else          '实际条件为 >= 90
    Debug.Print "优秀"
  End If

  Debug.Print "程序继续执行"
End Sub

无Else代码示例。

Sub if5()
  Dim score As Integer
  score = InputBox("请输入分数:", "小步教程")

  If score < 60 Then
    Debug.Print "不及格"
  ElseIf score < 70 Then '实际条件为 >= 60 and <70
    Debug.Print "及格"
  ElseIf score < 80 Then '实际条件为 >= 70 and <80
    Debug.Print "中"
  ElseIf score < 90 Then '实际条件为 >= 80 and <90
    Debug.Print "良"
  ElseIf score >= 90 Then '实际条件为 >= 90
    Debug.Print "优秀"
  End If

  Debug.Print "程序继续执行"

End Sub

4 select case语句

select case用于判断具体值的匹配,等于相应值执行相应语句。

语法

Select Case 表达式
Case 值1
  语句块1
Case 值2
  语句块2
…
Case Else
  语句块n
End Select

如果表达式的值为值1,则执行语句块1;依次匹配;

如果都不匹配,则执行Case Else中的语句块n。


示例代码。

输入分数等级的字母表示,输出相应中文。

Sub if6()
  Dim grade As String
  grade = InputBox("请输入分数等级(A、B、C、D、E):", "小步教程")

  Select Case grade
  Case "E"
    Debug.Print "不及格"
  Case "D"
    Debug.Print "及格"
  Case "C"
    Debug.Print "中"
  Case "B"
    Debug.Print "良"
  Case Else
    Debug.Print "优秀"
  End Select

  Debug.Print "程序继续执行"    

End Sub

区别select case 与if

if后跟条件,即Boolean类型:True与False,通过真假来决定语句是否执行。

select case后跟数据,可以是数值与字符串等,通过与Case 值中的值是否匹配来决定语句是否执行。