Excel中经常会遇到重复操作,例如逐行判断数据、批量填写内容、调整格式或者生成报表。如果这些步骤具有固定规律,就可以考虑使用VBA把操作写成宏。

VBA全称Visual Basic for Applications,是Microsoft Office使用的编程语言。在Excel中,VBA代码主要操作Workbook、Worksheet、Range等对象,因此学习重点不仅是编程语法,还要理解Excel中的工作簿、工作表和单元格如何用代码表示。

Excel表格中的VBA怎么写?常见语法与基础示例

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小数和金额
BooleanTrue或False
Date日期和时间
Variant保存多种类型的数据

例如读取单元格并进行计算:

Dim price As Double
Dim quantity As Long

price = Range("A2").Value
quantity = Range("B2").Value

Range("C2").Value = price * quantity

Range和Cells怎么用

Range适合直接使用Excel地址:

Range("A1").Value = "姓名"
Range("A1:C10").ClearContents

Cells则使用行号和列号:

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 = 100

Workbook、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

常用比较符号包括=<>><>=<=,多个条件之间可以使用AndOr

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 Sub

Function则会返回结果,可以编写自定义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自动化最常见的几个部分:工作表对象、变量、读取单元格、条件判断和循环。掌握这些内容后,就可以在实际表格中逐渐加入复制、筛选、格式设置和数据汇总等操作。

参考资料

  1. Microsoft Office VBA入门文档

  2. Microsoft Excel Range对象说明

  3. Microsoft Excel Cells属性说明

  4. Microsoft VBA If Then Else语法

  5. Microsoft VBA For Next语法