有关在Excel中编写VBA宏的初学者教程(以及为什么要学习)

Excel宏通过自动执行经常使用的Excel流程可以为您节省大量时间。但是宏实际上是非常有限的。使用录制工具容易出错,并且录制过程很尴尬。

使用VBA创建宏可为您提供更多功能。您可以准确地告诉Excel该做什么和如何做。您还可以访问更多功能。如果您定期使用Excel,则值得学习如何创建VBA宏。

我们将从基础知识开始。

什么是VBA?

VBA是Visual Basic for Applications ,这是一种可以在许多Microsoft应用程序中使用的编程语言。 Visual Basic是一种编程语言,而VBA是其特定于应用程序的版本。 (Microsoft早在2008年就停止了Visual Basic,但是VBA仍然很强大。)

幸运的是,对于非程序员来说,VBA非常简单,您用来编辑它的界面提供了很多帮助。您将使用的许多命令会弹出建议并自动完成,以帮助您快速执行脚本。

不过,VBA还是需要一段时间才能习惯。

优点Excel中的VBA宏

如果VBA比录制宏更困难,为什么要使用它?简短的答案是,您可以充分利用VBA宏。

您无需访问电子表格并记录这些点击,而是可以访问Excel的全部功能。您只需要知道如何使用它们。

一旦您对VBA更加满意,就可以用更少的时间在常规宏中完成所有可能要做的事情。当您告诉Excel 准确该怎么做时,结果也将更加可预测。完全没有歧义。

创建VBA宏后,可以轻松保存和共享该宏,以便其他任何人都可以利用。当您与需要在Excel中执行相同操作的许多人一起工作时,此功能特别有用。

让我们看一个简单的VBA宏以了解其工作原理。

让我们看一个简单的宏。我们的电子表格包含员工姓名,员工工作的商店编号以及他们的季度销售额。

此宏将添加每个商店的季度销售额,并将这些总数写入电子表格中的单元格(如果您'不确定如何访问VBA对话框,请在此处查看我们的VBA演练):

Sub StoreSales()Dim Sum1 As CurrencyDim Sum2 As CurrencyDim Sum3 As CurrencyDim Sum4 As CurrencyFor Each Cell In Range("C2:C51")  Cell.Activate  If IsEmpty(Cell) Then Exit For  If ActiveCell.Offset(0, -1) = 1 Then    Sum1 = Sum1 + Cell.Value  ElseIf ActiveCell.Offset(0, -1) = 2 Then    Sum2 = Sum2 + Cell.Value  ElseIf ActiveCell.Offset(0, -1) = 3 Then    Sum3 = Sum3 + Cell.Value  ElseIf ActiveCell.Offset(0, -1) = 4 Then    Sum4 = Sum4 + Cell.ValueEnd IfNext Cell Range("F2").Value = Sum1Range("F3").Value = Sum2Range("F4").Value = Sum3Range("F5").Value = Sum4 End Sub

这可能看起来很长而且很复杂,但是我们将对其进行分解,以便您可以查看各个元素并学习有关VBA的一些基本知识。

在模块的开头,我们有“ Sub StoreSales()"。这定义了一个名为StoreSales的新子项。

您还可以定义函数-不同之处在于函数可以返回值,而子函数则不能(如果您熟悉其他编程语言,则子函数是等效的方法)。在这种情况下,我们不需要返回值,因此我们使用的是sub。

在模块末尾,我们有“ End Sub",它告诉Excel我们正在

脚本中的第一行代码均以“ Dim"开头。Dim是VBA声明变量的命令。

因此,“ Dim Sum1"创建一个名为“ Sum1"的新变量。但是,我们需要告诉Excel这是什么类型的变量。我们需要选择一种数据类型。 VBA中有许多不同的数据类型-您可以在Microsoft的帮助文档中找到完整列表。

由于我们的VBA宏将处理货币,因此我们使用Currency数据类型。

p>

“将Dum Sum1作为货币"语句告诉Excel创建一个名为Sum1的新Currency变量。您声明的每个变量都需要有一个“ As"语句来告诉Excel其类型。

循环是可以用任何编程语言创建的最强大的功能。如果您不熟悉循环,请查看以下有关Do-While循环的说明。在此示例中,我们使用了For循环,本文中也对此进行了介绍。

这是循环的样子:

For Each Cell in Range("C2:C51")[a bunch of stuff]Next Cell

这告诉Excel遍历单元格在我们指定的范围内。我们使用了Range对象,它是VBA中的一种特定类型的对象。当我们以这种方式使用它(Range(“ C2:C51"))时,它将告诉Excel我们对这50个单元格感兴趣。

“对于每个"都告诉Excel我们将要做一些事情每个范围内的单元格。 “ Next Cell"出现在我们要执行的所有操作之后,并告诉Excel从头开始循环(从下一个单元格开始)。

我们也有以下语句:“ If IsEmpty(Cell)Then

您能猜出它的作用吗?

注意:严格来说,使用While循环可能是一个更好的选择。但是,出于教学的考虑,我决定使用带Exit的For循环。

此特定宏的核心在If-Then-Else语句中。这是我们的条件语句序列:

If ActiveCell.Offset(0, -1) = 1 Then  Sum1 = Sum1 + Cell.Value  ElseIf ActiveCell.Offset(0, -1) = 2 Then  Sum2 = Sum2 + Cell.Value  ElseIf ActiveCell.Offset(0, -1) = 3 Then  Sum3 = Sum3 + Cell.Value  ElseIf ActiveCell.Offset(0, -1) = 4 Then  Sum4 = Sum4 + Cell.ValueEnd If

在大多数情况下,您可能会猜测这些语句的作用。但是,您可能不熟悉ActiveCell.Offset。 “ ActiveCell.Offset(0,-1)"告诉Excel查看活动单元格左侧一列的单元格。

在本例中,这是告诉Excel查询商店编号列。如果Excel在此列中找到1,则它将获取活动单元格的内容并将其添加到Sum1。如果找到2,则将活动单元的内容添加到Sum2。依此类推。

Excel按顺序遍历所有这些语句。如果满足条件语句,则将完成Then语句。如果不是,它将移至下一个ElseIf。如果它一直到最后并且没有满足任何条件,则它将不采取任何措施。

循环和条件条件的组合是驱动此宏的原因。循环告诉Excel遍历选择中的每个单元格,条件语句告诉它如何处理该单元格。

最后,我们将计算结果写入单元格中。这是用于执行此操作的行:

Range("F2").Value = Sum1Range("F3").Value = Sum2Range("F4").Value = Sum3Range("F5").Value = Sum4

使用“ .Value"和等号,我们将这些单元格中的每个单元格设置为变量之一的值。

就是这样!我们告诉Excel,我们已经用“ End Sub"完成了此Sub的编写,并且VBA宏已完成。

使用 Macros 按钮中的< strong>开发人员标签上,我们得到的总和是:

在Excel中将VBA的构建模块放在一起

当您第一次查看上面的VBA宏时,它看起来相当复杂。但是在将其分解成各个组成部分之后,逻辑变得清晰了。像任何脚本语言一样,要习惯VBA的语法也需要花费一些时间。

但是通过实践,您将建立VBA词汇表,并能够更快,更准确地编写宏,并且具有很多功能。

当您遇到麻烦时,运行Google搜索是解决VBA问题的快速方法。而且,如果您愿意深入了解Microsoft的Excel VBA参考,则可以为您提供技术答案。

一旦您熟悉了基础知识,就可以开始使用VBA进行诸如从Excel发送电子邮件之类的操作。 ,导出Outlook任务。

标签: 编码教程 Microsoft Excel Microsoft Office 2016 电子表格