- 宏可自动执行 Excel 中的重复操作,从而减少错误并节省时间。
- 您可以使用录音机创建它们,并使用 VBA 增强它们以增加灵活性。
- 使用相对引用来适应不同的范围并避免多余的步骤。
- 保存为 .xlsm 并管理安全性以放心运行宏。

如果你发现自己在 Excel 中反复执行相同的任务,宏就是你节省时间的最佳帮手。借助宏,你可以自动执行一系列操作(了解更多关于VBA 编程的知识),从格式设置到数据导入或计算,只需单击或使用键盘快捷键即可随时触发。
创建宏时,Excel 会记录您的点击和按键操作,并忠实地执行它们。之后,您可以调整代码以优化执行,并参考Excel 相关资源。通常的做法是先使用宏录制器,然后用 VBA 进行改进,从而获得更高的控制力、灵活性,并避免因粗心大意而导致的错误。
Excel 中的宏到底是什么?
宏是一系列指令,Excel 会按照预设顺序执行这些指令。它可以像应用百分比样式一样简单,也可以像准备包含数据透视表的报告、设置格式、创建工作表并通过 Outlook 发送电子邮件一样复杂。宏保存在工作簿中,可以随时运行。
您无需具备编程知识即可上手:录制器会将您的操作转换为 VBA 代码。即便如此,掌握一些 VBA 知识仍能让您在 Excel 中创建自定义函数、窗体,甚至是小型应用程序。
为什么要使用宏?真正的优势
宏的主要目的是避免重复性工作并最大限度地减少错误。如果您每月都要准备相同的报告,宏可以帮您省去繁琐的步骤,让您专注于真正重要的事情。
它的优势包括节省时间、执行稳定可靠(不会遗漏步骤),以及创建快捷方式和按钮来加快流程。如果您只是偶尔使用 Excel,可能并不值得;但如果您每天都使用,从第一天起您就会感受到它的不同。
启用“开发人员”选项卡(Windows 和 Mac)
“开发工具”选项卡默认是隐藏的。在 Windows 系统中,右键单击功能区,选择“自定义功能区”。选中“开发工具”,然后单击“确定”。之后,您将在“视图”旁边看到“开发工具”选项卡。
在 Mac 上,依次点击 Excel > 首选项 > 工具栏和功能区。在“主要选项卡”下,选择“开发工具”并保存。这样您就可以访问录制器、VBA 和控件。如果您是 Excel 新手,请先阅读Excel 基础指南,熟悉功能区及其选项。
如何使用录制器创建宏
录制器非常适合入门。在“开发工具”>“录制宏”(Windows 系统下快捷键为 Alt+T+M+R)中,指定一个描述性名称。请记住:名称必须以字母开头,且不包含空格或符号。
选择保存位置:“此工作簿”在大多数情况下都可以。如果您希望它始终可用,请选择“个人宏工作簿”,Excel 会将其创建并保存到Personal.xlsb 文件中,该文件会随 Excel 一起以隐藏方式打开。
您可以选择添加快捷键。为了避免冲突(例如,导致 Ctrl+Z 失效),建议使用 Ctrl+Shift 组合键。您还可以编写简短明了的描述(当您有很多宏时非常有用)。
单击“确定”并执行要录制的操作。例如:选择 A1 单元格并应用“百分比”格式。避免不必要的点击或选择更改,因为录制程序几乎会记录所有操作。
录制完成后,停止录制。要运行宏,请转到“开发工具”>“宏”(或按 Alt+F8),选择您的宏,然后单击“运行”。您会看到 Excel按完全相同的顺序重复这些步骤。
运行、编辑和管理您的宏
在“开发工具”>“宏”(Alt+F8)中,您可以运行、编辑或删除宏。如果选择“编辑”,则会打开 Visual Basic 编辑器,其中包含已录制的代码,您可以对其进行清理和优化(代码中通常包含冗余步骤)。
将宏分配给按钮或形状非常方便:插入形状,右键单击 > 分配宏,选择宏,就完成了。单击形状时,宏将立即运行。
要将其添加到快速访问工具栏,请打开工具栏菜单(向下箭头)> 更多命令 > 在“可用命令”下选择“宏”,添加您的宏,并根据需要更改图标。这样,即使您不在开发者模式下,也能随时使用这个按钮。
如果需要在另一个工作簿中重复使用该宏,可以从 Visual Basic 编辑器复制该模块。打开 VBE(Alt+F11),将模块拖到另一个打开的工作簿中,或者使用导出/导入 .bas 文件。
使用 Visual Basic (VBA) 编辑器在 Excel 中编写宏
要超越录制器,请使用 Alt+F11 打开编辑器。插入模块(插入 > 模块)并创建您的第一个子程序。基本模式为Sub Name() … End Sub。
例如,要显示一条消息并在单元格 A1 中写入一个值,您可以从简单的示例入手。这样,您就可以了解宏的结构,以及如何从 Excel 中调用宏(Alt+F8)或将其分配给按钮,而只需编写很少的代码行:
Sub Primera_Macro()
Range("A1").Value = "Esto de las macros mola."
MsgBox "Hola, querido amigo."
End Sub
另一个将百分比样式应用于当前选区的快速示例。此宏复制了您使用录制器执行的操作,但直接输入:
Sub FormatoPorcentaje()
Selection.Style = "Percent"
End Sub
理想的组合是:先录制代码以加快速度,然后打开 VBE 编辑器清理不必要的步骤,添加变量、条件或循环。这样,你就可以将“字面”录制的代码转化为强大且可重复使用的宏。
绝对引用与相对引用
默认情况下,录制器以绝对模式创建宏:无论运行宏时位于何处,它始终作用于相同的单元格(例如 B3)。如果数据在处理过程中位置发生变化,这可能不符合您的需求。
启用“使用相对引用”后,宏将相对于执行开始时的活动单元格运行。例如,如果您从单元格 B3 开始记录并输入“名字”、“姓氏”等,向右移动,那么当从单元格 C4 运行时,它将相对于单元格 C4、D4、E4 等输入相同的信息。
一个典型的例子:给表格添加标题,标题有时从单元格 B3 开始,有时从单元格 C5 开始。使用绝对模式,标题始终写入单元格 B3。使用相对模式,标题位置会根据选定的起始单元格自动调整。
记录流程时常见的错误
一个常见的误区是,录制公式“拖动”操作时,比如只拖动三行,就以为它能适用于更长的表格。但录制器实际上会记录相当于“向下填充三个单元格”的操作,而不是“填充到表格末尾”的操作。
解决方法是改变你的方法:使用动态范围(例如,检测最后一行)、循环或 CurrentRegion 方法,或者在录制后调整 VBA 中的宏,使其能够缩放到任何大小。
录制时的良好做法
录制之前,先手动演练几次流程,以便完善。尽量录制简短、具体的片段,而不是一次性录制一大段;这样更容易维护和合并。
避免不必要的点击、滚动功能区以及无意义的选择。保持宏名称和描述清晰明了,以便您或任何同事都能立即识别其用途。
以多种方式运行宏
除了“宏”对话框(Alt+F8)之外,您还可以通过形状、快速访问工具栏上的按钮或打开工作簿来启动宏。您甚至可以让 Excel 从其他 Office 应用程序运行宏,从而实现跨应用程序任务的自动化(例如,更新表格并通过 Outlook 发送电子邮件)。
请仔细考虑键盘快捷键:如果您将 Ctrl+Z 分配给某个宏,则在工作簿打开时将无法撤销操作。因此,建议使用Ctrl+Shift组合键以避免冲突。
使用宏保存工作簿
如果文件包含 VBA 代码,请将其保存为 .xlsm 文件,以便保留代码并可运行。保存为 .xlsx 文件会破坏 VBA 项目。如果需要全局宏,请使用个人宏工作簿 (Personal.xlsb)。
安全性和启用宏
宏可能因您的安全设置而被阻止。请检查信任中心,选择性地启用宏,切勿启用来自未知来源的宏。了解您的安全级别有助于您在安全性和工作效率之间取得平衡。
将宏分配给按钮、形状和控件
要使用户能够自动运行宏,请将宏分配给按钮、形状或控件。右键单击对象 > 分配宏 > 选择。您还可以将图标放置在功能区或快速访问工具栏上,并将其链接到宏。
如果您使用窗体或 ActiveX 控件,您可以为其分配宏或事件过程(例如,单击事件)。这有助于创建更友好的用户界面和引导式流程。
有用的宏示例(VBA)
这些示例展示了一些常见任务。您可以将它们粘贴到模块中(Alt+F11 > 插入 > 模块)并进行修改。如果您的组织要求,请务必对工作簿进行签名或调整安全设置,以便您可以无警告地运行它们。
将选定内容复制到同一工作表上的其他位置:选择.复制目标位置
Sub CopiarSeleccion()
If TypeName(Selection) = "Range" Then
Selection.Copy Destination:=Selection.Offset(0, 2)
Else
MsgBox "Selecciona un rango de celdas primero."
End If
End Sub
打印当前工作表:ActiveSheet.PrintOut
Sub ImprimirHojaActual()
ActiveSheet.PrintOut
End Sub
将文件另存为启用宏的工作簿 (.xlsm):ActiveWorkbook.SaveAs
Sub GuardarComoXlsm()
Dim ruta As String
ruta = ThisWorkbook.Path & Application.PathSeparator & "LibroConMacros.xlsm"
ActiveWorkbook.SaveAs Filename:=ruta, FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub
对某个范围应用格式(根据需要调整范围):使用 Range(…)
Sub FormatoRango()
With Range("A1:D10")
.Font.Bold = True
.Interior.Color = RGB(230, 230, 250)
.Borders.LineStyle = xlContinuous
End With
End Sub
在一定范围内查找值并显示第一个匹配项:Range(…).Find
Sub BuscarValor()
Dim celda As Range
Dim valor As String
valor = InputBox("¿Qué valor quieres buscar?")
If valor = "" Then Exit Sub
Set celda = Range("A1:D1000").Find(What:=valor, LookIn:=xlValues, LookAt:=xlPart)
If Not celda Is Nothing Then
MsgBox "Encontrado en: " & celda.Address
celda.Select
Else
MsgBox "No se encontró el valor especificado."
End If
End Sub
实际案例:格式化为百分比
录制:开始录制,命名录制文件,选择保存位置,还可以选择添加快捷键和描述。选中单元格,然后在“开始”选项卡中应用“百分比”样式。停止录制,然后按 Alt+F8 回放录制文件。如果想用最简洁的代码回放,可以在 VBA 中使用 ` Selection.Style = "Percent"`。
提示:录制过程中,请避免不必要的切换单元格。这些来回移动会被记录下来,可能会减慢宏的速度并导致宏损坏。
自动化长任务:小宏更好
如果你的流程包含很多步骤,可以考虑将其拆分成几个较小的宏,然后按顺序调用它们。这样可以简化维护工作,允许你重用代码块,并简化调试过程。
例如,您可以编写一个宏来准备数据,另一个宏来格式化数据,另一个宏来生成打印输出,还有一个宏来导出为 PDF 或通过电子邮件发送。您可以逐个调用它们,也可以一次性全部调用。
编辑并清理记录的代码
录制器会捕获“所有内容”:选择、点击和 Tab 键切换。打开 VBE 时,它会移除不必要的选择(Select/Selection),将其替换为直接引用(例如,Range("A1").Value = ...),并将格式分组到 With/End With 代码块中。
此外,它还添加了变量和基本的错误处理功能。几个 if 语句和简单的检查可以防止在范围为空或选择与预期不符时出现错误。
常见问题
如何在 Excel 中创建用户窗体?打开 Visual Basic 编辑器(Alt+F11),选择“插入”>“用户窗体”,然后添加控件(文本框、按钮等)。您可以使用宏来显示它。
Sub MostrarFormulario()
UserForm1.Show
End Sub
然后,将过程分配给控件的事件(例如,按钮单击),以执行所需的逻辑。
如何使用宏来保护/取消保护工作表?您可以根据需要更改密码,然后使用这些例程。只需单击一下即可激活或停用保护。
Sub ProtegerHoja()
ActiveSheet.Protect Password:="segura", AllowFiltering:=True
End Sub
Sub DesprotegerHoja()
ActiveSheet.Unprotect Password:="segura"
End Sub
如何删除宏?转到“开发工具”>“宏”,选择宏,然后按 Delete 键。如果要删除模块中的所有代码,请打开 VBE(Alt+F11),在项目中找到该模块,右键单击,然后选择“删除模块”(如果要保存,可以先导出)。
最后还有一个实用技巧:如果您需要格式化月度报告,将未结清余额的客户以红色粗体突出显示,请先录制一次该序列,然后调整 VBA 代码以应用于正确的范围(使用最后一行检测或筛选器),并将宏保存到您的个人宏工作簿中。下次,只需一个简单的快捷键或按钮,即可在几秒钟内立即完美地应用格式。