VBA 语法基础:变量、循环、条件

学会声明变量、做条件判断、写循环,就能写出 80% 的 VBA 宏。这三块是 VBA 语法的核心,本文逐一讲清。

1. 变量声明:Dim

Dim 声明变量并指定类型。常用类型:Integer(整数)、Long(大整数)、Double(小数)、String(文本)、Boolean(是/否)、Worksheet(对象)。

vba
Sub 变量演示() Dim 产品名 As String Dim 数量 As Integer Dim 小计 As Double 产品名 = "笔记本" 数量 = 10 小计 = 数量 * 12.5 MsgBox 产品名 & " 共 " & 数量 & " 件,小计 " & 小计 End Sub

强烈建议在模块顶部加 Option Explicit——它强制每个变量先声明再用,能避免拼错变量名导致的诡异 bug。

2. 条件判断:If 与 Select Case

vba
If 分数 >= 90 Then MsgBox "优秀" ElseIf 分数 >= 60 Then MsgBox "及格" Else MsgBox "不及格" End If

分支很多时 Select Case 更易读,Case 后可列多个值或用 Case 1 To 10 表示范围:

vba
Select CaseCase 1, 2, 3 MsgBox "第一季度" Case 4, 5, 6 MsgBox "第二季度" Case Else MsgBox "下半年" End Select

3. 循环: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 Loop

4. 三种循环对比

循环 适用场景 关键特征
For...Next 已知次数 用计数器
For Each 遍历集合 不用管索引
Do While 条件驱动 灵活但易死循环

5. 循环里提前退出

Exit For 跳出 For,Exit Do 跳出 Do,Exit Sub 结束整个宏。找到目标就停,不用白跑:

vba
For 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 格式化工具一键规范。