VBA 语法基础:变量、循环、条件
学会声明变量、做条件判断、写循环,就能写出 80% 的 VBA 宏。这三块是 VBA 语法的核心,本文逐一讲清。
1. 变量声明:Dim
用 Dim 声明变量并指定类型。常用类型:Integer(整数)、Long(大整数)、Double(小数)、String(文本)、Boolean(是/否)、Worksheet(对象)。
vbaSub 变量演示()
Dim 产品名 As String
Dim 数量 As Integer
Dim 小计 As Double
产品名 = "笔记本"
数量 = 10
小计 = 数量 * 12.5
MsgBox 产品名 & " 共 " & 数量 & " 件,小计 " & 小计
End Sub强烈建议在模块顶部加 Option Explicit——它强制每个变量先声明再用,能避免拼错变量名导致的诡异 bug。
2. 条件判断:If 与 Select Case
vbaIf 分数 >= 90 Then
MsgBox "优秀"
ElseIf 分数 >= 60 Then
MsgBox "及格"
Else
MsgBox "不及格"
End If分支很多时 Select Case 更易读,Case 后可列多个值或用 Case 1 To 10 表示范围:
vbaSelect Case 月
Case 1, 2, 3
MsgBox "第一季度"
Case 4, 5, 6
MsgBox "第二季度"
Case Else
MsgBox "下半年"
End Select3. 循环:For、For Each、Do While
vba' For...Next:已知次数,加 Step 控制步长
For i = 1 To 100
总和 = 总和 + i
Next i
' For Each:遍历所有工作表
For Each ws In ThisWorkbook.Worksheets
结果 = 结果 & ws.Name & vbCrLf
Next ws
' Do While:条件驱动(如读到空行停)
行 = 1
Do While Cells(行, 1).Value <> ""
行 = 行 + 1
Loop4. 三种循环对比
| 循环 | 适用场景 | 关键特征 |
|---|---|---|
| For...Next | 已知次数 | 用计数器 |
| For Each | 遍历集合 | 不用管索引 |
| Do While | 条件驱动 | 灵活但易死循环 |
5. 循环里提前退出
Exit For 跳出 For,Exit Do 跳出 Do,Exit Sub 结束整个宏。找到目标就停,不用白跑:
vbaFor i = 2 To 100
If Cells(i, 1).Value = "笔记本" Then
MsgBox "找到了,在第 " & i & " 行"
Exit For
End If
Next i常见问题
- 变量没声明也能用?:默认可以,但埋下拼写隐患。加
Option Explicit强制声明。 - 死循环卡死 Excel:
Do While条件永远为真就死循环,Ctrl + Break可中断。 - For Each 改不了集合内容:它是只读遍历,要删元素得用倒序
For i = count To 1 Step -1。 - Integer 溢出:超过 32767 报错,大数据量用
Long。
方法对比:VBA vs Python 语法
| 语法 | VBA | Python |
|---|---|---|
| 变量 | Dim x As Integer | x = 0(无需声明) |
| 条件 | If...End If | if/elif/else |
| 循环 | For i = 1 To 10 | for i in range(1, 11) |
两者逻辑相通,迁移成本低。
工具承接
写完一段 VBA 想看等价 Python?用在线 VBA 转 Python 工具自动翻译 For/If/Dim。缩进乱了?VBA 格式化工具一键规范。