乐于分享
好东西不私藏

从0学Excel VBA编程 第7篇:条件判断 If 语句——让代码学会做选择

从0学Excel VBA编程 第7篇:条件判断 If 语句——让代码学会做选择

从0学Excel VBA编程 第7篇:条件判断 If 语句——让代码学会做选择

每天10分钟,今天开始,你的代码将拥有"思考"能力——能根据不同情况做不同的事。


学习目标

  1. 学会用 If...Then 做单分支判断(满足条件才执行)
  2. 学会用 If...Then...Else 做双分支判断(满足和不满足执行不同操作)
  3. 学会用 If...ElseIf 做多分支判断(多种情况,对应不同结果)

知识点精讲

什么是条件判断?

生活里我们天天都在做"判断":

  • 如果今天下雨 → 带伞;否则 → 不带伞
  • 如果分数 ≥ 60 → 及格;否则 → 不及格
  • 如果分数 ≥ 90 → 优秀;8089 → 良好;7079 → 中等;否则 → 待加强

在 VBA 里,把这些"如果"翻译成代码,就是 If 语句。代码的执行流程不再是"从头到尾顺一遍",而是可以"拐弯"。

1. 单分支:If...Then...End If

场景:只有"满足"才做事,不满足就跳过。

语法:

If 条件 Then    ' 条件满足时执行的代码End If

举个例子——判断 A1 是否大于 100:

If Range("A1").Value > 100 Then    MsgBox "A1 超过 100 了!"End If

意思是:如果 A1 的值大于 100,就弹窗提醒。A1 小于等于 100 时,什么都不发生。

注意三点:

  • 条件 必须能得出 True 或 False(比如 > 100、<> "OK"、= "是")
  • If 和 End If 是成对出现的,别漏了 End If
  • 只有一行代码时,可以简写为:If 条件 Then 一行代码(可以省略 End If),但新手建议老实写完整

2. 双分支:If...Then...Else...End If

场景:满足和不满足,要做两件不同的事。

语法:

If 条件 Then    ' 条件满足时执行Else    ' 条件不满足时执行End If

举个例子——判断成绩是否及格:

If Range("A1").Value >= 60 Then    MsgBox "及格啦!"Else    MsgBox "没及格,要加油!"End If

分数 ≥ 60 弹"及格",否则弹"没及格"。两条路二选一。

3. 多分支:If...ElseIf...Else...End If

场景:情况不止两种,需要分门别类处理。

语法:

If 条件1 Then    ' 条件1满足时执行ElseIf 条件2 Then    ' 条件2满足时执行(条件1不满足时才会检查这里)ElseIf 条件3 Then    ' 条件3满足时执行Else    ' 以上条件都不满足时执行End If

举个例子——根据分数给出等级:

Dim 分数 As Integer分数 = Range("A1").ValueIf 分数 >= 90 Then    Range("B1").Value = "优秀"ElseIf 分数 >= 80 Then    Range("B1").Value = "良好"ElseIf 分数 >= 70 Then    Range("B1").Value = "中等"ElseIf 分数 >= 60 Then    Range("B1").Value = "及格"Else    Range("B1").Value = "待加强"End If

执行流程:从第一个条件开始检查,遇到第一个满足的就执行对应代码块,然后跳出整个 If;都不满足才执行 Else 部分。

重要细节:

  • ElseIf 是一个词,不能写成 Else If(中间加空格就是错的,新手常踩的坑)
  • 条件的顺序很关键。判断"≥90"必须放在"≥80"前面,否则 90 分也会被分到"良好"
  • Else 结尾是兜底用的,可省略

比较运算符速查

符号
含义
例子
=
等于
A1 = 100
<>
不等于
A1 <> 0
>
大于
A1 > 60
<
小于
A1 < 60
>=
大于等于
A1 >= 60
<=
小于等于
A1 <= 60

文字比较时用 =:姓名 = "张三" 表示姓名等于"张三"。

【SVG 示意图】 If 语句三种写法① If 条件 Then② If 条件 Then ... Else ... End If③ If ... ElseIf ... Else ... End If三个关键:If / Then / End If注意:ElseIf 中间不能加空格


实战案例

案例1:判断成绩是否及格(简单)

功能说明:在 A1 写入一个分数(70),用 If 单分支判断"是否及格(≥60)",及格就写入 B1 显示"✓",否则显示"✗"。

操作步骤:

  1. 按 Alt + F11 打开 VBA 编辑器
  2. 插入"模块",粘贴以下代码:
' =================================' 案例1:单分支 If 判断是否及格' =================================Sub 判断是否及格()    ' 先在 A1 写一个分数    Range("A1").Value = 70    ' 用 If 单分支判断是否及格    If Range("A1").Value >= 60 Then        Range("B1").Value = "✓ 及格"        Range("B1").Font.Color = RGB(0, 176, 80)    ' 绿色    Else        Range("B1").Value = "✗ 待加强"        Range("B1").Font.Color = RGB(255, 0, 0)     ' 红色    End If    MsgBox "A1 分数:" & Range("A1").Value & vbCrLf & _           "判定结果:" & Range("B1").Value, vbInformation, "完成"End Sub
  1. 把光标放在代码中,按 F5 运行

结果:A1 显示 70,B1 显示"✓ 及格"(绿色),弹窗提示"判定结果:✓ 及格"。

代码讲解:

  • 这里用了双分支 If:及格和不及格要写不同的字、染不同的颜色
  • >= 60 这个判断条件,70 >= 60 为 True,执行 Then 后面的代码块
  • 颜色用 RGB(0, 176, 80) 是 Excel 的"标准绿",RGB(255, 0, 0) 是纯红

💡 小练习:把 A1 的分数改成 50 再运行一次,会看到 B1 显示"✗ 待加强"(红色)。


案例2:根据分数评定等级(中等)

功能说明:在 A1 写入分数 85,用多分支 If 判断等级(优秀 ≥90 / 良好 8089 / 中等 7079 / 及格 60~69 / 待加强 <60),把等级写入 B1 并上色。

操作步骤:

  1. 在同一模块下方继续粘贴:
' =================================' 案例2:多分支 If 评定等级' =================================Sub 根据分数定等级()    Dim 分数 As Integer    Dim 等级 As String    Dim 颜色 As Long    ' 准备分数    Range("A1").Value = 85    分数 = Range("A1").Value    ' 用多分支 If 判断等级    If 分数 >= 90 Then        等级 = "优秀"        颜色 = RGB(255, 87, 34)        ' 橙色    ElseIf 分数 >= 80 Then        等级 = "良好"        颜色 = RGB(0, 176, 80)         ' 绿色    ElseIf 分数 >= 70 Then        等级 = "中等"        颜色 = RGB(33, 150, 243)       ' 蓝色    ElseIf 分数 >= 60 Then        等级 = "及格"        颜色 = RGB(158, 158, 158)      ' 灰色    Else        等级 = "待加强"        颜色 = RGB(255, 0, 0)          ' 红色    End If    ' 把结果写入 B1    Range("B1").Value = 等级    Range("B1").Font.Color = 颜色    Range("B1").Font.Bold = True    Range("B1").Font.Size = 14    ' 美化单元格    Range("B1").Interior.Color = RGB(255, 255, 200)   ' 浅黄背景    Range("B1").HorizontalAlignment = xlCenter    Range("A1:B1").EntireColumn.AutoFit    MsgBox "分数 " & 分数 & " 分 → 等级:" & 等级, vbInformation, "评定完成"End Sub
  1. 按 F5 运行

结果:A1 显示 85,B1 显示绿色加粗"良好",浅黄底+居中,弹窗提示"85 分 → 良好"。

代码讲解:

  • 这里用了 4 个 ElseIf 加 1 个 Else,把情况分得清清楚楚
  • 条件顺序很关键:≥90 必须放在最前,≥80 放在第二。如果颠倒,85 分也会被判到"优秀"分支(因为 85 >= 80 也成立)
  • 这种"区间判断"模式以后工作里天天用:评定绩效、判定等级、计算提成……全都可以套这个结构
  • 用变量 等级 和 颜色 中转,最后统一写入单元格,代码更整洁易读

💡 小练习:把分数改成 95、72、58 各运行一次,看看 B1 分别显示什么。


案例3:批量标记异常数据(实用)

功能说明:在 A1 到 A10 写一组销售数据,B1 到 B10 写对应目标(500)。用 For 循环逐行判断:每行 A 列实际值若低于目标值 80%,就在 C 列写"⚠ 异常"标红;否则写"✓ 正常"标绿。这是日常数据质检的高频小工具。

注:循环还没学到,这里先用最简形式 For i = 1 To 10 跑一遍,第8篇会专门讲。

操作步骤:

  1. 打开一个新工作表,在 VBA 编辑器粘贴:
' =================================' 案例3:批量标记异常数据' =================================Sub 批量标记异常数据()    Dim i As Integer    Dim 实际值 As Double    Dim 目标值 As Double    ' 第一步:写入示例数据(A列实际销售,B列目标)    Range("A1").Value = "实际销售"    Range("B1").Value = "目标"    Range("C1").Value = "状态"    Range("A2").Value = 520    Range("A3").Value = 380    Range("A4").Value = 450    Range("A5").Value = 610    Range("A6").Value = 290    Range("A7").Value = 555    Range("A8").Value = 470    Range("A9").Value = 100    Range("A10").Value = 600    Range("B2:B10").Value = 500    ' 目标值都是 500    ' 第二步:逐行判断并标记    For i = 2 To 10        实际值 = Range("A" & i).Value        目标值 = Range("B" & i).Value        ' 用 If 双分支判断是否达到目标的 80%        If 实际值 < 目标值 * 0.8 Then            Range("C" & i).Value = "⚠ 异常"            Range("C" & i).Font.Color = RGB(255, 0, 0)        ' 红色字体            Range("C" & i).Font.Bold = True            Range("A" & i).Interior.Color = RGB(255, 235, 235) ' 浅红背景        Else            Range("C" & i).Value = "✓ 正常"            Range("C" & i).Font.Color = RGB(0, 150, 0)        ' 绿色字体        End If    Next i    ' 第三步:美化表头    With Range("A1:C1")        .Font.Bold = True        .Font.Color = RGB(255, 255, 255)        .Interior.Color = RGB(0, 112, 192)        .HorizontalAlignment = xlCenter    End With    Range("A1:C10").EntireColumn.AutoFit    MsgBox "质检完成!低于目标 80% 的数据已被标红异常" & vbCrLf & _           "查看 C 列即可快速识别问题行", vbInformation, "完成"End Sub
  1. 按 F5 运行

结果:A列显示10组销售数据,B列都是目标500,C列用"⚠ 异常"标红了 A3(380)、A6(290)、A9(100)三行——这三行的 A 列单元格还自动填充了浅红色背景。其余7行 C 列写"✓ 正常"绿色字体。

代码讲解:

  • 循环里套 If 是最常见的代码组合:先把循环走一遍(第8篇细讲),每个格子再做一次判断
  • "A" & i 是把字母 A 和数字 i 拼起来变成单元格地址:i=2 时是 "A2",i=3 时是 "A3"——这是单元格的"动态写法"
  • 实际值 < 目标值 * 0.8 这个判断,相当于"达成率低于 80% 就报警",可以直接改成其他阈值:0.9、1.0
  • 这套"循环 + 判断"模式适用于所有批量数据筛查场景:成绩合格率、库存预警、对账差异……思路完全一样

本篇小结

  1. 单分支:If 条件 Then ... End If,满足才执行,不满足跳过
  2. 双分支:If 条件 Then ... Else ... End If,二选一
  3. 多分支:If 条件1 Then ... ElseIf 条件2 Then ... Else ... End If,多选一
  4. 比较运算符:=、<>、>、<、>=、<=
  5. 写 If 必须成对:If 和 End If 一一对应,缩进对齐更清晰
  6. 小心 ElseIf:中间不能加空格,写成 Else If 就会出错
  7. 条件顺序:"区间判断"要从大到小(≥90 在前,≥80 在后),不然会判错分支

今天只需要记住一件事:

If = 让代码"拐弯"。满足条件走一条路,不满足走另一条路。


下一篇内容预告

第8篇:循环 For 语句——让代码重复干活不嫌累

  • 学会 For...Next 基础循环
  • 学会用 Step 控制步长(每次加几)
  • 学会 Exit For 提前退出循环
  • 下一篇开始,代码将替你"批量干活",100 行、1000 行数据全自动处理!

小贴士:写 If 时记得先写完整结构(If...Then...End If),再在中间填条件。这样能避免漏写 End If 导致代码变红报错。

相关学习资料