在Mac上的Excel中使用宏可节省时间并做更多事情

Mac上的Excel并不总是和Windows一样强大。除非它们是专门为Mac创建的,否则宏实际上是无法工作的。

从2013年开始,Microsoft带来了宏。宏有两种类型:可以通过快速记录操作来创建的宏,以及使用VBA设计更高级的自动化的宏。在Office 2016中,Excel在所有平台上使用相同的代码库。这项更改将使宏更易于跨平台工作。

因此,让我们看一下当前在macOS上如何工作。

在Mac上的Excel中启用宏

默认情况下,可能无法在Mac上的Excel中使用宏。此设置是因为宏可能是可能的恶意软件媒介。最简单的判断方法是查看Excel功能区中是否有 Developer 标签。如果看不到,则启用起来很简单。

在菜单栏中单击 Excel ,然后在菜单栏中选择首选项。落下。在菜单中,点击功能区和工具栏。在右侧列表中,开发人员应位于底部,然后单击复选框。最后,单击保存,您应该会看到功能区末尾显示“开发人员"选项卡。

使用宏创建每个工作簿之后,将其保存为新格式 .xlsm 以在重新打开文件后使用宏。如果您忘记了,每次尝试保存时Excel都会提醒您。每次打开文件时,您还需要启用宏。

在Mac上的Excel中手动记录宏

尽管您可以编写宏,但可能并不适合所有人。如果您还不准备开始使用VBA,则可以使用Excel在现有工作表中记录宏的步骤。点击“开发人员"标签以查看您的选项。

您正在寻找功能区中的第三个选项,即记录宏。单击此按钮,然后会弹出一个对话框,允许您命名宏并设置键盘快捷键。您可以将宏的范围限定为当前工作簿新工作簿个人宏工作簿。个人宏工作簿位于用户个人资料中,可让您在文件之间使用宏。

一旦记录了操作,这些宏就会在同一选项卡上可用。单击宏将在您的工作簿中显示已保存的宏。单击您的宏名称,然后单击运行以运行记录的操作。

以宏为例,您将遍历每日销售表,并按以下方式细分销售每小时总计。您的宏将添加每日总销售额,然后在每个小时段的最后一列中添加平均值。如果您从事零售或其他销售职位,这对跟踪收入很有帮助。

我们需要设置第一张表。每天使用第一个空白作为模板复制到新标签可以节省您的时间。在第一列/行中输入小时/日期。在顶部至顶部的星期一至星期五。

然后在第一列中将小时总数从8-5细分。我使用24小时制,但如果愿意,可以使用AM / PM表示法。您的工作表应与上面的屏幕截图匹配。

添加新标签,然后将模板复制到其中。然后填写当天的销售数据。 (如果没有数据可填充此工作表,则可以在所有单元格中输入 = RandBetween(10,1000)来创建虚拟数据。)接下来,单击 Developer

然后单击 Record Macro (记录宏)。在对话框中输入名称 AverageandSum ,并将其存储在此工作簿中。您可以根据需要设置快捷键。如果需要有关宏功能的更多详细信息,可以输入描述。单击确定以开始设置宏。

在小时列表的底部,输入每日总计。在其旁边的单元格中,输入 = SUM(B2:B10)。然后将其复制并粘贴到其余的列中。然后在标题的最后一列之后添加平均值。然后在下一个单元格中,输入 = Average(B2:F2)。然后,将其粘贴到该列其余部分的单元格中。

然后单击停止记录。您的宏现在可以在您添加到工作簿的每个新工作表上使用。有了另一张数据表后,请返回 Developer (开发人员)并单击 Macros (宏)。您的宏应突出显示,单击运行以添加总和和平均值。

此示例可以为您节省几个步骤,但可以累加一些更复杂的操作。如果您对格式相同的数据执行相同的操作,请使用记录的宏。

在Mac上的Excel中的VBA宏

在Excel中手动记录的宏可帮助处理始终位于同一数据中的数据尺寸和形状。如果要在整个工作表上执行操作,它也很有用。您可以使用宏来证明问题。

在工作表中再添加一个小时和一天,然后运行宏。您会看到宏会覆盖您的新数据。解决此问题的方法是使用代码,通过VBA(这是Visual Basic的精简版)使宏更加动态。实现主要针对Office的自动化。

它不像Applescript那样容易获取,但是Office的自动化完全基于Visual Basic。因此,一旦在此处使用它,您便可以快速转身并在其他Office应用程序中使用它。 (如果您在使用Windows PC时会遇到很大的帮助。)

在Excel中使用VBA时,您将拥有一个单独的窗口。上面的屏幕截图是我们在代码编辑器中显示的录制宏。窗口模式在您学习过程中可以帮助您调试代码。当宏挂起时,有调试工具可以查看变量和工作表数据的状态。

Office 2016现在带有完整的Visual Basic编辑器。它使您可以使用以前仅限于Windows版本的对象浏览器和调试工具。您可以通过转到视图>对象浏览器或仅按 Shift + Command + B 来访问对象浏览器。然后,您可以浏览所有可用的类,方法和属性。在下一节中构造代码非常有帮助。

在开始对宏进行编码之前,我们先向模板添加一个按钮。此步骤使新手用户可以更轻松地访问您的宏。他们可以单击按钮来调用宏,而无需深入研究选项卡和菜单。

切换回上一步中创建的空白模板表。单击 Developer (开发人员)以返回标签。进入标签后,点击按钮。接下来,单击模板上工作表中的某个位置以放置按钮。出现宏菜单,命名您的宏,然后单击新建

Visual Basic窗口将打开;您会在项目浏览器中看到它作为 Module2 列出。代码窗格的顶部为 Sub AverageandSumButton(),而 End Sub 下为几行。您的代码需要介于这两者之间,因为它是宏的开始和结尾。

要开始,您需要声明所有变量。这些在下面的代码块中,但是有关它们的构造方式的说明。您应该在名称前使用 Dim 声明所有变量,然后使用数据类型 as 声明。

Sub AverageandSumButton()  Dim RowPlaceHolder As Integer  Dim ColumnPlaceHolder As Integer  Dim StringHolder As String  Dim AllCells As Range  Dim TargetCells As Range  Dim AverageTarget As Range  Dim SumTarget As Range

现在,您拥有所有变量,您可以需要立即使用一些范围变量。范围是将工作表中的各个部分作为地址保存的对象。变量所有单元格将设置为工作表上的所有活动单元格,其中包括列和行标签。您可以通过调用 ActiveSheet 对象,然后使用 UsedRange 属性来实现此目的。

问题是您不希望平均值和汇总数据。相反,您将使用AllCells范围的一部分。这将是TargetCells范围。您手动声明其范围。它的起始地址将成为该范围第二列第二行中的单元格。

您可以使用其 Cells调用 AllCells 范围来调用此地址类使用(2,2)获取该特定单元格。要获得该范围内的最后一个单元格,您仍将调用 AllCells 。这次使用 SpecialCells 方法获取属性 xlCellTypeLastCell 。您可以在下面的代码块中看到这两者。

  Set AllCells = ActiveSheet.UsedRange  Set TargetCells = Range(AllCells.Cells(2, 2), AllCells.SpecialCells(xlCellTypeLastCell))

代码的下两个部分是“对于每个循环"。这些循环遍历一个对象以对该对象的每个子集起作用。在这种情况下,您要执行两个操作,每行一个,每列一个。由于它们几乎完全相同,因此其中只有一个。但两者都在代码块中。细节实际上是相同的。

在开始每一行的循环之前,您需要设置目标列,在该列中循环写入每一行的平均值。您使用 ColumnPlaceHolder 变量设置此目标。您将其设置为等于 AllCells Cells 类的 Count 变量。通过添加 +1 将其添加到数据右侧。

下一步,您将使用 For Each 。然后,您要为该子集创建一个变量,在本例中为 subRow 。在输入之后,我们设置要解析 TargetCells 的主要对象。在末尾附加 .rows 以将循环限制为仅每一行,而不是范围内的每个单元格。

在循环内部,使用ActiveSheet.Cells方法设置工作表上的特定目标。使用 subRow.Row 来设置坐标,以获取循环当前所在的行。然后,将 ColumnPlaceHolder 用作其他坐标。

您可以将其用于所有三个步骤。首先在括号后附加 .value ,并将其设置为等于 WorksheetFunction.Average(subRow)。这会将行平均值的公式写入目标单元格。您在下一行追加 .Style 并将其设置为等于“货币" 。此步骤与工作表的其余部分匹配。在最后一行,添加 .Font.Bold ,并将其设置为 True 。 (请注意,这是布尔值,因此没有引号。)此行将字体加粗,以使摘要信息在工作表的其余部分中脱颖而出。

两个步骤均在代码中下面的例子。第二个循环将行交换为列,并将公式更改为求和。使用此方法会将您的计算与当前工作表的格式联系起来。否则,其链接到录制宏时的大小。因此,当您工作更多天或数小时时,该功能会随着数据的增长而增长。

  ColumnPlaceHolder = AllCells.Columns.Count + 1  For Each subRow In TargetCells.Rows  ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Value = WorksheetFunction.Average(subRow)  ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Style = "Currency"  ActiveSheet.Cells(subRow.Row, ColumnPlaceHolder).Font.Bold = True  Next subRow  RowPlaceHolder = AllCells.Rows.Count + 1  For Each subColumn In TargetCells.Columns  ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Value = WorksheetFunction.Sum(subColumn)  ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Style = "Currency"  ActiveSheet.Cells(RowPlaceHolder, subColumn.Column).Font.Bold = "True"  Next subColumn

下一步,标记新的行和列,设置 RowPlaceHolder ColumnPlaceHolder 再次。首先,使用 AllCells.Row 获取范围的第一行,然后使用 AllCells.Column + 1 获取最后一列。然后,您将使用与循环相同的方法将值设置为“平均销售额" 。您还将使用相同的 .Font.Bold 属性来加粗新标签。

然后将其反转,将占位符设置为第一列和最后一行以添加< strong>“销售总额" 。您也希望将其加粗。

这两个步骤都在下面的代码块中。这是 End Sub 指出的宏的结尾。现在,您应该拥有整个宏,并且能够单击按钮来运行它。如果您想作弊,可以按顺序将所有这些代码块粘贴到excel工作表中,但是这样做的乐趣在哪里?

  ColumnPlaceHolder = AllCells.Columns.Count + 1  RowPlaceHolder = AllCells.Row  ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Value = "Average Sales"  ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Font.Bold = True  ColumnPlaceHolder = AllCells.Column  RowPlaceHolder = AllCells.Rows.Count + 1  ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Value = "Total Sales"  ActiveSheet.Cells(RowPlaceHolder, ColumnPlaceHolder).Font.Bold = TrueEnd Sub

在Mac上的Excel中,宏的下一步是什么?

录制的宏非常适合用于可预测的重复。即使只是调整所有单元格的大小和加粗标题,这些操作也可以节省您的时间。只需避免常见的宏错误即可。

Visual Basic为Mac Excel用户打开了深入了解Office自动化的大门。传统上,Visual Basic仅在Windows上可用。它使您的宏能够动态地适应数据,从而使它们更具通用性。如果您有足够的耐心,这可能是进行更高级编程的门户。

是否需要更多节省时间的电子表格技巧?了解如何在Excel中使用条件格式自动突出显示特定数据。

标签: Microsoft Excel Visual Basic编程