跳至主要内容

VBA Excel:如何入门并让您的工作更轻松

学习如何在 Excel 中高效使用 VBA,通过实用示例和最佳实践来自动化任务、创建宏并提升数据处理技能。
· 10分钟 阅读

使用 AI 探索

Excel 中的 Visual Basic for Applications(VBA)是一种语言,允许用户自动化重复性任务,并将 Excel 的功能大幅扩展到标准特性之外。因此,无论您是想提升效率的初学者,还是希望简化复杂工作流程的高级用户,VBA 都能让一切变得更轻松。

在本指南中,我将讲解 VBA 的基础与进阶概念。不过,如果您是 Excel 新手,建议先从Excel Fundamentals入门,打下扎实基础后再学习 VBA。

Excel 中的 VBA 是什么?

Visual Basic for Applications(VBA)是一种用于自动化任务并增强 Microsoft Office 应用功能的编程语言。您可以在 Excel、Word、Access 以及其他 Office 程序中使用它,不过它可能最广泛的用途是在 Excel 中创建自定义宏,我们将在下文进行介绍。

我第一次使用 VBA,是为了自动化一份每周报告;这份报告过去需要花上数小时手工整理。只用几行代码,我就把流程缩减为一次按钮点击,节省了大量时间。从那时起,我就知道花时间掌握它会在生产力上获得巨大的回报。

重要的 VBA Excel 术语

在使用 VBA 之前,您需要理解其关键术语与概念。以下是开始在 Excel 中自动化任务、构建自定义解决方案时最常遇到的一些术语。

  • 模块(Modules)是存放 VBA 代码的容器,其中保存过程与函数。

  • 对象(Objects)是 VBA 的构建块,代表工作簿、工作表、单元格等元素。

  • 过程(Procedures) 是执行特定任务的代码块,通常分为子过程或函数。

  • 语句(Statements)是过程中的指令,告诉 Excel(或 Word、Access)要执行哪些操作。

  • 变量(Variables)用于存储数据,以便在代码中使用和操作。

  • 逻辑运算符(Logical operators)比较值并基于结果作出判断,包括And、Or和Not 等。

在 Excel 中开始使用 VBA

开始使用 VBA,您需要进入 VBA 编辑器。在那里您将编写和编辑 VBA 代码。我们来看看如何进入:

启用“开发工具”选项卡 

第一步是启用常常在功能区上被隐藏的开发工具选项卡。具体操作:

  • 在功能区任意位置单击右键。

Ribbon in Excel

Excel 中的功能区。图片来源:作者。

  • 选择自定义功能区...选项。

customizing the ribbon in Excel

自定义功能区以启用“开发工具”选项卡。图片来源:作者。

  • 会出现一个对话框。勾选开发工具选项,然后点击确定(OK)。

Selecting the Developer Option from a dialog box and hit OK in Excel

选择“开发工具”选项。图片来源:作者。

现在,您可以在功能区顶部看到一个开发工具选项卡。

Developer tab in Excel

功能区上已启用“开发工具”选项卡。图片来源:作者。

打开 VBA 编辑器 

启用开发工具选项卡后,您就可以进入 VBA 编辑器。单击开发工具选项卡,选择Visual Basic。您也可以使用快捷键ALT + F11直接打开 VBA 编辑器。

Interface of VBA editor in Excel

VBA 编辑器。图片来源:作者。

浏览 VBA 界面 

VBA 编辑器起初可能看起来有些吓人,但它很容易上手。我们来了解几个关键区域:

  • 代码窗格(Code Pane)用于编写和编辑 VBA 代码。
  • 工程资源管理器(Project Explorer)以层级视图显示工作簿中的项目与模块。
  • 属性窗口(Properties Window)显示所选对象的属性以供自定义设置。

Interface of VBA in Excel

Excel 中的 VBA 界面。图片来源:作者。

在 Excel 中编写 VBA 代码

现在您已熟悉 VBA 编辑器,是时候开始写一些代码了。VBA 代码由不同部分组成,例如子过程和函数。这些是告诉 Excel 应该做什么的指令集。如果您从未编程过,也不用担心——我会一步一步来。

编写 VBA 子过程

在编写宏之前,您需要创建一个宏环境。请按以下步骤操作:

  • 在 VBA 编辑器中,选择Insert > Module。系统会以默认名称Module1创建一个新模块。

Insert a new module in VBA

在 Insert 选项卡下选择 Module。图片来源:作者。

  • 您可以在属性(Properties)窗格中更改模块名称。

Rename the newly created module in VBA in Excel

重命名 VBA 模块。图片来源:作者。

现在您已经会为创建宏搭建环境了,我们来一起创建第一个用于显示消息的宏。默认情况下,创建模块时会打开代码窗口。如果您的界面没有打开,请右键单击您创建的模块并点击查看代码(View Code)。 代码窗口将出现,您可以在其中编写宏。

这里,我要创建一个显示消息 Hello, World! 的宏。为此,我在代码窗格中写入以下代码:

Sub ShowMessage()
    MsgBox "Hello, World!"
End Sub 

说明:

  • Sub 是子过程的关键字,即执行特定任务的代码块。在 VBA 中,子过程不返回值。

  • ShowMessage 是子过程的名称。您可以按喜好命名,但需遵循 VBA 命名规范(如:不能有空格、不能以数字开头)。

  • () 用于定义子过程的参数。此任务无需参数,因此括号为空。

  • MsgBox 是内置 VBA 函数,用于在屏幕上显示一个消息框。

  • End Sub 语句表示子过程的结束。介于Sub 与End Sub 之间的是调用该子过程时将要运行的代码。

  • 在 VBA 中,文本字符串要用双引号括起来。此处我们希望字符串Hello, World! 显示在消息框中。

Writing a VBA macro in a code pane in Excel

编写宏。图片来源:作者。

  • 现在是运行代码的时候了。使用快捷键F5。如果您想手动操作,前往开发工具选项卡并选择宏(Macros)。点击运行(Run)。

Select the Macros option under the developer tab and run the Macro in Excel

在“开发工具”选项卡下选择“宏”。图片来源:作者。

您现在可以在 Excel 工作表上看到消息框弹出。

message box in Excel

消息框。图片来源:作者。

理解 VBA 中的对象 

在 VBA 中,通过对象您可以控制 Excel 中的不同元素并自动化任务,以实现更高效的工作流。关键对象有三个:Workbook、Worksheet 和Range。我们用实际示例来理解每一个。

其中,Workbook 对象表示任何当前打开的 Excel 文件。它允许我们执行诸如添加新工作表或保存工作簿中现有工作表等操作。在此示例中,我想在当前打开的工作簿中新增一个工作表,然后保存它。起初我有 Sheet1。要添加另一个工作表,我编写如下代码:

Sub AddSheetAndSaveWorkbook()
    ' Adds a new worksheet to the active workbook
   ActiveWorkbook.Sheets.Add
    
    ' Saves the workbook
    ActiveWorkbook.Save
End Sub

这段代码与前面的代码用法完全一致,不过我在这里添加了注释。注释以 ' 开头,不会影响代码执行。我们添加注释只是为了让代码更清晰、便于自己理解。

您可以看到又创建了一个工作表,名为 Sheet2。

Add and save a new sheet in the existing sheet using VBA in Excel

使用 VBA 在现有工作簿中新增并保存工作表。图片来源:作者。

Worksheet 对象表示 Excel 中当前活动的工作表。通过它,您可以修改或操作活动工作表。比如,我想更改活动工作表的名称。为此,我输入以下代码:

Sub RenameActiveSheet()
    ' Renames the active sheet to "Sales Report".
    ActiveSheet.Name = "Sales Report"
End Sub

Code for changing the name of the worksheet using VBA in Excel

使用 VBA 更改工作表名称。图片来源:作者。

现在,Sheet1 已被重命名为 Sales Report。

Renamed the worksheet using VBA in Excel

使用 VBA 重命名 Excel 工作表。图片来源:作者。

Range 对象指代一组特定的单元格或单个单元格,我们可以按需进行操作。下面的示例中,我选择从 F3 到 I3 的单元格区域并更改其背景颜色。为此,我编写如下代码:

Sub FormatRange()
    ' Selects the range from A1 to C6
    Range("F3:I3"). Select
    
    ' Changes the background color of the selected range to Green
    Selection.Interior.Color = RGB(101, 255, 143)
End Sub

Code for changing the color of the selected range using VBA in Excel

选择区域并用 VBA 更改颜色。图片来源:作者。

您可以看到结果的差异。

Results of changing the color of the selected range using VBA in Excel

在 Excel 中使用 VBA 更改颜色。图片来源:作者。

在 VBA 中创建变量

与其他编程语言类似,VBA 变量主要用于存储两类数据:数字与文本。在 VBA 中使用变量,您必须先按偏好使用相应关键字声明变量,后接变量名与数据类型。

Keyword variableName As DataType

说明:

  • Keyword 可以是 Dim、Static、Public 和 Private。

  • variableName 指此变量所选的名称(不可包含空格)。

  • As 用于声明变量类型。

  • DataType 指变量类型,例如 Integer。

使用变量时,您还需要遵循一些规则:

  • 长度必须少于 255 个字符。
  • 字符之间不允许有空格。
  • 名称不能以数字开头。
  • 名称中不要使用句点。

数值数据类型

VBA 中的数值数据类型用于存储数值。

数据类型占用取值范围
Byte1 Byte存储 0 到 255 的整数
Integer2 Byte存储 -32,768 到 32,767 的整数
Long4 Bytes存储更大的整数,范围为 -2,147,483,648 到 2,147,483,647
Single4 Bytes存储单精度小数
Double8 Bytes存储双精度小数
Currency8 Bytes存储定点小数(货币)
Variant (text)文本长度 + 22 bytes0 到 20 亿个字符

非数值数据类型

VBA 中的非数值数据类型用于存储非数字的值。

数据类型占用取值范围
String字符串长度存储文本
Date8 Bytes存储日期和时间
Boolean2 Bytes存储 True 或 False
Variant16 Bytes可存储任意数据类型,适用于事先不确定类型的场景

使用 VBA Excel 宏自动化任务

宏本质上是用 VBA 创建的一系列指令,用于执行重复性任务。借助宏,您可以记录一系列操作,如设置单元格格式、复制数据或执行计算。保存宏后,我们可以通过一次点击重新应用这些操作。这能显著节省时间,尤其在处理大型数据集或重复性任务时。

例如,如果您经常以相同方式格式化报告,您可以记录一个宏来应用所有必要的格式设置步骤,而无需每次手动操作。之后,您就能运行该宏来格式化新数据。我们展示了几个基础示例,但想象一下,只需一次点击即可完成更多小操作。即使您没有编码经验,也可以自动化日常任务,从而简化工作流程并减少手工重复操作可能带来的错误。

录制 Excel 宏 

我们来看看如何录制一个宏来进行一些格式更改:

  • 前往开发工具选项卡 > 记录宏(Record Macro)按钮。
  • 将出现对话框。像我一样给宏起个名字,例如FormatCells。
  • 如有需要可分配快捷键。我分配的是Ctrl+S。
  • 点击确定(OK)开始录制。

开始录制后,执行您希望自动化的操作。在本例中,我正在记录对一个简单表格的一些格式更改。完成后,返回开发工具选项卡并点击停止录制(Stop Recording)按钮。下方您可以看到宏的实际效果。

在 Excel 中使用 VBA 录制宏。动图来源:作者。

现在,如果您在另一张工作表中有另一份数据集,且想应用相同格式,不必再次手动格式化,直接按您设定的快捷键(我的是Ctrl+S)。否则,前往Sheet2 > 开发工具 > 宏 > 运行来手动完成。

使用 Excel 宏。动图来源:作者。

编辑 Excel 宏 

录制宏之后,您还可以微调或自定义其操作。方法如下:

  • 前往开发工具选项卡并点击Visual Basics。
  • VBA 编辑器会出现。现在,在工程资源管理器(Project Explorer)中查找存放您宏的工作簿。
  • 展开Modules 文件夹,然后双击包含您宏的模块。代码窗口将显示您录制的宏的 VBA 代码。

Illustration of code performed when recording a macro in Excel

Excel 中录制宏的代码。图片来源:作者。

每一行代码都对应您在录制期间执行的操作。接下来,您可以修改这些记录的代码,以按需自定义宏。在我的示例中,我将Selection.Font.Bold 设置为False 来取消加粗格式。完成编辑后,点击保存按钮或按Ctrl+S 保存,并运行(Run)代码以应用更改。Customizing the macro in VBA in Excel

自定义 Excel VBA 宏。图片来源:作者。

运行宏后,您可以看到结果——先前加粗的列已不再加粗。

Results of the macro edited manually in VBA Excel

在 Excel 中使用宏。图片来源:作者

编写自定义 Excel 宏 

有些高级任务无法通过录制宏来完成。在这种情况下,您需要从零开始编写宏。比如,我想将数据从一个工作表复制到另一个工作表。以下是我编写自定义宏的方式:

  • 在第一张表中手动打开 VBA 编辑器,或按Alt+F11。
  • 插入一个新模块。
  • 在代码窗格中写入以下代码。
Sub CopyData()
Sheets("Sheet1").Range("B1:E21").Copy Destination:=Sheets("Sheet2").Range("B1")
End Sub
  • 保存该宏并点击运行(Run)。

现在,您可以看到来自Sheet1的数据已经复制到Sheet2。

Step by step guide on writing a custom macro in VBA in Excel

使用 VBA 编写自定义宏。动图来源:作者。

结语 

从自动化重复性任务到创建复杂宏,VBA 为 Excel 打开了无限可能。随着您对基础知识的熟悉,请多练习写代码,并逐步探索 VBA 更高级的功能。请记住,掌握 VBA——或任何编程语言——的关键在于持续练习和勇于尝试。若想进一步提升技能,建议您探索以下资源:Data Analysis in Excel 和 Learn Excel 课程非常适合深入了解 Excel 的各项功能。

如果您想将编程知识拓展到 VBA 之外,How to Become a Programmer in 2024 guide 提供了清晰的路线图,感兴趣的话不妨一读。此外,Financial Modeling in Excel 课程非常适合对构建详细财务模型感兴趣的读者。

Laiba Siddiqui

作者

Laiba Siddiqui

我是内容策略专家,热衷于将复杂主题化繁为简。我曾帮助 Splunk、Hackernoon 和 Tiiny Host 等公司为其受众打造兼具吸引力与信息量的内容。

常见的 VBA Excel 问题解答

VBA 中 Explicit 语句的作用是什么?

Explicit 语句可确保在使用前显式声明所有变量,从而减少漏洞并提升代码的可维护性。

如何为我的 VBA 代码设置密码保护?

您可以通过前往VBA 编辑器 > Tools > VBAProject Properties > Protection 标签,勾选Lock project for viewing选项并设置密码,来保护您的 VBA 代码。

VBA 中 ActiveWorkbook 与 ThisWorkbook 有何区别?

ActiveWorkbook 指当前获得焦点的工作簿,可能并不包含 VBA 代码;而 Thisworkbook 指存放 VBA 代码的工作簿,不受当前活动工作簿的影响。

VBA 中的 UserForms 是什么,有哪些用途?

UserForms 是 VBA 中的自定义对话框,允许用户输入数据。它们可用于创建用于数据录入、选择或需要自定义界面的交互式表单。

主题