Table of contents
我们将继续关于用户定义函数的系列教程。 在以前的文章中,我们熟悉了自定义函数,并学会了如何创建和使用它们。 在本手册中,我们将看看使用这些函数的具体细节,并看看UDF和VBA宏的区别。
在本教程中,我们将学习以下内容。
我们希望这篇文章能提高你对UDF的认识,帮助你在Excel工作簿中更有效地使用它们。
UDF和Macro是一回事吗?
用户定义的函数和VBA宏都是使用VBA编辑器创建的。 它们之间有什么区别,应该优先考虑什么?
最重要的区别是,函数执行计算,而宏执行一些动作。 一个用户定义的函数,像普通的Excel函数一样,必须写在一个单元格中。 作为其执行的结果,该单元格返回一些值。 同时,它不可能改变其他单元格的值,以及当前单元格的一些属性(特别是。然而,你可以在条件格式化公式中使用一个自定义函数。
UDF和VBA宏的工作方式不同。 例如,当你在Visual Basic编辑器中创建一个UDF时,你以一个语句开始 职能 并以一个 结束功能 当你录制一个宏时,你以一个声明开始 子 并以一个 结束子。
并非所有的Visual Basic操作符都可以用来创建UDF。 出于这个原因,宏是一个更通用的解决方案。
宏不需要用户传递任何参数(也不能接受任何参数),与用户定义的函数不同。
重点是,宏的一些命令可以使用单元格地址或格式化元素(例如,颜色)。 如果你移动单元格,添加或删除行和列,改变单元格的格式,那么你很容易 "破坏 "你的宏。 如果你与不知道你的宏如何工作的同事分享你的文件,这尤其可能。
例如,你有一个文件,其中有一个完美工作的宏。 这个公式计算A1至A4单元格的百分比。 宏将这些单元格的颜色改为黄色。 在活动单元格中设置了一个百分比格式。
如果你或其他人决定插入一个新行,宏将继续寻找A4单元格中的值(你的UDF中的4,1参数),失败并返回一个错误。
在这种情况下,错误的发生是由于除以0(在新增加的行中没有值)。 如果宏执行,比方说,求和,那么你将得到一个错误的结果。 但你不会知道它。
与宏相比,用户定义的函数不能造成这种不愉快的情况。
下面你可以看到使用UDF进行相同计算的性能。 在这里,你可以在工作表中的任何地方指定输入单元格,在改变它时不会遇到任何意外问题。
我在C3中写了以下公式。
=UDF_vs_Macro(A1,A4)
然后我插入了一个空白行,公式发生了变化,你可以在上面的截图中看到。
现在我们可以将输入单元格或带有函数的单元格移动到任何地方。 结果总是正确的。
使用UDF的另一个好处是,当输入单元格中的值发生变化时,它们会自动更新。 当使用宏时,你必须始终确保所有数据都是最新的。
考虑到这个例子,我更倾向于尽可能使用UDFs,只在其他非计算活动中使用宏。
使用UDF的局限性和劣势
上面我已经提到了UDF的优点。 长话短说,它可以进行标准Excel函数无法实现的计算。 此外,它可以保存和使用长而复杂的公式,将它们变成一个单一的函数。 而你也不必反复编写复杂的公式。
现在让我们更详细地谈谈UDF的不足之处。
- 创建UDF需要使用VBA,这是没有办法的。 这意味着用户不能像Excel宏一样记录UDF。 你必须自己创建UDF。 然而,你可以复制和粘贴之前记录的宏代码的部分内容到你的函数中。 你只需要注意自定义函数的限制。
- UDF的另一个缺点是,像其他Excel函数一样,它只能返回一个单一的值或一个数组的值到一个单元格中。 它只是执行计算,没有别的。
- 如果你想与你的同事分享你的工作簿,请确保将你的UDF保存在同一个文件中。 否则,你的自定义函数对他们将不起作用。
- 用VBA编辑器创建的自定义函数比普通函数慢。 这在大表中尤其明显。 不幸的是,到目前为止,VBA是一种非常慢的编程语言。 因此,如果你有大量的数据,尽量使用标准函数,或者使用LAMBDA函数创建UDFs。
自定义功能的限制。
- UDFs被设计用来执行计算并返回一个值。 它们不能被用来代替宏。
- 他们不能改变任何其他单元格的内容(只有活动单元格)。
- 函数名称必须遵循某些规则。 例如,你不能使用与Excel本地函数名称或单元格地址相匹配的名称,如AB123。
- 你的自定义函数名称中不能包含空格,但可以包含下划线字符。 然而,首选方法是在每个新词的开头使用大写字母(例如,GetMaxBetween)。
- UDF不能复制和粘贴单元格到工作表的其他区域。
- 他们不能改变活动的工作表。
- UDF不能改变活动单元格的格式。 如果你想在显示不同数值时改变单元格的格式,你应该使用条件格式化。
- 他们不能打开其他书籍。
- 它们不能被用来使用Application.OnTime运行宏。
- 不能用宏记录器创建用户定义的函数。
- 函数不出现在 开发者> 宏观调控 对话。
- 你的函数将出现在对话框中( 插入> 功能 ),而在函数列表中只有当它们被声明为 公众 (这是默认的,除非另有说明)。
- 任何被声明为 私营 将不会出现在功能列表中。
相当慢的操作,以及使用上的一些限制,可能会让你觉得:"这些自定义函数有什么用?"
它们可以派上用场,而且如果我们注意到对它们的限制,它们就会派上用场。 如果你学会了如何正确地创建和使用UDF,你就可以编写你的函数库。 这将大大扩展你在Excel中处理数据的能力。
对我来说,自定义函数非常节省时间。 你呢? 你是否已经尝试过创建自己的UDF? 你是否喜欢它比基本的Excel函数更好? 让我们在评论中讨论吧:)