我有一个函数,它接受一个数组并输出另一个数组。它的内部结构比下面的玩具示例更复杂。
Public Function divide_by_2_5(ByRef coeffs() As Double) As Double()
Dim Columns As Integer
Columns = UBound(coeffs, 2) - LBound(coeffs, 2) + 1
Dim output() As Double
ReDim output(1 To 1, 1 To Columns)
Dim i As Integer
For i = 1 To Columns
output(1, i) = coeffs(1, i) / 2.5
Next i
divide_by_2_5 = output
End Function
这是我看到的:
我希望第二行包含函数的输出。在这种情况下,这将是
0.4, 0.4, 0.4, 0.4
.不幸的是,我收到了
#VALUE!
错误,我不知道如何调试。一些澄清:显然可以让相同的函数返回一个数组或将其写入电子表格(使用
Ctrl
- Shift
- Enter
)。以类似的方式,输入是否可能来自范围或数组?
最佳答案
Public Function divide_by_2_5(coeffs As Variant) As Double()
Dim v() As Variant
If TypeName(coeffs) = "Range" Then
v = coeffs.Value
Else
v = coeffs
End If
Dim output() As Double
ReDim output(LBound(v, 1) To UBound(v, 1), LBound(v, 2) To UBound(v, 2))
Dim r As Long
Dim c As Long
For r = LBound(v, 1) To UBound(v, 1)
For c = LBound(v, 2) To UBound(v, 2)
output(r, c) = v(r, c) / 2.5
Next
Next
divide_by_2_5 = output
End Function
将其称为 UDF 的示例如下:
{=divide_by_2_5(C2:F2)}
使用 Range 从 VBA 调用它的示例可能是:
Dim v As Variant
v = divide_by_2_5(Worksheets("Sheet1").Range("C2:F2"))
使用数组从 VBA 调用它的示例可能是:
Sub test()
Dim x(1, 4) As Variant
Dim v As Variant
x(1, 1) = 6
x(1, 2) = 7
x(1, 3) = 8
x(1, 4) = 9
v = divide_by_2_5(x)
MsgBox v(1, 3)
End Sub
关于arrays - 接受范围作为数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39439890/