我想要做的是将我自己的函数onlyDigits应用于选择中的所有元素,然后对它们求和。
使用数组函数,您可以执行
之类的操作{=SUM(SQRT(A2:A10))}
总结选择的所有平方根。我想要做的是用我自己的功能有效地替换SQRT。具体来说,我希望能够有像
这样的东西{=SUM(PRODUCT(onlyDigits(A2:A10), B2:B10))}
仅对每个元素执行数字,将其乘以下面的元素,然后将其加到总和中,表示一个单元格中的最终总和。
我的函数onlyDigits接受它的输入(一个单元格)并只检索它的数字,所以它不仅可以接收数字输入(但我不确定,因此我在这里)。这是来源,我从另一个问题复制了它:
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
这可能吗?如果是这样,我该怎么办?非常感谢!
答案 0 :(得分:4)
您需要返回一个数组:
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输入数组。