Visual Basic (VB) If-Else-If 语句详解
在 Visual Basic 中,If-Else-If 语句或条件可用于定义多个条件并根据我们的要求仅执行匹配的条件。 通常,当我们有一个条件来验证和执行所需的语句块时,Visual Basic 的 if 语句或 if-else 语句很有用。如果我们有多个条件来验证和执行一个代码块,那么 If-Else-If 语句在我们的应用程序中很有用。
If...ElseIf 的作用
当条件超过 2 个时,用 ElseIf 比多层嵌套 If...Else 更清晰易读。
语法:
If 条件1 Then
' 条件1 为真
ElseIf 条件2 Then
' 条件2 为真
[ElseIf 条件3 Then]
' ...
[Else
' 所有条件都不满足]
End If
Visual Basic If-Else-If 语句流程图
下面是流程图,表示 Visual Basic 编程语言中 If-Else-If 语句的流程。

示例:成绩等级多分支
Dim score As Integer = 83
Dim grade As String
If score >= 90 Then
grade = "A"
ElseIf score >= 80 Then
grade = "B"
ElseIf score >= 70 Then
grade = "C"
ElseIf score >= 60 Then
grade = "D"
Else
grade = "E"
End If
Console.WriteLine($"等级:{grade}") ' 等级:B
注意事项
- 顺序必须从「高」到「低」,否则逻辑会被提前拦截
- Else 可选,但建议保留,处理「剩余所有情况」
- 条件表达式必须返回 Boolean,不能写
If score Then…(VB 16 已禁止隐式转换)
与 AndAlso / OrElse 组合(推荐)
Dim score As Integer = 75
Dim absence As Integer = 1
If score >= 90 Then
Console.WriteLine("优秀")
ElseIf score >= 80 AndAlso absence <= 2 Then
Console.WriteLine("良好(无缺课)")
ElseIf score >= 70 AndAlso absence <= 2 Then
Console.WriteLine("中等(无缺课)")
Else
Console.WriteLine("需补考或缺课过多")
End If
用
AndAlso短路,避免后面计算报错
对比:If...ElseIf vs 嵌套 If
| 写法 | 可读性 | 官方建议 |
|---|---|---|
| If...ElseIf | 高 | 条件 > 2 个时首选 |
| 嵌套 If...Else | 低 | <= 2 层,或需要复杂逻辑时再考虑 |
嵌套示例(不推荐超过 2 层):
If score >= 60 Then
If absence <= 2 Then
Console.WriteLine("可考试")
Else
Console.WriteLine("缺课过多")
End If
Else
Console.WriteLine("不及格")
End If
If 三元嵌套(仅作对比)
两层以内简洁,三层以上可读性下降:
Dim level As String = If(score >= 90, "A",
If(score >= 80, "B",
If(score >= 70, "C",
If(score >= 60, "D", "E"))))
建议:赋值/返回场景再用三元,多语句仍用 If...ElseIf
实战:个人所得税阶梯(2025 税率)
规则:
- ≤5000 免
- 5001-8000 部分 3%
- 8001-12000 部分 10%
-
12000 部分 20%
Imports System ' 避免 CDec 报错
Module PersonalTax2025
Sub Main()
' 最新起征点 5000 元 / 月(2025 政策仍延续)
Const THRESHOLD As Decimal = 5000D
' 2025 年综合所得税率表(月度简化版)
' 月应纳税所得额 | 税率 | 速算扣除数
' ≤5000 0% 0
' 5001-8000 3% 0
' 8001-12000 10% 210
' 12001-25000 20% 1410
' 25001-35000 25% 2660
' 35001-55000 30% 4410
' 55001-80000 35% 7160
' >80000 45% 15160
Console.Write("请输入月应纳税所得额(已减 5000 起征点):")
Dim taxable As Decimal = Decimal.Parse(Console.ReadLine())
Dim tax As Decimal
If taxable <= 0 Then
tax = 0
ElseIf taxable <= 3000 Then ' 5000-8000 段
tax = taxable * 0.03D
ElseIf taxable <= 12000 Then ' 8001-17000 段
tax = taxable * 0.1D - 210D
ElseIf taxable <= 25000 Then ' 17001-30000 段
tax = taxable * 0.2D - 1410D
ElseIf taxable <= 35000 Then ' 30001-40000 段
tax = taxable * 0.25D - 2660D
ElseIf taxable <= 55000 Then ' 40001-60000 段
tax = taxable * 0.3D - 4410D
ElseIf taxable <= 80000 Then ' 60001-85000 段
tax = taxable * 0.35D - 7160D
Else
tax = taxable * 0.45D - 15160D
End If
Console.WriteLine($"月度个人所得税:{tax:C}")
Console.ReadKey()
End Sub
End Module
运行示例:
请输入月应纳税所得额(已减 5000 起征点):2500
月度个人所得税:¥75.00
VS2026 常见报错信息
| 错误代码 | 提示文本 | 原因 |
|---|---|---|
BC30035 |
语法错误,ElseIf 后缺少 Then |
复制网页时全角空格 / 中文括号混用 |
BC30451 |
未声明元素 CDec |
项目以 Option Strict On 创建,未导入 System |
BC30201 |
表达式应为 Boolean |
条件里用了 = 全角符号 |
常见坑速查(VS2026 新编译器更严格)
| 坑点 | 正确写法 | 错误示例 |
|---|---|---|
| 全角符号 | <= |
<= |
| 中文括号 | (taxable * 0.1D - 210D) |
(taxable * 0.1D - 210D) |
| 未导入 System | 代码顶部加 Imports System |
直接使用 CDec 报错 |
| Option Strict On | 小数常量加 D / Decimal.Parse |
Dim tax = 0 导致类型推断失败 |
注意:VS2026 默认 Option Strict On + Option Explicit On,必须显式导入、显式类型转换
最佳实践
- 条件顺序:从高优先级写到低优先级
- Else 必须处理「剩余全部」,避免漏分支
- 复杂条件抽成函数,主流程保持简洁
- 注释写「为什么」而不是「是什么」
- >3 个分支且为离散值时,考虑
Select Case
9. 小结口诀
If...ElseIf 像楼梯,
从高到低依次去;
Else 兜底别忘记,
复杂条件抽方法!