Excel VBA 代码基础
657 字约 2 分钟
2026-05-20
本页定位
这一章用于建立 VBA 自动化的基础能力。VBA 适合把重复、规则明确、手工容易出错的 Excel 操作写成按钮或宏。
1. 什么时候用 VBA
适合使用 VBA 的场景:
- 每天重复清洗同格式报表。
- 批量拆分、合并、导出工作簿。
- 自动刷新透视表并生成日报。
- 批量设置格式、冻结窗格、保护工作表。
- 给业务同事做一键操作工具。
不适合用 VBA 的场景:
- 数据量非常大,超过 Excel 承载能力。
- 逻辑更适合 SQL、Power Query 或 Python。
- 多人在线协作且宏安全策略严格。
2. VBA 对象模型
常见对象层级:
Application
Workbooks
Workbook
Worksheets
Worksheet
Range / Cells常见对象:
| 对象 | 含义 |
|---|---|
Application | Excel 应用程序 |
Workbook | 一个工作簿 |
Worksheet | 一个工作表 |
Range | 一个单元格区域 |
Cells | 按行列编号引用单元格 |
3. 第一个宏
Sub HelloExcel()
MsgBox "Hello, Excel"
End Sub宏以 Sub 开始,以 End Sub 结束。MsgBox 用于弹出提示。
4. 单元格读写
Sub WriteValue()
Worksheets("Sheet1").Range("A1").Value = "销售额"
Worksheets("Sheet1").Cells(2, 1).Value = 100
End Sub推荐写清工作表对象,避免代码依赖当前选中的工作表。
5. 变量和数据类型
Sub VariableDemo()
Dim amount As Double
Dim customerName As String
Dim orderCount As Long
amount = 1280.5
customerName = "Kai"
orderCount = 12
End Sub常用类型:
| 类型 | 用途 |
|---|---|
String | 文本 |
Long | 整数 |
Double | 小数 |
Date | 日期 |
Boolean | True / False |
Variant | 任意类型,不建议滥用 |
6. 条件判断
Sub CheckTarget()
Dim sales As Double
sales = Range("B2").Value
If sales >= 100000 Then
Range("C2").Value = "达标"
Else
Range("C2").Value = "未达标"
End If
End Sub多条件:
If sales >= 100000 And Range("D2").Value >= 0.3 Then
Range("E2").Value = "高质量达标"
End If7. 循环
For 循环
Sub FillMonth()
Dim i As Long
For i = 2 To 13
Cells(i, 1).Value = i - 1
Next i
End Sub遍历明细表
Sub MarkHighValueOrders()
Dim lastRow As Long
Dim i As Long
lastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To lastRow
If Cells(i, "D").Value >= 1000 Then
Cells(i, "E").Value = "高价值订单"
End If
Next i
End Sub8. 常用基础宏
清空指定区域
Sub ClearData()
Worksheets("Clean").Range("A2:Z100000").ClearContents
End Sub自动调整列宽
Sub AutoFitColumns()
ActiveSheet.UsedRange.Columns.AutoFit
End Sub刷新所有数据透视表
Sub RefreshAllPivotTables()
ThisWorkbook.RefreshAll
MsgBox "刷新完成"
End Sub9. 基础代码习惯
- 在模块顶部写
Option Explicit,强制声明变量。 - 不依赖
Select和Activate。 - 工作簿、工作表、区域都尽量写清楚。
- 修改数据前先备份或确认范围。
- 每个宏只做一类清晰的事情。