了解VBA中的Excel单元格与范围函数

Excel功能强大。如果您经常使用它,则可能已经知道使用公式或自动格式化的许多技巧,但是利用VBA中的单元格范围功能,您可以增强Excel

在VBA中使用“单元格和范围"功能的问题在于,在高级级别上,大多数人很难理解这些功能的实际工作方式。使用它们会造成混乱。这是您可以以您从未想到的方式使用它们的方法。

单元格功能

通过单元格和范围功能,您可以准确地告诉VBA脚本所需的工作表位置获取或放置数据。这两个单元格之间的主要区别是它们引用的内容。

单元格通常一次引用一个单元格,而 Range 引用一组单元格立刻。此函数的格式为单元格(行,列)

此格式引用了整个工作表中的每个单元格。这是一个示例,其中“单元格"功能未引用单个单元格:

Worksheets("Sheet1").Cells

此示例引用了顶行左侧的第三个单元格。单元格C1:

Worksheets("Sheet1").Cells(3)

以下代码引用了单元格D15:

Worksheets("Sheet1").Cells(15,4)

如果您愿意,还可以使用“ Cells(15," D")"引用单元格D15-您可以使用列字母。

能够灵活地使用列和单元格的数字来引用单元格,特别是对于可以循环浏览的脚本,它具有很大的灵活性。 >非常快地处理大量单元(并对其进行计算)。

Range函数

在许多方面,Range函数比使用Cells功能强大得多,因为它可以让您引用单个单元格或特定范围的单元格一次全部显示。您不会想要遍历Range函数,因为单元格的引用不是数字(除非您将Cells函数嵌入其中)。

此函数的格式为范围(单元格1,单元格2)。每个单元格都可以由字母数字指定。

让我们看几个示例。

在这里,范围函数引用单元格A5:

Worksheets("Sheet1").Range("A5")

在这里,范围函数引用的是A1到E20之间的所有单元格:

Worksheets("Sheet1").Range("A1:E20")

如上所述,您不必使用数字字母单元格分配。您实际上可以在Range函数内部使用两个Cells函数来标识工作表上的范围,如下所示:

With Worksheets("Sheet1") .Range(.Cells(1, 1), _  .Cells(20, 5))End With

上面的代码引用了与Range(“ A1:E20")函数相同的范围。使用它的价值在于,它允许您编写使用循环动态处理范围的代码。

现在您了解了如何格式化Cells和Range函数的格式,让我们深入了解如何制作在您的VBA代码中创造性地使用这些函数。

使用单元格处理数据功能

当您具有要在多个范围内执行的复杂公式时,单元格功能最有用细胞。这些范围也可以存在于多个工作表中。

让我们举一个简单的例子。假设您管理一个由11人组成的销售团队,并且每个月都要查看他们的表现。

您可能有 Sheet1 来跟踪他们的销售数量和销量

Sheet2 上,您可以跟踪他们最近30天从公司客户那里获得的反馈评分。

如果要计算奖金在第一张工作表中,使用两张工作表中的值,有多种方法可以执行此操作。您可以在第一个单元格中编写一个公式,该公式使用两张纸上的数据执行计算并将其向下拖动。可以。

一种替代方法是创建VBA脚本,您可以在打开工作表时触发它运行,或者通过工作表上的命令按钮触发该VBA脚本,以便您控制计算时间。您仍然可以使用VBA脚本从外部文件中提取所有销售数据。

那么为什么不在同一脚本中同时触发奖金列的计算呢?

如果您以前从未在Excel中编写过VBA,则需要启用“开发人员"菜单项。为此,请转到文件>选项。点击自定义功能区。最后,从左窗格中选择“开发人员",将其添加到右窗格中,并确保已选中该复选框。

现在,单击确定,然后回到主表,您将看到“开发人员"菜单选项。

您可以使用插入菜单插入命令按钮,也可以单击 >查看代码以开始编码。

在此示例中,我们将在每次打开工作簿时使脚本运行。为此,只需在开发人员菜单中单击查看代码,然后将以下新功能粘贴到代码窗口中即可。

Private Sub Workbook_Open() End Sub

您的代码窗口将如下所示。

现在您可以编写代码来处理计算了。使用一个循环,您可以逐步浏览所有11名员工,并使用Cells函数提取计算所需的三个变量。

请记住,Cells函数具有行和列作为参数来标识每个单独的单元格。我们将在该行中添加“ x",并使用数字来请求每一列的数据。行数是员工数,因此它是1到11。列标识符将是2(用于销售计数),3(用于销售量)和2(来自表2)(用于反馈分数)。

最终计算使用以下百分比来总计总奖金分数的100%。它基于理想的销售数量为50,销量为50,000美元,反馈得分为10。

  • (销售数量/ 50)x 0.4
  • (销售数量/ 50,000) x 0.5
  • (反馈分数/ 10)x 0.1
  • 这种简单的方法为销售员工提供了加权奖金。对于50个,数量为50,000美元且得分为10的点,它们将获得该月的全部最高奖金。但是,无论在任何因素上处于完美状态的任何事物都会减少奖金。任何比理想情况更好的方法都会增加奖励。

    现在,让我们看看如何在一个非常简单,简短的VBA脚本中提取所有逻辑:

    Private Sub Workbook_Open()For x = 2 To 12Worksheets("Sheet1").Cells(x, 4) = (Worksheets("Sheet1").Cells(x, 2).Value / 50) * 0.4 _ + (Worksheets("Sheet1").Cells(x, 3).Value / 50000) * 0.5 _ + (Worksheets("Sheet2").Cells(x, 2).Value / 10) * 0.1 _Next xEnd Sub

    该脚本看起来像这样。

    如果您想让“奖金"列显示实际的美元奖金而不是百分比,则可以将其乘以最大奖金金额。更好的是,将该金额放在另一个工作表的单元格中,并在您的代码中引用它。

    “单元格"功能的优点在于,您可以构建一些非常有创意的逻辑以从许多单元格中提取数据跨许多不同的工作表,并使用它们执行一些相当复杂的计算。

    您可以使用“单元格"功能对单元格执行各种操作,例如清除单元格,更改字体格式等。更多信息。

    要探索您可以做的进一步工作,请查看Microsoft MSDN页面中的Cells对象。

    使用范围函数格式化单元格

    用于循环浏览一次有多个单元,单元功能非常完善。但是,如果您想一次将所有内容应用于整个单元格区域,则Range函数的效率要高得多。

    一个用例可能是使用脚本格式化一系列单元格(如果有的话)

    例如,假设所有销售员工的所有销售量总和超过40万美元,您要以绿色突出显示“奖金"列中的所有单元格,以表示该团队已经获得了额外的团队奖金。

    让我们看看如何使用IF语句来做到这一点。

    Private Sub Workbook_Open()If Worksheets("Sheet1").Cells(13, 3).Value > 400000 Then ActiveSheet.Range("D2:D12").Interior.ColorIndex = 4End IfEnd Sub

    运行此命令时,如果单元格超出了团队目标,范围内的所有单元格都将填充为绿色。

    这只是您可以使用“范围"功能对单元格组执行的许多操作的一个简单示例。您可以执行的其他操作包括:

  • 在组周围应用轮廓
  • 检查一系列单元格内的文本拼写
  • 清除,复制或剪切单元格
  • 使用“查找"方法搜索范围
  • 更多
  • 请确保阅读Microsoft MSDN页面中的Range对象以查看所有

    将Excel提升到一个新的水平

    现在,您已经了解了Cells和Range函数之间的区别,是时候将您的VBA脚本提升到一个新的水平了。 Dann关于在Excel中使用计数和添加函数的文章将使您能够构建甚至更高级的脚本,这些脚本可以非常迅速地在所有数据集中累积值。

    如果您刚刚开始使用VBA, Excel,别忘了我们也为您提供了一个出色的Excel VBA入门指南。

    标签: Microsoft Excel Visual Basic编程