无法使用 vba 函数中的索引结果进行进一步计算
Cannot use result of index in vba function for further computation
我正在 Excel VBA 中构建自定义函数以接收具有 Webull 分布的数组的第 n 个(此处:第 5 个)元素。这行得通,但是我无法对结果进行进一步的计算,例如简单乘法而不会出错。
Function weib(xr, shape, scaler)
n = Application.Weibull_Dist(xr, shape, scaler * 100, 0)
weib = n
End Function
Function good(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0)
good = n
End Function
Function nogood(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0) * 1
nogood = n
End Function
为什么“nogood”功能不起作用?它只在末尾添加 * 1 - 我该如何解决?
在测试中,n
是一个 Variant
数组,下限为 1
。尝试乘以 1 时会导致 Type Mismatch
。因此一个(较差的)解决方案是:
Function good(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0)
good = n(1)
End Function
Function nogood(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0)
nogood = n(1) * 1
End Function
更好的解决方案是在 Index
调用中使用 1
而不是 0
:
Function good(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 1)
good = n
End Function
Function nogood(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 1) * 1
nogood = n
End Function
您甚至可以完全跳过使用 Index
(也许是最佳解决方案):
Function good(xr, shape, scaler)
good = Application.Weibull_Dist(xr, shape, scaler * 100, 0)(5, 1)
End Function
Function nogood(xr, shape, scaler)
nogood = Application.Weibull_Dist(xr, shape, scaler * 100, 0)(5, 1) * 1
End Function
我正在 Excel VBA 中构建自定义函数以接收具有 Webull 分布的数组的第 n 个(此处:第 5 个)元素。这行得通,但是我无法对结果进行进一步的计算,例如简单乘法而不会出错。
Function weib(xr, shape, scaler)
n = Application.Weibull_Dist(xr, shape, scaler * 100, 0)
weib = n
End Function
Function good(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0)
good = n
End Function
Function nogood(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0) * 1
nogood = n
End Function
为什么“nogood”功能不起作用?它只在末尾添加 * 1 - 我该如何解决?
在测试中,n
是一个 Variant
数组,下限为 1
。尝试乘以 1 时会导致 Type Mismatch
。因此一个(较差的)解决方案是:
Function good(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0)
good = n(1)
End Function
Function nogood(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 0)
nogood = n(1) * 1
End Function
更好的解决方案是在 Index
调用中使用 1
而不是 0
:
Function good(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 1)
good = n
End Function
Function nogood(xr, shape, scaler)
n = Application.Index(Application.Weibull_Dist(xr, shape, scaler * 100, 0), 5, 1) * 1
nogood = n
End Function
您甚至可以完全跳过使用 Index
(也许是最佳解决方案):
Function good(xr, shape, scaler)
good = Application.Weibull_Dist(xr, shape, scaler * 100, 0)(5, 1)
End Function
Function nogood(xr, shape, scaler)
nogood = Application.Weibull_Dist(xr, shape, scaler * 100, 0)(5, 1) * 1
End Function