Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel:如何将用户定义的函数应用于多个元素,然后对它们求和?_Excel_Vba - Fatal编程技术网

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

Excel:如何将用户定义的函数应用于多个元素,然后对它们求和?,excel,vba,Excel,Vba,我要做的是只对选择中的所有元素应用我自己的函数数字,然后求和 使用数组函数,您可以执行以下操作 {=SUM(SQRT(A2:A10))} 对所选内容的所有平方根求和。我想做的是用我自己的函数有效地替换SQRT。具体来说,我希望能有这样的东西 {=SUM(PRODUCT(onlyDigits(A2:A10), B2:B10))} 它只对每个元素执行数字运算,将其乘以下面的一个,然后将其添加到总和中,表示一个单元格中的最终总和 我的函数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
函数仅将数字(作为字符串)作为字符串
'需要变量(记住使用“选项显式”)。'
Dim retval As String“这是返回字符串。”
Dim i为整数“字符位置计数器”
'将返回字符串初始化为空'
retval=“”
'对于输入字符串中的每个字符,将数字复制到'
“返回字符串。”
对于i=1到Len(s)

如果Mid(s,i,1)>=“0”和Mid(s,i,1),则需要返回一个数组:

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键输入数组


我不太清楚,为什么函数
是字符串
?你不想返回某种数值吗?不应该是
长的
双的
?您所说的“不仅接收数字输入”是什么意思?你能提供更多的信息吗?例如工作表中的数据样本,以及如何应用此
函数
?还有,预期的结果是什么?