Excel中自定义函数的优势和劣势

  • Share This
Michael Brown

我们将继续关于用户定义函数的系列教程。 在以前的文章中,我们熟悉了自定义函数,并学会了如何创建和使用它们。 在本手册中,我们将看看使用这些函数的具体细节,并看看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函数更好? 让我们在评论中讨论吧:)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.