今日学习目标
- 掌握If...Then...Else语句
- 掌握Select Case语句
- 学会使用嵌套条件
知识点
1. VBA条件语句怎么写:If...Then...Else
条件语句让程序"看情况办事",基本写法:
vbaIf 条件 Then
' 条件成立时执行
Else
' 条件不成立时执行
End If多档判断用 ElseIf 续接,条件可用 And、Or 组合。分支顺序决定结果:If从上往下命中即跳出,范围判断要从高往低写,否则85分会被 score >= 60 先判成"及格"。
2. Select Case
同一个变量对照多个固定值时,Select Case比一长串ElseIf清晰:
vbaSelect Case 变量
Case 值1
' 处理值1
Case 值2
' 处理值2
Case Else
' 其他情况
End SelectCase支持区间写法 Case Is >= 90、Case 1 To 10。经验:离散值(等级、部门)用Select Case,范围或组合条件用If...ElseIf。
3. 嵌套条件
If里可以再放If,表达"先满足A,再看B"的层次(bas文件示例先判年龄再判学生)。超过两层建议改用 And。
今日代码
vbaSub If示例()
Dim score As Integer
score = 85
If score >= 90 Then
MsgBox "优秀"
ElseIf score >= 80 Then
MsgBox "良好"
ElseIf score >= 60 Then
MsgBox "及格"
Else
MsgBox "不及格"
End If
End Sub
Sub SelectCase示例()
Dim grade As String
grade = "A"
Select Case grade
Case "A"
MsgBox "优秀"
Case "B"
MsgBox "良好"
Case "C"
MsgBox "中等"
Case Else
MsgBox "未知等级"
End Select
End SubIf示例中85分命中 score >= 80 分支;SelectCase示例中"A"命中第一个Case。
实战场景
背景:销售提成阶梯——销售额10万以内提成3%,10万到20万按5%,20万以上按8%:
vbaSub 计算提成()
Dim 销售额 As Double, 提成率 As Double
销售额 = 150000
If 销售额 > 200000 Then
提成率 = 0.08
ElseIf 销售额 > 100000 Then
提成率 = 0.05
Else
提成率 = 0.03
End If
MsgBox "提成: " & 销售额 * 提成率 & " 元"
End Sub15万命中第二分支,弹出"提成: 7500 元"。条件必须从大到小排,否则20万以上的大单也会停在5%——不报错但每月都在少算钱。
练习题
- 根据分数判断等级
- 判断一个年份是否为闰年
- 根据成绩给出奖惩建议
参考解答
- 使用If...ElseIf或Select Case判断分数区间(90以上优秀,80-89良好等),把score换成
InputBox的返回值即可交互。 - 闰年判断:(Year Mod 4 = 0 And Year Mod 100 <> 0) Or (Year Mod 400 = 0),用Mod求余数,配合If输出结果。
- 把If各分支的MsgBox文本换成奖励(如请客)或惩罚(如加班复习)的建议。
延伸练习
- 把If示例改写成Select Case版本,使用
Case Is >= 90区间语法。 - 输入三个数,只用If输出其中的最大值。
常见错误与排查
| 报错/现象 | 原因 | 解决方法 |
|---|---|---|
Compile error: Block If without End If |
多行If漏End If,或ElseIf写成"Else If" | 每个块If配一个End If |
| 字符串判断总落到Case Else | 输入带前后空格,"A "不等于"A" | 比较前用 Trim() 去空格 |
| 85分被判成"及格" | 宽条件挡在窄条件前面 | 范围判断从高到低排列 |
学习总结
If...ElseIf管范围和组合条件,Select Case管一个变量的多档取值。写完先检查End If配对与分支顺序。
由在线工具箱(www.vba.net)整理制作