我在单元格中有如下数据:
良好响应 -6、RNR -2、无声音 -1
我只需要计算单元格中数字的总和。如何用一个公式来实现?
答案1
我使用 ExcelRegEx 查找/替换插件,它为 Excel 添加了正则表达式功能。
(我与该插件没有任何关系,只是一个狂热用户)
在这里,您可以使用如下公式来查找并求和所有数字:
=SUM(RegExFind(A1,"\d+"))
或者也考虑负值:
=SUM(RegExFind(A1,"[-\d]+"))
答案2
根据提供的信息并假设只会提取 3 个值,每个值的长度为 1 位数字,以下内容适用于A2:
=LEFT(SUMPRODUCT(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$25),1))* ROW($1:$25),0),ROW($1:$25))+1,1)*10^ROW($1:$25)/10),1)+RIGHT(SUMPRODUCT(MID(0&A2,LARGE(INDEX(ISNUMBER(--MID(A2,ROW($1:$25),1))* ROW($1:$25),0),ROW($1:$25))+1,1)*10^ROW($1:$25)/10),1)+RIGHT(A2,1)
当然我在这里做了一些假设,
如果这不起作用,请向我详细解释您的数据是如何构造的等等,我会尝试修改。
答案3
如果您的数据确实如您所显示的那样,数字前面有一个<space>
,后面跟着一个<comma>
或字符串的结尾,那么您可以使用以下内容。
定义公式并seq_99
命名
seq_99 refers to: =IF(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))=1,1,(ROW(INDEX($1:$65535,1,1):INDEX($1:$65535,255,1))-1)*99)
然后你可以使用这个数组输入公式:
=SUM(IF(ISNUMBER(--TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE(A1,","," "))," ",REPT(" ",99)),seq_99,99))),--TRIM(MID(SUBSTITUTE(TRIM(SUBSTITUTE(A1,","," "))," ",REPT(" ",99)),seq_99,99))))
到数组输入公式,按住ctrl+shift并点击enter。如果你操作正确,Excel 会{...}
在公式周围放置括号,你可以在公式栏中看到它。
我假设-
表示为负数。如果不是这样,则修改公式以排除它是很简单的。
答案4
我想建议一个小的 VBA 函数。请注意,分隔符可以按如下所示进行调整。
Function SumNumbers(rngS As Range, Optional strDelim As String = "-") As Double
Dim xNums As Variant, lngNum As Long
xNums = Split(rngS, strDelim)
For lngNum = LBound(xNums) To UBound(xNums) Step 1
SumNumbers = SumNumbers + Val(xNums(lngNum))
Next lngNum
End Function
笔记:
- 按通常方式使用此函数:=SumNumbers(单元格地址)。
- 如果分隔符是 SPACE,则使用strDelim 作为字符串 = “ “在参数列表中。
- 如果分隔符是逗号,则使用strDelim 作为字符串 = ","在参数列表中。
我希望这可以帮助你。