在 Excel 中编写自定义函数指南:第一部分,使用 VBA





4.00/5 (1投票)
这是一份在 Excel 中编写自定义函数的指南
您是否曾经想过在 Excel 中创建自己的函数? 有几种方法可以实现此目标,它们都有各自的优缺点。 下表列出了创建自定义函数的选项。 在这篇文章中,我们将介绍最简单的选项,它只需要 Excel。 其他选项更困难,也更耗时,但优点是速度更快。
缺点 | 优点 | |
VBA | 类别是“用户定义”的。 | 非常简单 |
自动化加载项 | 类别是 Prog-ID。 无法进行函数/参数描述,比 XLL 慢 | 简单 |
RTD | 需要记住笨拙的 RTD 语法,例如 =RTD(“ServerName”,,”MyFunction”,…) | 快速,后台计算 |
XLL | 中等复杂 | 最快,可以选择名称和文档变量 |
RTD + XLL | 最复杂 | 您选择的名称和后台计算 |
在接下来的几篇文章中,我将尝试编写一个使用每种技术的基本教程。我将从最简单的选项开始,使用 VBA。
使用 VBA 创建自定义函数
使用 VBA 是将自定义函数添加到 Excel 电子表格中最简单的方法。 优点是:它很快,它很容易,而且它不需要任何额外的。 在性能方面,与使用编译语言(C/C++,Delphi)的其他技术相比,VBA 略有不足。 在许多情况下,使用其他技术之一获得的性能提升可能不值得;如果它节省了 1 毫秒,并且在一个电子表格上使用了 100 次,那么有人会注意到差异吗?
在这个简单的例子中,我们将创建一个 CAGR(复合年均增长率)函数。 CAGR 函数的定义如附录 1 所示,可以在 这里 找到 CAGR 函数的解释。
附录 1:CAGR 函数的定义
第一步是创建一个 Excel 文件,我们称之为“VBAFunction.xlsm”或“VBAFunction.xls”,如果您使用的是 2007 之前的版本。切换到 Visual Basic 编辑器 (ALT-F11),右键单击项目并添加一个模块,如附录 2 所示。
附录 2:添加一个模块以放置自定义函数
接下来,将模块的名称更改为更具描述性的名称,如附录 3 所示。我将“module1
”更改为“CustomFunctionModule
”。
附录 3:更改模块名称
现在我们有了模块,我们需要做的就是编写一些代码。双击项目树中的模块名称打开模块。输入以下代码
Option Explicit ' Must declare variables before use.
' Because this function is public and in a module it will be useable
' from Excel.
Public Function CAGR(BeginningValue As Variant, _
EndingValue As Variant, NumberOfYears As Variant) _
As Double
CAGR = Application.WorksheetFunction.Power( _
(EndingValue / BeginningValue), 1 / NumberOfYears) - 1
End Function
我们从“Option Explicit”开始,因为它强制我们在使用变量之前使用 Dim
声明变量。这样,我们避免了因拼错变量名而创建的错误,这种情况迟早会发生,并且可能成为一个主要的难题。函数本身非常简单。为了使该函数可从 Excel 中使用,请遵循以下两个规则
- 将函数放在一个模块中
- 确保它声明为“
Public
”
现在您可以返回电子表格并在公式中使用该函数,如附录 4 所示。
附录 4:使用 CAGR 函数
如果您查看函数向导,您可以在“用户定义”类别中找到我们刚刚定义的 CAGR 函数。 参数名称将与我们上面定义的相同,只是不会有函数或参数的描述。 这是此技术的一个限制,要获取描述,我们需要使用 XLL。
附录 5:函数向导
遗憾的是,没有“No help available”。