Mac上的Excel并不总是和Windows上的一样强大。除非宏是专门为Mac创建的,否则宏实际上是不起作用的。
从2013年开始,微软带回了宏。宏有两种类型:一种是可以通过快速记录操作来创建的宏,另一种是使用VBA来设计更高级的自动化程序的宏。在Office2016中,Excel在所有平台上使用相同的代码库。此更改将使宏更容易跨平台工作。
让我们来看看这是如何在macOS上工作的。
默认情况下,在Mac上使用Excel中的宏可能无法启用。此设置是因为宏可能是恶意软件向量。最简单的方法是查看Excel功能区上是否有“开发人员”选项卡。如果您没有看到它,那么启用它很简单。
单击菜单栏中的Excel,然后在下拉列表中选择“首选项”。在菜单中,单击功能区和工具栏。在右边的列表中,Developer应该位于底部,单击复选框。最后,单击“保存”,您将看到“开发人员”选项卡显示在功能区的末尾。
使用宏创建每个工作簿后,请将其保存为新格式.xl**,以便在重新打开文件后使用宏。如果您忘记了,Excel会在每次尝试保存时提醒您。您还需要在每次打开文件时启用宏。
虽然您可以编写宏,但这可能不适合所有人。如果您还没有准备好开始使用VBA,Excel允许您在现有工作表中记录宏的步骤。单击“开发人员”选项卡查看您的选项。
您正在功能区中查找第三个选项“录制宏”。单击此项,将弹出一个对话框,允许您命名宏并设置键盘快捷键。您可以将宏的范围限定到当前工作簿、新工作簿或个人宏工作簿中。个人宏工作簿位于您的用户配置文件中,允许您在文件之间使用宏。
一旦您记录了您的操作,它们就可以在同一选项卡上使用。单击宏将显示工作簿中保存的宏。单击宏名称,然后单击运行以运行录制的操作。
对于一个宏示例,您将运行一个每日销售表,销售按小时总数进行细分。宏将添加每日总销售额,然后在每个小时周期的最后一列中添加平均值。如果你在零售或其他销售岗位工作,这是一个有用的表格来跟踪收入。
我们需要把第一张纸放好。每天使用第一个空格作为模板复制到新选项卡可以节省一些时间。在第一列/行中输入小时/日期。在顶部加上星期一到星期五。
然后在第一列中,把每小时的总数从8到5进行细分。我用的是24小时制,但如果你愿意,你可以用AM/PM表示法。您的工作表应该与上面的屏幕截图匹配。
添加一个新选项卡,并将模板复制到其中。然后填写当天的销售数据。(如果没有数据填充此工作表,可以在所有单元格中输入=randbween(101000)来创建虚拟数据。)接下来,单击功能区中的“开发人员”。
然后,单击录制宏。在对话框中输入名称AverageandSum,并将其保存在此工作簿中。如果你愿意,你可以设置一个快捷键。如果需要宏功能的详细信息,可以输入说明。单击“确定”开始设置宏。
在每小时列表的底部输入每日总计。在其旁边的单元格中,输入=SUM(B2:B10)。然后复制并粘贴到其余的列中。然后在标题中,在最后一列之后添加Average。然后在下一个单元格中,输入=Average(B2:F2)。然后,将其粘贴到列其余的单元格中。
然后单击停止录制。宏现在可以在添加到工作簿的每个新工作表上使用。一旦有了另一张数据表,请返回“开发人员”并单击“宏”。你的宏应该突出显示,点击运行添加你的总和和平均数。
本例可以为您节省几个步骤,但对于更复杂的操作,这些步骤可能会累加起来。如果对格式相同的数据执行相同的操作,请使用录制的宏。
Excel中手动录制的宏有助于处理大小和形状始终相同的数据。如果要对整个工作表执行操作,它也很有用。你可以用你的宏来证明这个问题。
在工作表中再添加一小时和一天,然后运行宏。您将看到宏覆盖了新数据。解决这个问题的方法是使用VBA(visualbasic的精简版)使用代码使宏更具动态性。实现的重点是办公自动化。
它并不像Applescript那样容易被获取,但Office的自动化完全是围绕Visual Basic构建的。所以,一旦你在这里使用它,你就可以很快地转身,并在其他办公应用程序中使用它。(如果你在工作中使用Windows PC,这也会有很大帮助。)
在Excel中使用VBA时,有一个单独的窗口。上面的屏幕截图是我们录制的宏,它出现在代码编辑器中。窗口模式有助于在学习过程中使用代码。当宏挂起时,可以使用调试工具查看变量和工作表数据的状态。
Office 2016现在提供了完整的Visual Basic编辑器。它允许您使用对象浏览器和调试工具,这些工具过去仅限于Windows版本。您可以通过进入“查看”>;“对象浏览器”或按Shift+Command+B来访问对象浏览器。然后您可以浏览所有可用的类、方法和属性。这对下一节的代码构造非常有帮助。
在开始编写宏之前,让我们先在模板中添加一个按钮。这一步使新手更容易访问宏。他们可以单击一个按钮来调用宏,而不是深入到选项卡和菜单中。
切换到最后一步创建的空白模板表。单击Developer返回选项卡。一旦你在标签上,点击按钮。接下来,单击模板上工作表中的某个位置以放置按钮。出现“宏”菜单,命名宏并单击“新建”。
visualbasic窗口将打开;您将看到它在项目浏览器中作为Module2列出。“代码”窗格的顶部有Sub AverageandSumButton(),底部有几行。您的代码需要介于这两行之间,因为它是宏的开头和结尾。
首先,需要声明所有变量。它们在下面的代码块中,但是需要注意它们是如何构造的。您应该在名称前使用Dim声明所有变量,然后使用datatype声明所有变量。
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既然已经有了所有的变量,就需要立即使用一些范围变量。范围是将工作表的各个部分作为地址保存的对象。变量All Cells将设置为工作表上的所有活动单元格,其中包括列和行标签。您可以通过调用ActiveSheet对象,然后调用UsedRange属性来实现这一点。
问题是您不希望标签包含在平均值和总和数据中。相反,您将使用AllCells范围的一个子集。这将是TargetCells的射程。您可以手动声明其范围。它的起始地址将是范围第二列第二行的单元格。
您可以通过调用AllCells范围来调用它,使用它的Cells类使用(2,2)来获取特定的单元格。要获取范围中的最后一个单元格,仍将调用AllCells。这次使用SpecialCells方法来获取属性xlCellTypeLastCell。您可以在下面的代码块中看到这两个。
Set AllCells = ActiveSheet.UsedRange Set TargetCells = Range(AllCells.Cells(2, 2), AllCells.SpecialCells(xlCellTypeLastCell))接下来的两段代码是针对每个循环的。这些循环通过一个对象来作用于该对象的每个子集。在本例中,您将执行其中两个操作,每行一个,每列一个。因为它们几乎完全相同,所以只有一个在这里;但是它们都在代码块中。细节几乎完全相同。
在为每行启动循环之前,需要设置循环写入每行平均值的目标列。您可以使用ColumnPocholder变量来设置此目标。将其设置为AllCells的Cells类的Count变量。添加一个,通过附加+1将其移到数据的右侧。
接下来,您将通过使用每个循环来启动循环。然后,您想为子集创建一个变量,在这种情况下,子例程。在输入之后,我们设置了我们正在解析TargetCells的主要对象。在末尾追加.Rows,将循环限制为仅限于每一行,而不是范围内的每个单元格。
在循环中,您使用活动页单元格方法在工作表上设置特定目标。坐标通过使用设置子行要获取当前循环中的行。然后,您将使用ColumnPlaceHolder作为其他坐标。
这三个步骤都用这个。第一个在括号后附加.value并设置为工作表函数。平均值(副标题)。这会将行的平均值的公式写入目标单元格。下一行追加.Style并将其设置为“Currency”。此步骤与工作表的其余部分匹配。在最后一行,添加。字体粗体把它设为真。(注意,这一行没有引号,因为它是布尔值。)这一行加粗字体,使摘要信息从工作表的其余部分中脱颖而出。
这两个步骤都在下面的代码示例中。第二个循环为列交换行,并将公式更改为Sum。使用此方法将计算与当前工作表的格式绑定。否则,它将链接到录制宏时的大小。因此,当您工作更多天或更多小时时,函数会随着数据的增长而增长。
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和columnpocholder。首先,使用所有单元格。行获取范围中的第一行,然后所有单元格。列+1获取最后一列。然后使用与循环相同的方法将值设置为“Average Sales”。你也会用同样的方法。字体粗体属性以加粗新标签。
然后将其反转,将占位符设置为第一列和最后一行,以添加“Total Sales”。你也要加粗。
这两个步骤都在下面的代码块中。这是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录制的宏非常适合用于可预测的重复。即使是像调整所有单元格大小和加粗标题这样简单的事情,这些都可以节省您的时间。避免常见的宏错误。
visualbasic为Mac-Excel用户打开了深入研究办公自动化的大门。visualbasic传统上只在Windows上可用。它允许宏动态地适应数据,使它们更加通用。如果你有耐心的话,这可能是通向更高级编程的大门。
想要更多省时的电子表格技巧吗?了解如何在Excel中使用条件格式自动突出显示特定数据,在Mac上使用数字条件突出显示。
...击“在单独的选项卡中显示”,将这些按钮发送到功能区上的新宏选项卡。 ...
... 录制时,可以使用“开发人员”选项卡上的“使用相对引用”切换。如果启用,宏将被记录为相对于初始单元格的操作。例如,如果在录制时单击单元格A1到A3,则从单元格J6运行宏会将光标移动到J8。如果禁用...
... CDO是Windows中使用的消息传递组件,从操作系统的早期版本就开始了。它以前被称为CDONTS,后来随着windows2000和XP的出现,被“windows2000的CDO”所取代。此组件已包含在Microsoft Word或Excel...
...员”选项卡。但您可以轻松地启用Word功能区和Excel功能区上的选项卡。首先让我们看看如何将“开发人员”选项卡添加到功能区。 ...
... 如果您目前没有使用Google工作表跟踪**,您确实应该。即使你一生中从未编程过任何东西。 ...
Excel宏可以通过自动化经常使用的Excel过程来节省大量的时间。但是宏实际上是非常有限的。录音工具很容易出错,录音过程也很尴尬。 ...
... 宏最终可供googlesheets用户使用。宏允许您自动执行文档和电子表格中的重复任务,而无需学习编写代码。 ...
...介:您将详细了解Excel的基本功能,并了解在什么情况下使用每个功能。 Excel函数掌握课程:通过一个例子,你将了解如何使用每个函数和公式。例如,在学习日期和时间函数时构建假日日期计算器。并与数学和金...