各位表亲好,我是你们的老朋友——既会修Excel表格,又会用VBA给表格“开光”的小牛牛。
今天咱们聊点实在的:如何让Excel学会“思考”。
你可能会问:“Excel还能思考?它不是个铁憨憨吗?”
没错,Excel本身是个老实人,你让它算啥它就算啥。但加上VBA的条件结构,它就能变成“看人下菜碟”的机灵鬼——根据不同情况,做出不同反应。
就像你上班摸鱼时,老板来了你立刻切回工作界面,老板走了你继续刷视频——这就是条件判断的精髓。
一、IF语句:Excel的“灵魂拷问”
IF语句是条件结构里的“扛把子”,写法简单得令人发指:
If 条件 Then
条件成立时做的事
Else
条件不成立时做的事
End If
看,是不是像极了人生选择题?
实战案例:判断员工绩效
假设你是HR,要判断员工绩效是否达标:
Sub 绩效判断()
Dim 销售额 As Double
销售额 = Range("B2").Value
If 销售额 >= 10000 Then
Range("C2").Value = "优秀"
Range("C2").Interior.Color = RGB(0, 255, 0) ' 变绿
Else
Range("C2").Value = "需改进"
Range("C2").Interior.Color = RGB(255, 0, 0) ' 变红
End If
End Sub
![IF语句流程图:如果销售额≥10000则显示“优秀”并变绿,否则显示“需改进”并变红]
运行效果:销售额≥1万,单元格变绿喜气洋洋;否则变红,员工看了立马清醒。
二、多重判断:ElseIf的“套娃艺术”
现实世界不是非黑即白的,所以Excel也得学会“灰度思考”。
If 条件1 Then
方案A
ElseIf 条件2 Then
方案B
ElseIf 条件3 Then
方案C
Else
方案D
End If
实战案例:成绩评级系统
Sub 成绩评级()
Dim 分数 As Integer
分数 = Range("A2").Value
If 分数 >= 90 Then
Range("B2").Value = "S级 · 卷王之王"
ElseIf 分数 >= 80 Then
Range("B2").Value = "A级 · 优秀打工人"
ElseIf 分数 >= 60 Then
Range("B2").Value = "B级 · 勉强保命"
Else
Range("B2").Value = "C级 · 建议重开"
Range("B2").Interior.Color = RGB(255, 0, 0)
End If
End Sub
![成绩评级示例图,展示不同分数对应的评级]
注意:VBA是从上往下依次判断的,碰到第一个满足条件的就执行,然后立刻“跑路”(跳出判断)。所以条件的顺序很重要,别把大范围的放前面把细分的给“截胡”了。
三、Select Case:当IF写多了开始怀疑人生
当你发现IF后面跟了七八个ElseIf,代码长得像老太太的裹脚布时,就该请出Select Case这位优雅的选手了。
Select Case 被判断的对象
Case 值1
干第一件事
Case 值2
干第二件事
Case Else
其他情况
End Select
实战案例:月份季节转换
Sub 判断季节()
Dim 月份 As Integer
月份 = Month(Date) ' 获取当前月份
Select Case 月份
Case 3, 4, 5
MsgBox "春天来了,又到了交配……哦不,又到了万物复苏的季节"
Case 6, 7, 8
MsgBox "夏天到了,空调续命中"
Case 9, 10, 11
MsgBox "秋天来了,贴秋膘的时候到了"
Case 12, 1, 2
MsgBox "冬天来了,床以外都是远方"
Case Else
MsgBox "地球上有这个月份???"
End Select
End Sub
Select Case还能玩更花哨的:
Select Case 分数
Case Is >= 90 ' 使用Is关键词
......
Case 60 To 89 ' 使用范围
......
Case Else
......
End Select
四、逻辑运算符:让条件变得“心机”
有时候一个条件不够用,咱们得让Excel学会“既要……又要……”或者“要么……要么……”
实战案例:优秀员工筛选机
Sub 优秀员工()
Dim 销售额 As Double, 出勤率 As Double
销售额 = Range("B2").Value
出勤率 = Range("C2").Value
If 销售额 >= 10000 And 出勤率 >= 95 Then
Range("D2").Value = "🏆 优秀员工,奖金翻倍"
ElseIf 销售额 >= 10000 Or 出勤率 >= 95 Then
Range("D2").Value = "👍 良好员工,再接再厉"
Else
Range("D2").Value = "😭 待改进,主管找你谈话"
End If
End Sub
![逻辑运算符示意图,展示And/Or的真值表]
五、嵌套条件:代码里的“俄罗斯套娃”
条件里面套条件,就像你妈说“如果你考了100分,而且你要是把作业写完了,那就可以玩手机”——层层嵌套。
If 条件1 Then
If 条件2 Then
双重满足,牛逼坏了
Else
只满足外层,差口气
End If
Else
外层都不满足,洗洗睡吧
End If
实战案例:贷款审批模拟器
Sub 贷款审批()
Dim 月收入 As Double, 征信分 As Integer
月收入 = Range("B2").Value
征信分 = Range("C2").Value
If 月收入 >= 8000 Then
If 征信分 >= 600 Then
Range("D2").Value = "审批通过,额度20万"
Else
Range("D2").Value = "收入达标但征信不足,建议养征信3个月"
End If
Else
If 征信分 >= 700 Then
Range("D2").Value = "收入不足但征信优秀,可尝试小额贷款"
Else
Range("D2").Value = "审批不通过,搬砖攒钱吧"
End If
End If
End Sub
友情提示:嵌套层数建议别超过3层,否则代码读起来像在解谜,一个月后你自己都看不懂。
六、常见翻车现场(千万别学)
🚫 翻车1:等号写一个,判断变赋值
' 错误示范
If 年龄 = 18 Then ' 正确是“=”
MsgBox "成年了"
End If
' 初学者易犯错误:
If 年龄 = 18 Then ' 等等,这其实是对的!
等等,我是不是把你说晕了?VBA里判断用=,赋值也用=,确实容易混淆。但记住:写在If后面的是判断,写在变量后面的是赋值。
🚫 翻车2:忘记End If
If 条件 Then
干点啥
' 忘了End If → 代码直接报错,VBA当场罢工
🚫 翻车3:And/Or逻辑混乱
' 想表达“年龄在18-30岁之间”
If 年龄 >= 18 And 年龄 <= 30 Then ' 正确
If 年龄 >= 18 And <= 30 Then ' 错误!VBA不认这种写法
七、终极实战:一键给表格“开光”
最后,咱们来个能直接拿去用的“王炸”代码——自动标记逾期账款:
Sub 逾期标记()
Dim 最后一行 As Long
Dim i As Long
Dim 截止日期 As Date
截止日期 = Date ' 以今天为截止日
最后一行 = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To 最后一行 ' 从第2行开始,假设第1行是表头
If Cells(i, "C").Value < 截止日期 And Cells(i, "D").Value = "未付" Then
' 逾期未付,整行标红
Rows(i).Interior.Color = RGB(255, 200, 200)
Cells(i, "E").Value = "⚠️ 逾期!立即催收"
ElseIf Cells(i, "C").Value < 截止日期 And Cells(i, "D").Value = "已付" Then
' 逾期但已付,标黄提醒
Rows(i).Interior.Color = RGB(255, 255, 200)
Cells(i, "E").Value = "已逾期但已付,注意"
Else
' 正常账款,保持原样
Cells(i, "E").Value = "正常"
End If
Next i
MsgBox "标记完成!共处理" & (最后一行 - 1) & "条记录"
End Sub
![代码运行效果图:逾期未付的行显示红色背景,逾期已付显示黄色背景]
写在最后
条件结构说白了就是让Excel学会“看情况办事”。掌握了这些,你的Excel就不再是个只会机械计算的工具,而是能自主决策的智能助手。
从IF到Select Case,从单一条件到复杂嵌套,每一层都是在给你的Excel“装脑子”。