如何在Excel中提取并求和括号内的所有数字(多实例场景)
Excel提取单元格内所有括号中的数字并求和的解决方案
方法1:自定义VBA函数(全版本通用)
如果你的Excel版本没有动态数组功能,用这个方法最稳妥:
- 按下
Alt + F11打开VBA编辑器 - 右键左侧的工程窗口,选「插入」→「模块」
- 把下面的代码粘贴进去:
Function SumNumbersInBrackets(rng As Range) As Double Dim regEx As Object Dim matches As Object Dim match As Object Dim total As Double Set regEx = CreateObject("VBScript.RegExp") regEx.Pattern = "\((\d+)\)" regEx.Global = True Set matches = regEx.Execute(rng.Value) total = 0 For Each match In matches total = total + CDbl(match.SubMatches(0)) Next match SumNumbersInBrackets = total End Function
- 把工作簿存成
.xlsm格式(必须是启用宏的格式,不然函数会失效) - 在要出结果的单元格里输入
=SumNumbersInBrackets(A1)(把A1换成你存目标内容的单元格),回车就得到求和结果了
方法2:纯公式解法(无宏,适用于Excel 2016+或365)
不想折腾宏的话,直接用公式组合搞定:
通用公式(兼容多数版本)
=SUMPRODUCT(--TEXT(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(A1,"(", "</s><s>"),")","</s><s>")&"</s></t>","//s[number(.)=.]"),"0;;0;0"))
Excel 365简化版(支持动态数组)
=SUM(--TEXT(FILTERXML("<x><y>"&SUBSTITUTE(SUBSTITUTE(A1,"(", "</y><y>"),")","</y><y>")&"</y></x>","//y[translate(.,'0123456789','')='']"),"0"))
简单说下公式逻辑:
用SUBSTITUTE把括号替换成XML标签,让FILTERXML能提取出所有内容,再筛选出纯数字部分,转成数值后求和。
测试验证
比如单元格A1内容是:abc(200), def(300), gijklmno(5000), pqrstuvwx yz(50000)
用上面任意一种方法,都会算出55500的结果
内容的提问来源于stack exchange,提问作者Shanu Patil
相关产品推荐
相关产品推荐

