我经常遇到这样的情况:编写非常相似但冗长的公式,这些公式使用相同的范围作为多个函数的参数。
举一个简单的例子,考虑:
=(A+B)/B
有没有什么简单的方法可以创建一个 UDF,例如:
=PCTCHANGE(A,B)
这可以执行与上述完全相同的计算吗?我意识到使用简单的算术运算符这很简单,但是有没有简单的方法将更复杂的东西包装成一个简单的函数?
=IF(""=$U30,"",G30/IF(ROW(G30)-MONTH(U30)<ROW(K$8),G$5,OFFSET(G30,-MONTH(U30),0))-1)
我想避免将公式转换为 Application.WorksheetFunction 调用。我假设 Application.Evaluate 可能是解决方案的一部分,但我不知道如何通过 UDF 将范围传递给它。
答案1
您将需要打开 VBA 并从模块创建 UDF。
键入 ALT-F11 打开 VBA 编辑器。在您的项目下,右键单击并选择插入 --> 模块
在 VBA 编辑器窗口中输入以下内容
Function PctChange(A As Double, B As Double) As Double
PctChange = (A + B) / B
End Function
调用该函数时,请执行通常的操作。在任何单元格中键入 PctChange(CellA, Cell B)。