【发布时间】:2017-10-20 04:59:17
【问题描述】:
我正在尝试创建一个用户定义的函数以在 Excel 工作表中使用。我的函数使用三个单元格区域作为输入,并且应该返回一个值作为结果。因此,它在结构上类似于例如SUMPRODUCT 函数,只是执行的数学运算不同。
这是我正在使用的代码:
Function MyFunction(C(), V(), M()) As Double
Application.Volatile (True)
Dim i As Long, j As Long, x As Long
Dim Sum_Phi_i As Double
x = UBound(C, 0)
MyFunction = 0
For i = 0 To x
Sum_Phi_i = 0
For j = 0 To x
Sum_Phi_i = Sum_Phi_i + C(j) * Sqr(2) / (4 * Sqr(1 + M(i) / M(j))) * (1 + Sqr(V(i) / V(j)) * (M(j) / M(i)) ^ 0.25) ^ 2
Next j
MyFunction = MyFunction + C(i) * V(i) / Sum_Phi_i
Next i
End Function
我遇到的问题是它返回#VALUE!错误。显然我错误地定义了数据类型,因为当我在工作表中使用此函数时,我得到: A value used in the formula is of the wrong data type
我尝试将使用的数组 C、M 和 V 定义为 Range 或 Double 无济于事。我该如何解决这个问题?
除了这个问题,我还想知道如何确保所选单元格范围的大小相同。我在想一些事情:
x = UBound(C, 0)
y = UBound(M, 0)
z = UBound(M, 0)
If x <> y Or x <> z Or y <> z Then MyFunction = "Arrays are not of same size"
If x <> y Or x <> z Or y <> z Then Exit Function
这行得通吗?或者这会产生问题,因为输出将是一个字符串,而我将“MyFunction”定义为双精度?如果是这样,如何解决或者有更好的方法来强制用户做出相同大小的范围选择?
【问题讨论】:
标签: arrays excel user-defined-functions vba