Excel:如何将用户定义的函数应用于许多元素,然后求和它们?

我想要做的是应用我自己的函数onlyDigits在select的所有元素,然后求和。

使用数组函数,你可以做类似的事情

{=SUM(SQRT(A2:A10))} 

总结一个select的所有平方根。 我想要做的就是用我自己的function有效地取代SQRT。 具体来说,我想能够拥有类似的东西

 {=SUM(PRODUCT(onlyDigits(A2:A10), B2:B10))} 

对每个元素仅执行数字,将其乘以下面的元素,然后将其与总和相加,表示一个单元格中的最终和。

我的函数只有数字input(一个单元格),并从中检索数字,所以这可能是一个问题,不仅接收数字input(但我不知道,因此我在这里)。 这是源代码,我从一个不同的问题复制它:

 Function onlyDigits(s As String) As String ' Variables needed (remember to use "option explicit"). ' Dim retval As String ' This is the return string. ' Dim i As Integer ' Counter for character position. ' ' Initialise return string to empty ' retval = "" ' For every character in input string, copy digits to ' ' return string. ' For i = 1 To Len(s) If Mid(s, i, 1) >= "0" And Mid(s, i, 1) <= "9" Then retval = retval + Mid(s, i, 1) End If Next ' Then return the return string. ' onlyDigits = retval End Function 

这可能吗? 如果是这样,我该怎么办呢? 非常感谢!

你需要返回一个数组:

 Function onlyDigits(s As Range) As Variant() ' Variables needed (remember to use "option explicit"). ' Dim retval() As Variant ' This is the return string. ' Dim i As Integer ' Counter for character position. ' ' Initialise return string to empty ' ReDim retval(1 To s.Cells.Count) ' For every character in input string, copy digits to ' ' return string. For j = 1 To s.Cells.Count ' For i = 1 To Len(s(j)) If IsNumeric(Mid(s(j), i, 1)) Then retval(j) = retval(j) + Mid(s(j), i, 1) End If Next i retval(j) = CLng(retval(j)) Next j ' Then return the return string. ' onlyDigits = retval End Function 

返回的数组是水平的,所以你需要转置它:

 =SUMPRODUCT(TRANSPOSE(onlyDigits(A1:A5)),B1:B5) 

它需要使用Ctrl-Shift-Enter进行数组input。

在这里输入图像说明