我想這樣做: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