汇总Excel单元格中的数字(长字符串和短字符串)

我正在从事与频率有关的研究。

我想对每个单元格中的所有数字求和,并将它们减少为单个数字。

一些单元格有2个数字,另一些单元格有13个数字。像这些..

24.0542653897891
25.4846064424057
27
28.6055035477009

我尝试了几种公式来做到这一点。最好的是我有2位数字,我再也不能求和得出一个结果。

像这些公式:

=SUMPRODUCT(MID(SUBSTITUTE(B5,".",""),ROW(INDIRECT("1:"&LEN(B5)-1)),1)+0)
=SUMPRODUCT(1*MID(C5,ROW(INDIRECT("1:"&LEN(C5))),1))

有什么建议吗? 先感谢您。

评论
  • 十梦九你
    十梦九你 回复

    我希望您正在寻找遵循UDF之类的东西。

    Function SumToOneDigit(myNumber)
    Dim temp: temp = 0
    CalcLoop:
    
    For i = 1 To Len(myNumber)
    If IsNumeric(Mid(myNumber, i, 1)) Then temp = temp + Mid(myNumber, i, 1)
    Next
    
    If Len(temp) > 1 Then
    myNumber = temp
    temp = 0
    GoTo CalcLoop
    End If
    
    SumToOneDigit = temp
    End Function
    
  • xiebruce
    xiebruce 回复

    您可以使用类似以下的公式:

    =SUMPRODUCT(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s"))
    

    You might need an extra SUBSTITUTE for changing . to , if that's your decimal delimiter:

    =SUMPRODUCT(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,".",",")," ","</s><s>")&"</s></t>","//s"))
    

    enter image description here

    但是,您可能也可以像其他人建议的那样使用UDF。不过,有些事情告诉我,我可能误解了您的问题...

  • 六道仙人
    六道仙人 回复

    除了使用“文本到列”作为一次性转换之外,这在VBA中相对容易实现,方法是创建一个用户函数,将数据作为字符串接受,将其拆分为由空格分隔的数组,然后循环将它们相加的元素。

    将以下VBA代码添加到新模块中:

    Function fSumData(strData As String) As Double
        On Error GoTo E_Handle
        Dim aData() As String
        Dim lngLoop1 As Long
        aData = Split(strData, " ")
        For lngLoop1 = LBound(aData) To UBound(aData)
            fSumData = fSumData + CDbl(aData(lngLoop1))
        Next lngLoop1
    fExit:
        On Error Resume Next
        Exit Function
    E_Handle:
        MsgBox Err.Description & vbCrLf & vbCrLf & "fSumData", vbOKOnly + vbCritical, "Error: " & Err.Number
        Resume fExit
    End Function
    

    然后将其输入到Excel工作表中的单元格中:

    =fSumData(A1)
    

    问候,