Excel中经常会遇到重复操作,例如逐行判断数据、批量填写内容、调整格式或者生成报表。如果这些步骤具有固定规律,就可以考虑使用VBA把操作写成宏。
VBA全称Visual Basic for Applications,是Microsoft Office使用的编程语言。在Excel中,VBA代码主要操作Workbook、Worksheet、Range等对象,因此学习重点不仅是编程语法,还要理解Excel中的工作簿、工作表和单元格如何用代码表示。

VBA代码从Sub开始
在Excel中按Alt+F11可以打开VBA编辑器。插入一个模块后,就可以编写宏。
Sub HelloExcel() MsgBox "Hello Excel" End Sub
Sub表示一个可以执行的过程,End Sub表示结束。例如把文字写入A1:
Sub WriteTitle()
Range("A1").Value = "销售报表"
End Sub实际编写时,建议在模块顶部加入:
Option Explicit
这样变量必须先声明再使用,可以减少变量名称拼写错误。
变量和常见数据类型
VBA使用Dim声明变量:
Dim name As String Dim rowNum As Long Dim amount As Double Dim isDone As Boolean
| 类型 | 用途 |
|---|---|
| String | 文本 |
| Long | 整数、行号 |
| Double | 小数和金额 |
| Boolean | True或False |
| Date | 日期和时间 |
| Variant | 保存多种类型的数据 |
例如读取单元格并进行计算:
Dim price As Double
Dim quantity As Long
price = Range("A2").Value
quantity = Range("B2").Value
Range("C2").Value = price * quantityRange和Cells怎么用
Range适合直接使用Excel地址:
Range("A1").Value = "姓名"
Range("A1:C10").ClearContentsCells则使用行号和列号:
Cells(1, 1).Value = "姓名" Cells(2, 3).Value = 100
Cells(2, 3)表示第2行、第3列,也就是C2。由于行号可以使用变量,批量处理数据时经常使用Cells。
正式代码最好明确指定工作表:
Worksheets("Sheet1").Range("A1").Value = 100也可以把工作表保存到对象变量:
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
ws.Range("A1").Value = 100Workbook、Worksheet、Range等对象赋给变量时,需要使用Set。
If用于条件判断
例如根据A2中的成绩判断是否及格:
If Range("A2").Value >= 60 Then
Range("B2").Value = "及格"
Else
Range("B2").Value = "不及格"
End If多个条件可以使用ElseIf:
If score >= 90 Then result = "优秀" ElseIf score >= 60 Then result = "及格" Else result = "不及格" End If
常用比较符号包括=、<>、>、<、>=和<=,多个条件之间可以使用And或Or。
For循环适合批量处理
VBA处理Excel数据时,循环非常常用。例如检查A2到A100中的销售额:
Dim i As Long For i = 2 To 100 If Cells(i, 1).Value >= 10000 Then Cells(i, 2).Value = "达标" Else Cells(i, 2).Value = "未达标" End If Next i
如果只是遍历一个区域中的单元格,可以使用For Each:
Dim cell As Range
For Each cell In Range("A2:A100")
If cell.Value = "" Then
cell.Value = "未填写"
End If
Next cell数据行数不固定时,还可以根据最后一行动态循环:
Dim lastRow As Long lastRow = Cells(Rows.Count, 1).End(xlUp).Row For i = 2 To lastRow Cells(i, 2).Value = "已处理" Next i
Sub和Function的区别
Sub通常负责执行操作,例如修改单元格、整理数据:
Sub ClearData()
Range("A2:D100").ClearContents
End SubFunction则会返回结果,可以编写自定义Excel函数:
Function AddTax(price As Double) As Double AddTax = price * 1.13 End Function
保存后可以在工作表中使用:
=AddTax(A2)
一段常见的完整VBA代码
下面这段代码读取A列销售额,并把判断结果写入B列:
Option Explicit
Sub CheckSales()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Set ws = Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 1).Value >= 10000 Then
ws.Cells(i, 2).Value = "达标"
Else
ws.Cells(i, 2).Value = "未达标"
End If
Next i
MsgBox "处理完成"
End Sub这段代码已经包含日常Excel自动化最常见的几个部分:工作表对象、变量、读取单元格、条件判断和循环。掌握这些内容后,就可以在实际表格中逐渐加入复制、筛选、格式设置和数据汇总等操作。
poxiaoxi博客
精彩评论