gpt4 book ai didi

arrays - Excel UDF 接受范围和数组作为参数,如 'SUM'

转载 作者:行者123 更新时间:2023-12-03 01:00:59 26 4
gpt4 key购买 nike

我正在编写一个需要接受数组和范围的 UDF。

通常将参数声明为变体是可行的,但 Range 是一个对象,因此这不再适用。话虽如此,我粘贴的代码仅在传递数组时才有效。
这是基于 SUM 的理论示例:

Function TSUM(numbers() As Variant) As Variant
Dim i As Integer
For i = 1 To UBound(numbers, 1)
TSUM = TSUM + numbers(i)
Next i
End Function

=TSUM({1,1}) Returns 2
=TSUM(A1:B1) Returns #VALUE!

那么我如何修复上面的示例以接受范围?

最佳答案

如果您愿意逐项对数组/范围求和,我只需更改为使用适用于范围或数组的 For Each 循环即可。

这是该版本

Public Function TSUM(numbers As Variant) As Variant
Dim i As Variant

For Each i In numbers
TSUM = TSUM + i
Next i
End Function

如果您通常希望根据参数类型来处理函数,则可以使用 TypeName() 和切换逻辑。这是您使用该方法的功能。为了独一无二,我将其称为 TSUM2。

Public Function TSUM2(numbers As Variant) As Variant
Dim i As Integer

If TypeName(numbers) = "Range" Then
TSUM2 = Application.WorksheetFunction.Sum(numbers)
Else
For i = 1 To UBound(numbers, 1)
TSUM2 = TSUM2 + numbers(i)
Next i
End If
End Function

请注意,在这两个示例中,我从数字参数中删除了括号(之前是 numbers() as Variant)。这允许它接受范围输入。

如果您采用第二种方法,请务必调试并验证可能通过的 TypeName。

关于arrays - Excel UDF 接受范围和数组作为参数,如 'SUM',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29542306/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com