我想这样做:SUM(Function(A1:A6))
。目前只有SUM(Function(A1),Function(A2), ... Function(A6))
似乎可以。请帮忙!如何在Excel 2010中执行此操作,函数数组之和?
非常具体我有微距功能TD(x,y),其中x和y是单变量 现在我想做的SUM(TD(X1:X10,Y))
我想这样做:SUM(Function(A1:A6))
。目前只有SUM(Function(A1),Function(A2), ... Function(A6))
似乎可以。请帮忙!如何在Excel 2010中执行此操作,函数数组之和?
非常具体我有微距功能TD(x,y),其中x和y是单变量 现在我想做的SUM(TD(X1:X10,Y))
您可以输入公式使用您的第一个版本,如果您在Excel 2010中按CTRL + SHIFT + ENTER。这将使其成为基于数组的公式。举例来说,这应该很好地工作:
=SUM(A1:A6^2)
编辑:要使用用户定义的函数,你必须修改你的函数取一个数组参数。按CTRL + SHIFT + ENTER时,它将所有范围直接作为参数处理到函数中,并期望应用所有函数来获取范围参数并返回数组结果。下面是一个假设的功能TD(x, y) = x + y
,仅仅返回两个参数的总和的例子:
Function TD(ByVal x As Integer, ByVal y As Integer) As Integer
TD = x + y
End Function
功能TD
如上解释,我们正在定义的基函数。
Function TDArray(ByVal x As Variant, ByVal y As Variant) As Integer()
Dim xc() As Integer
Dim yc() As Integer
Dim count As Integer
If TypeName(x) = "Range" Then
xc = GetRangeValues(x)
count = UBound(xc)
End If
If TypeName(y) = "Range" Then
yc = GetRangeValues(y)
count = UBound(yc)
End If
Dim i As Integer
Dim xVal As Integer
Dim yVal As Integer
Dim result() As Integer
ReDim result(1 To count)
For i = 1 To count
If TypeName(x) = "Range" Then xVal = xc(i) Else xVal = x
If TypeName(y) = "Range" Then yVal = yc(i) Else yVal = y
result(i) = TD(xVal, yVal)
Next
TDArray = result
End Function
功能TDArray
是镜像的TD
的功能性的功能,而且还能够采取的阵列作为参数。它的工作方式是接受Variant
参数,然后检查是否传递了Range或整数。如果范围被传递,它将被转换为一个数组,并且函数TD
被应用于数组中的每个元素。结果然后作为数组返回到下一个函数,在本例中,该函数将调用SUM
。
Function GetRangeValues(ByVal r As Range) As Integer()
Dim c As Range
Dim result() As Integer
Dim i As Integer
ReDim result(1 To r.Cells.count)
i = 1
For Each c In r
result(i) = c.Value
i = i + 1
Next
GetRangeValues = result
End Function
功能GetRangeValues
是一个简单的辅助函数采用一个范围参数并将其转换成一个阵列,其是更容易浏览,因为它可以通过索引进行迭代。使用这些函数定义,现在可以将下列函数输入到单元格中,然后按下CTRL + SHIFT + ENTER,并获得预期结果(请注意,我们使用数组形式TDArray
- 如果将计算应用于对参数,说TD(A4,A5)
,那么你用TD
;对于任何范围,则必须使用TDArray
):
=SUM(TDArray(X1:X10,y))
希望这有助于!
很酷。假设它是用户定义的函数(不是Excel函数)? –
非常特别,我有一个宏函数TD(x,y),其中x和y是单变量 现在我想要做SUM(TD(x1:x10,y)) –
从我的测试中,它看起来像你必须修改你的函数来获取'Range'对象,并且如果你想让它参与一个基于数组的公式,则返回一个数组。我掀起了一个原型,并将在今晚晚些时候将它张贴在这里,当我获得更多时间。使用另一列来存储'TD(x,y)'的结果然后求和结果可能会容易得多。 – mellamokb