65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIconstarIconemptyStarIcon

4.00/5 (1投票)

2011年8月17日

CPOL

3分钟阅读

viewsIcon

19945

这是一份在 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 函数的定义

cagr_definition

第一步是创建一个 Excel 文件,我们称之为“VBAFunction.xlsm”或“VBAFunction.xls”,如果您使用的是 2007 之前的版本。切换到 Visual Basic 编辑器 (ALT-F11),右键单击项目并添加一个模块,如附录 2 所示。

附录 2:添加一个模块以放置自定义函数

adding_module

接下来,将模块的名称更改为更具描述性的名称,如附录 3 所示。我将“module1”更改为“CustomFunctionModule”。

附录 3:更改模块名称

naming_module

现在我们有了模块,我们需要做的就是编写一些代码。双击项目树中的模块名称打开模块。输入以下代码

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 中使用,请遵循以下两个规则

  1. 将函数放在一个模块中
  2. 确保它声明为“Public

现在您可以返回电子表格并在公式中使用该函数,如附录 4 所示。

附录 4:使用 CAGR 函数

using_in_formula

如果您查看函数向导,您可以在“用户定义”类别中找到我们刚刚定义的 CAGR 函数。 参数名称将与我们上面定义的相同,只是不会有函数或参数的描述。 这是此技术的一个限制,要获取描述,我们需要使用 XLL。

附录 5:函数向导

遗憾的是,没有“No help available”。

function_wizard

© . All rights reserved.