Table of contents
今天我们将继续探讨自定义Excel函数。 由于你已经知道如何创建UDF(而且,我希望你也尝试过在你的Excel中应用它们),让我们再深入一点,学习如何在Excel中使用和存储用户定义的函数。
此外,我们将向你展示如何轻松地将你的函数保存在Excel插件文件中,以便以后点击几下就能使用它们。
因此,这里是我们要讨论的内容。
在Excel中使用UDF的不同方法
在工作表中使用UDFs
一旦你验证了你的UDFs工作正常,你就可以在Excel公式或VBA代码中使用它们。
你可以在Excel工作簿中以使用常规函数的方式应用自定义函数。 例如,只需在一个单元格中写下以下公式。
= GetMaxBetween(A1:A6,10,50)
UDF可以与常规函数结合使用。 例如,在计算的最大值上添加文本。
= CONCATENATE("10和50之间的最大值是", GetMaxBetween(A1: A6,10,50))
你可以在下面的截图中看到这个结果。
你可以找到既是最大值又在10至50范围内的数字。
让我们检查一下另一个公式。
= INDEX(A2:A9, MATCH(GetMaxBetween(B2:B9, F1, F2), B2:B9,0)),。
自定义函数 读取最大间隔时间 检查范围B2:B9,找到10和50之间的最大数字。 然后,使用INDEX + MATCH,我们得到与这个最大值匹配的产品名称。
正如你所看到的,自定义函数的使用与普通Excel函数没有太大区别。
当这样做时,请记住,用户定义的函数只能返回一个值,但不能执行任何其他动作。 阅读更多关于用户定义的函数的限制。
在VBA程序和函数中使用UDF
UDF也可以用在VBA宏中,下面你可以看到宏的代码,在包含活动单元格的列中寻找10到50范围内的最大值。
Sub MacroWithUDF() Dim Rng As Range, maxcase, i As Long With ActiveSheet.Range(Cells(ActiveCell.CurrentRegion.Row, ActiveCell.Column), Cells(ActiveCell.CurrentRegion.Rows.Count _ + ActiveCell.CurrentRegion.Row - 1, ActiveCell.Column) maxcase = GetMaxBetween(.Cells, 10, 50) i = Application.Match(maxcase, .Cells, 0) .Cells(i).Interior.Color = vbRed End With 结束 Sub该宏代码包含自定义函数
GetMaxBetween(.Cells, 10, 50)
它找到活动列中的最大值,然后这个值将被高亮显示。 你可以在下面的截图中看到宏的结果。
一个自定义函数也可以在另一个自定义函数中使用。 在我们博客的早些时候,我们看了使用名为的自定义函数将一个数字转换为文本的问题。 咒语号码 .
在它的帮助下,我们可以从范围中得到最大值,并立即将其写成文本。
要做到这一点,我们将创建一个新的自定义函数,在其中我们将使用函数 读取最大间隔时间 和 咒语号码 这些都是我们已经熟悉的。
Function SpellGetMaxBetween(rngCells As Range, MinNum, MaxNum) SpellGetMaxBetween = SpellNumber(GetMaxBetween (rngCells, MinNum, MaxNum)) End Function正如你所看到的, 读取最大间隔时间 函数是另一个自定义函数的一个参数。 咒语号码 它定义了最大值,就像我们以前多次做的那样。 然后这个数字被转换为文本。
在上面的截图中,你可以看到 咒语获取最大间隔 函数找到100和500之间的最大数字,然后将其转换为文本。
从其他工作簿中调用UDF
如果你已经在你的工作簿中创建了UDF,不幸的是,这并不意味着你完全不会遇到任何问题。
根据我的经验,大多数用户迟早会创建他们的个人宏和自定义函数集合,以实现个别过程和计算的自动化。 这里出现了一个问题--Visual Basic中用户定义函数的代码需要存储在某个地方,以便以后在工作中使用。
要应用自定义函数,你保存函数的工作簿必须在你的Excel中打开。 如果不是,你在试图使用它时将得到#NAME!错误。 这个错误表明Excel不知道你要在公式中使用的函数名称。
让我们来看看你可以通过哪些方式来使用你创建的自定义函数。
方法1.在函数中加入工作簿名称
你可以在函数名称前指定它所在的工作簿的名称。 例如,如果你保存了一个自定义函数 GetMaxBetween() 的工作簿中的一个名为 My_Functions.xlsm ,那么你必须输入以下公式。
= My_Functions.xlsm! GetMaxBetween(A1:A6,10,50)
方法2.将所有UDF存储在一个公共文件中
将所有自定义函数保存在一个特殊的工作簿中(例如。 My_Functions.xlsm ),如有必要,将其中所需的函数复制到当前工作簿中。
每次你创建一个新的自定义函数,你都需要在你要使用它的工作簿中复制它的代码。 使用这种方法,可能会出现一些不便之处。
- 如果有很多工作文件,而且到处都需要这个函数,那么就必须把代码复制到每本书中。
- 记住要把工作簿保存为支持宏的格式(.xlsm或.xlsb)。
- 当打开这样的文件时,对宏的保护每次都会显示一个警告,必须确认。 许多用户在看到要求他们启用宏的黄条警告时感到害怕。 为了避免看到这个消息,你需要完全禁用Excel保护。 然而,这可能并不总是正确和安全。
我想你会同意我的观点,即一直打开一个文件并从其中复制用户定义函数的代码或在公式中写下这个文件的名称并不是最好的解决方案。因此,我们来到了第三种方式。
方法3.创建一个Excel插件文件
我认为最好的方法是将经常使用的自定义函数存储在Excel插件文件中。 使用插件的优点。
- 你只需将该插件与Excel连接一次,之后你就可以在这台电脑上的任何文件中使用它的程序和函数。 你不需要将工作簿保存为.xlsm和.xlsb格式,因为源代码不会存储在其中,而是在插件文件中。
- 你不会再被宏的保护所困扰,因为插件总是指的是可信赖的来源。
- 一个插件是一个独立的文件。 它很容易从计算机转移到计算机,与同事分享它。
我们稍后会进一步讨论创建和使用插件的问题。
使用插件来存储自定义函数
如何创建我自己的插件? 让我们一步一步地完成这个过程。
第1步,创建插件文件
打开Microsoft Excel,创建一个新的工作簿,并以任何合适的名称(例如,My_Functions)保存为add-in格式。 要做到这一点,使用菜单 文件 - 另存为 请务必指定文件类型。 Excel插件 :
你的插件的扩展名是.xlam。
提示:请注意,在默认情况下,Excel将插件存储在 C:/Users/[Your_Name]/AppData/Roaming/Microsoft/AddIns 我建议你接受默认位置。 如果你愿意,你可以指定任何其他文件夹。 但是,当连接插件时,你将需要手动找到并指定其新位置。 如果你将其保存在默认文件夹中,你不必在你的计算机上寻找插件。 Excel会自动列出它。
第2步,连接插件文件
现在,我们创建的插件需要连接到Excel。 然后,它将在程序启动时自动加载。 要做到这一点,使用菜单 文件 - 选项 - 附加组件 请确保 Excel插件 中选择了 管理 栏,点击 进展 在出现的窗口中,标记我们的插件My_Functions。 如果你在列表中没有看到它,点击 浏览 按钮并浏览到你的插件文件的位置。
如果你使用插件来存储自定义函数,有一个简单的规则需要遵循。 如果你要把工作簿转移给另一个人,一定要同时转移一份包含你想要的功能的插件。 他们应该用和你现在一样的方式连接。
第3步,在插件中添加自定义函数和宏
我们的插件已经连接到Excel,但它还没有任何功能。 要向它添加新的UDF,请按Alt + F11打开Visual Basic编辑器。 然后你可以用VBA代码添加新模块,如我的创建UDF教程中所述。
选择你的插件文件( My_Finctions.xlam 在VBAProject窗口中使用 插入 - 模块 你需要在其中写入自定义函数。
你可以手动输入用户定义函数的代码,或者从某个地方复制它。
就这样,现在你已经创建了自己的插件,并将其添加到Excel中,你可以在其中使用UDF。 如果你想使用更多的UDF,只需在VBA编辑器中的插件模块中编写代码并保存。
今天就到这里,我们已经学会了如何在工作簿中使用用户定义的函数。 我们真的希望这些指南对你有帮助。 如果你有任何问题,请写在本文的评论中。