让
在A1范围内
8cm书本+ 13cm尺子+ 0.34cm纸 那么我如何总结细胞内部的8 + 13 + 0.34然后= 21.34cm
然后将总和放入A2
——————更新问题————————
对不起,我必须让问题更清楚! 8厘米的书本+ 13厘米的直尺+标尺版本2#0.34厘米纸
我想知道它是否仍适用于所有主机的代码?
这个问题困扰我一个星期。 希望能得到答案! 谢谢!
答案 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
答案 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)
注意:我更喜欢使用Currency
和CCur
来避免浮点错误。它希望数字最多包含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
测试
答案 3 :(得分:0)
这是不使用VBA的一种方法,但有一些限制:
假设输入字符串在单元格A1中,则可以按以下步骤操作:
=IFERROR(MID($A1,1,FIND("cm",$A1,LEN(B1)+2)-1), "0")
=VALUE(IFERROR(RIGHT(C1,LEN(C1)-FIND("@",SUBSTITUTE(C1," ","@",LEN(C1)-LEN(SUBSTITUTE(C1," ",""))),1)),C1))
=SUM(G1:J1)
您将得到此结果。颜色编码标识了每个副本组:
K1将具有所需的输出。
请注意,F1(和J1)包含0。如果存在,它将获得输入中第四个值的值。
如果输入中可以嵌入5个或更多数值,您将了解如何为更多单元格腾出空间。