今日学习目标

  • 掌握If...Then...Else语句
  • 掌握Select Case语句
  • 学会使用嵌套条件

知识点

1. VBA条件语句怎么写:If...Then...Else

条件语句让程序"看情况办事",基本写法:

vba
If 条件 Then ' 条件成立时执行 Else ' 条件不成立时执行 End If

多档判断用 ElseIf 续接,条件可用 And、Or 组合。分支顺序决定结果:If从上往下命中即跳出,范围判断要从高往低写,否则85分会被 score >= 60 先判成"及格"。

2. Select Case

同一个变量对照多个固定值时,Select Case比一长串ElseIf清晰:

vba
Select Case 变量 Case 值1 ' 处理值1 Case 值2 ' 处理值2 Case Else ' 其他情况 End Select

Case支持区间写法 Case Is >= 90、Case 1 To 10。经验:离散值(等级、部门)用Select Case,范围或组合条件用If...ElseIf。

3. 嵌套条件

If里可以再放If,表达"先满足A,再看B"的层次(bas文件示例先判年龄再判学生)。超过两层建议改用 And。

今日代码

vba
Sub 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 Sub

If示例中85分命中 score >= 80 分支;SelectCase示例中"A"命中第一个Case。

实战场景

背景:销售提成阶梯——销售额10万以内提成3%,10万到20万按5%,20万以上按8%:

vba
Sub 计算提成() Dim 销售额 As Double, 提成率 As Double 销售额 = 150000 If 销售额 > 200000 Then 提成率 = 0.08 ElseIf 销售额 > 100000 Then 提成率 = 0.05 Else 提成率 = 0.03 End If MsgBox "提成: " & 销售额 * 提成率 & " 元" End Sub

15万命中第二分支,弹出"提成: 7500 元"。条件必须从大到小排,否则20万以上的大单也会停在5%——不报错但每月都在少算钱。

练习题

  1. 根据分数判断等级
  2. 判断一个年份是否为闰年
  3. 根据成绩给出奖惩建议

参考解答

  1. 使用If...ElseIf或Select Case判断分数区间(90以上优秀,80-89良好等),把score换成 InputBox 的返回值即可交互。
  2. 闰年判断:(Year Mod 4 = 0 And Year Mod 100 <> 0) Or (Year Mod 400 = 0),用Mod求余数,配合If输出结果。
  3. 把If各分支的MsgBox文本换成奖励(如请客)或惩罚(如加班复习)的建议。

延伸练习

  1. 把If示例改写成Select Case版本,使用 Case Is >= 90 区间语法。
  2. 输入三个数,只用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)整理制作