如何在单元格中添加一些特定数字

时间:2018-10-17 09:41:02

标签: excel vba excel-vba

在A1范围内

8cm书本+ 13cm尺子+ 0.34cm纸 那么我如何总结细胞内部的8 + 13 + 0.34然后= 21.34cm

然后将总和放入A2

——————更新问题————————

对不起,我必须让问题更清楚! 8厘米的书本+ 13厘米的直尺+标尺版本2#0.34厘米纸

我想知道它是否仍适用于所有主机的代码?

这个问题困扰我一个星期。 希望能得到答案! 谢谢!

4 个答案:

答案 0 :(得分:2)

尝试这个基于正则表达式的简单UDF。

Option Explicit

Function sumNums(str As String) As Double
    Dim n As Long
    Static rgx As Object, cmat As Object

    If rgx Is Nothing Then
        Set rgx = CreateObject("VBScript.RegExp")
    End If

    With rgx
        .Global = True
        .MultiLine = True
        .Pattern = "(\-?\d*\.?\d+)"
        If .test(str) Then
            Set cmat = .Execute(str)
            For n = 0 To cmat.Count - 1
                sumNums = sumNums + CDbl(cmat.Item(n))
            Next n
        End If
    End With
End Function

enter image description here

答案 1 :(得分:1)

这是一个用户定义的函数,仅使用字符串索引:

Function SumNumbers(s As String) As Currency
    Dim i As Long
    Dim j As Long

    For i = 1 To Len(s)
        If InStr("-0123456789.", Mid(s, i, 1)) Then
            j = i
            Do 
                i = i + 1
            Loop While InStr("0123456789.", Mid(s, i, 1))
            SumNumbers = SumNumbers + CCur(Mid(s, j, i - j))
        End If
    Next
End Function

将其放在新模块的Visual Basic编辑器(Shift + F11)中(右键单击项目,选择“插入...”和“模块”)。

在工作表中使用公式,例如在单元格B1中:

=SumNumbers(A1)

注意:我更喜欢使用CurrencyCCur来避免浮点错误。它希望数字最多包含4个小数,并且最多支持小数点分隔符前的14位数字。

答案 2 :(得分:1)

另一个解决方案是:

Function cal_cm(cl As Range) As Double
    Dim i%, testVal$, result$
    result = "="
    For i = 1 To Len(cl)
        testVal = cl.Characters(i, 1).Text
        If "0123456789+." Like "*" & testVal & "*" Then
            result = result & testVal
        End If
    Next i
    cal_cm = Evaluate(result)
End Function

测试

enter image description here

答案 3 :(得分:0)

这是不使用VBA的一种方法,但有一些限制:

  • 它希望每个数字后面都应加上“ cm”
  • 它希望每个数字都在其前面有一个空格(第一个数字可能在字符串的开始处除外)
  • 您需要知道输入的最大数字是多少

假设输入字符串在单元格A1中,则可以按以下步骤操作:

  • 将B1留空
  • 在C1中输入公式=IFERROR(MID($A1,1,FIND("cm",$A1,LEN(B1)+2)-1), "0")
  • 将C1复制到D1,E1和F1
  • 在G1中输入公式=VALUE(IFERROR(RIGHT(C1,LEN(C1)-FIND("@",SUBSTITUTE(C1," ","@",LEN(C1)-LEN(SUBSTITUTE(C1," ",""))),1)),C1))
  • 将G1复制到H1,I1和J1
  • 在K1中输入公式=SUM(G1:J1)

您将得到此结果。颜色编码标识了每个副本组:

enter image description here

K1将具有所需的输出。

请注意,F1(和J1)包含0。如果存在,它将获得输入中第四个值的值。

如果输入中可以嵌入5个或更多数值,您将了解如何为更多单元格腾出空间。