Excel函数与多个输出没有数组公式
是否有可能定义一个Excel VBA函数与多个输出,并使用它的工作表范围没有数组公式?
不是真正的“多个输出”,但是你可以使用Application.Caller来确定你的函数被调用的地方,并且根据(例如)公式所在的列返回单个值。
Function WhereAmI(rng As Range) Dim c, ws, rv Set c = Application.Caller 'cell containing the formula Set ws = c.Parent 'worksheet containing the formula Select Case c.Column Case 2: rv = "OK" Case Else: rv = "not OK" End Select WhereAmI = rv End Function
但是,这与其他函数并没有太大的区别,对于任何复杂的事情来说,使用数组公式的效率要低得多。
你可以把多个值放入一个string中:
Public Function CircleStuff(r As Range) As String Dim diameter As Double, circumference As Double, area As Double Dim radius As Double radius = r.Value diameter = 2 * radius circumference = 3.1415926 * diameter area = 3.1415926 * radius * radius CircleStuff = CStr(diameter) & "," & CStr(circumference) & "," & CStr(area) End Function
所以如果A1包含:
1
= CircleStuff(A1)将返回:
2,6.2831852,3.1415926
您可以使用FIND和MIDfunction检索各个部分。
简短的回答:不。
好的,你可以做一些类似于A1=CalculateOutput1() & "," & CalculateOutput2()
和B1=SomeFunction(Left(A1, Find(A1, ",") - 1), Right(A1, Len(A1) - Find(A1, ",")))
,但是…我不明白你为什么想要。
使用xlwings
可以定义dynamic数组:
http://docs.xlwings.org/en/stable/udfs.html#dynamic-array-formulas