EXCEL中对1个单元格中多个数字求和

本文介绍了在Excel中对一组数字进行求和的三种方法:使用SUM函数结合MID函数提取并求和;定义名称利用EVALUATE进行转换求和;通过VBA编程实现灵活求和。这些方法适用于处理包含逗号分隔的数值字符串。

如A1=3779、3759、3769、3781、3750,A2对A1中4个数字求和怎么求!请高手赐教!

方法一:在B1中输入公式=SUM(MID(A1,{1,6,11,16,21},4)*1) 
方法二:定义一个名称,比如“求和”,输入=EVALUATE(SUBSTITUTE(Sheet1!$A2,"、","+"))后确定,在B1中输入=求和,即得到你要的结果。方法二通用性更强些。
方法三:用VBA求解。进入VBE编辑环境,插入模块,输入代码:
Function 单元格求和(i As Range)
单元格求和 = Application.Evaluate(WorksheetFunction.Substitute(i, "、", "+"))
End Function
回到刚才的表上在B1中输入=单元格求和(A1)即可得到你想要的结果。

多个单元格的全部数字相加除以百分比:
=(EVALUATE(SUBSTITUTE($C2,",","+"))+EVALUATE(SUBSTITUTE($C3,",","+"))+EVALUATE(SUBSTITUTE($C4,",","+")))*24%

转载于:https://www.cnblogs.com/kzwrcom/p/6185216.html

<think>好的,我现在需要解决用户的问题:在Excel中提同一单元格内的多个数字并相。用户可能遇到的情况是,一个单元格里有多个数字,比如“5件商品,价格分别为12元、34.5元、6.7元”,他们把这些数字出来然后求和。 首先,我得Excel有什么功能可以实现这个。可能需要用文本函数来分割内容,提数字,再转换成数值,最后相。不过单元格里的数字格式可能不一致,比如有整数、小数,还可能夹杂文字,所以需要处理这些情况。 用户提到的例子是类似“5件商品,价格分别为12元、34.5元、6.7元”,其中要提12、34.5、6.7并求和。这时候,首先要考虑如何从文本中提所有数字,包括可能的小数点。可能需要使用正则达式或者一些文本处理函数。 在Excel中,常规函数可能无法直接处理正则达式,但新版本的Excel支持动态数组和TEXTSPLIT等函数。不过如果用户使用的是旧版本,可能需要用传统的函数组合。比如,用SUBSTITUTE替换掉非数字字符,然后分割文本。 或者,可以使用VBA自定义函数,用正则达式来提所有数字。但用户可能不希望启用宏,所以最好优先考虑公式方法。 可能的步骤: 1. 使用SUBSTITUTE替换掉单位“元”和其他非数字字符,但保留数字和小数点。 2. 将处理后的字符串分割成多个数字。 3. 将分割后的文本转换为数值。 4. 对数值进行求和。 但如何准确提数字呢?比如,原文本中的数字可能被逗号或其他符号分隔。假设用户的分隔符是顿号、逗号等,可以用FIND或SEARCH函数来定位分隔符的位置。 另一个方法是利用FILTERXML函数,将文本转化为XML结构,然后提数字节点。不过这可能比较复杂,特别是处理小数点和不同分隔符的情况下。 或者,使用MID、ROW、INDIRECT等函数组合,逐个字符判断是否为数字或小数点,然后提连续的数字。例如,创建一个数组,逐个检查字符是否是数字或小数点,然后合并相邻的数字一个数值。这种方法比较复杂,但可能可行。 例如,可以生成一个字符数组,遍历每个字符,标记数字开始和结束的位置,然后用MID提每个数字段,再转换为数值。最后将所有数值相。 但这样的公式可能会很冗长,尤其是处理多个数字的情况。例如,对于文本中的每个数字,需要确定其位置,然后分割出来,这可能涉及数组公式或使用TEXTJOIN和FILTER的组合。 或者,使用VBA中的正则达式,编写一个用户自定义函数,遍历所有匹配的数字,并返回它们的和。这样可以更直接地解决问题,但需要用户允许启用宏。 现在需要比较公式方法和VBA方法的优缺点。如果用户需要无需启用宏的解决方案,必须使用公式。但公式可能较为复杂,尤其是处理不同格式的情况。 比如,假设用户的数据在A1单元格,内容为“5件商品,价格分别为12元、34.5元、6.7元”,需要提12、34.5、6.7,求和为53.2。 步骤: 1. 移除所有非数字和小数点的字符,但保留数字和分隔符。例如,将“元”、“件”等替换为空,但保留逗号或顿号作为分隔符。或者,替换所有非数字和点的字符为特定分隔符,比如逗号,然后用TEXTSPLIT分割。 例如,使用SUBSTITUTE多次替换不同的文本,但这样可能不够灵活。更通用的方法是使用正则达式替换,但Excel公式不支持,所以可能需要用嵌套的SUBSTITUTE函数。 例如,将每个可能的非数字字符替换为空,但这样可能导致多个小数点被保留,或者数字连在一起。比如,如果原文本是“12元34.5元”,替换掉“元”后变成“1234.5”,这样会被视为一个数字。因此,需要保留分隔符。 或许更好的方法是提每个数字,不管它们的位置如何,然后分割成多个数值。比如,使用TEXTJOIN和数组公式,将每个数字和小数点连接起来,当遇到非数字字符时插入分隔符。 比如,可以创建一个数组公式,逐个字符检查,如果是数字或小数点则保留,否则替换为分隔符,然后分割处理后的字符串。 例如,公式可能如下(假设数据在A1): =SUM(--TEXTSPLIT(TEXTJOIN(",",TRUE,IF(ISNUMBER(-MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)) + (MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1)="."), MID(A1,ROW(INDIRECT("1:"&LEN(A1))),1), ",")),",")) 这个公式的思路是: - 将每个字符拆分成数组。 - 判断每个字符是否为数字或小数点,如果是,保留该字符,否则替换为逗号。 - 使用TEXTJOIN将处理后的字符连接成一个字符串,用逗号分隔不同数字段。 - 使用TEXTSPLIT分割这个字符串,得到各个数字。 - 转换为数值并用SUM求和。 不过这个公式可能需要处理连续的分隔符,比如多个逗号,导致空值。因此,在TEXTSPLIT中使用TRUE参数忽略空值。 这个公式在支持动态数组的Excel版本中有效,比如Office 365。对于旧版本,可能需要使用更复杂的数组公式,按Ctrl+Shift+Enter输入。 另外,需要注意小数点的情况,比如多个小数点可能导致错误,例如“12.34.5”会被视为无效数字,但可能用户的数据中不会有这种情况。 此外,如果单元格中的数字以其他方式分隔,比如顿号、空格,可能需要调整替换的字符。 测试这个公式,假设A1是“5件商品,价格分别为12元、34.5元、6.7元”,处理后的TEXTJOIN结果可能是",,,,,12,,34.5,,6.7",然后TEXTSPLIT按逗号分割得到"12", "34.5", "6.7",转换为数值后相12+34.5+6.7=53.2。 这样公式应该能正确计算。 不过,可能遇到的问题是,如果数字前有负号,或者有科学计数法,但用户的问题中没有提到这些情况,可以暂时不考虑。 总结步骤: 1. 使用MID、ROW、INDIRECT将字符串拆分为单个字符的数组。 2. 判断每个字符是否为数字或小数点,如果是则保留,否则替换为分隔符(如逗号)。 3. 使用TEXTJOIN连接这些字符,形成由分隔符分隔的数字字符串。 4. 使用TEXTSPLIT分割该字符串,得到各个数字。 5. 转换为数值并求和。 这样,用户就可以得到一个公式解决方案,无需VBA。 当然,如果用户的Excel版本不支持TEXTSPLIT或TEXTJOIN,可能需要其他方法,比如使用FILTERXML或更复杂的数组公式。比如,使用MID、FIND等函数逐个提每个数字位置,但这样公式会更长。 或者,使用VBA自定义函数,如: Function SumNumbersInCell(cell As Range) As Double Dim regex As Object Dim matches As Object Dim sum As Double sum = 0 Set regex = CreateObject("VBScript.RegExp") regex.Global = True regex.Pattern = "(\-?\d+\.?\d*)|(\-?\.\d+)" '匹配整数、小数、负数等 Set matches = regex.Execute(cell.Value) For Each match In matches sum = sum + CDbl(match.Value) Next SumNumbersInCell = sum End Function 这样用户就可以使用=SumNumbersInCell(A1)来求和。但需要指导用户如何启用宏和安装这个函数。 所以,回答用户时需要提供两种方法:公式法和VBA法,并说明各自的适用情况,以及可能的注意事项,比如版本兼容性、数据格式的假设等。</think>在Excel中提同一单元格内的多个数字并相,可通过以下两种方法实现: --- ### **方法一:使用公式(适用于Office 365或支持动态数组的版本)** **步骤说明**: 1. **提所有数字和小数点**: 将非数字和小数点的字符替换为分隔符(如逗号),形成数字字符串。 **公式**: ```excel =TEXTJOIN(",", TRUE, IF(ISNUMBER(-MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)) + (MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)="."), MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1), ",")) ``` 此公式会将文本如`"12元、34.5元、6.7元"`转换为`"12,34.5,6.7"`。 2. **分割并求和**: 使用`TEXTSPLIT`分割字符串,再转换为数值求和。 **完整公式**: ```excel =SUM(--TEXTSPLIT(TEXTJOIN(",", TRUE, IF(ISNUMBER(-MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)) + (MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1)="."), MID(A1, ROW(INDIRECT("1:"&LEN(A1))), 1), ",")), ",")) ``` **结果示例**: 若A1为`"5件商品,价格分别为12元、34.5元、6.7元"`,则计算结果为`53.2`。 --- ### **方法二:使用VBA自定义函数(支持所有Excel版本)** **步骤说明**: 1. 按`Alt+F11`打开VBA编辑器。 2. 插入新模块,粘贴以下代码: ```vba Function SumNumbersInCell(cell As Range) As Double Dim regex As Object, matches As Object Dim sum As Double sum = 0 Set regex = CreateObject("VBScript.RegExp") regex.Global = True regex.Pattern = "-?\d+\.?\d*" '匹配整数、小数(含负数) Set matches = regex.Execute(cell.Value) For Each match In matches sum = sum + CDbl(match.Value) Next SumNumbersInCell = sum End Function ``` 3. 返回Excel,输入公式`=SumNumbersInCell(A1)`即可自动求和。 --- ### **注意事项** 1. **公式法**: - 需确保数字间有非数字字符分隔(如空格、逗号)。 - 不支持负数,若需处理负数需调整公式逻辑。 2. **VBA法**: - 需启用宏(文件 → 选项 → 信任中心 → 启用宏)。 - 正则达式`-?\d+\.?\d*`可匹配整数、小数及负数。 --- ### **示例演示** | 原始文本(A1) | 公式结果 | VBA结果 | |----------------------------------|---------|--------| | `"5件商品,价格分别为12元、34.5元、6.7元"` | 53.2 | 53.2 | 选择适合的方法,即可轻松实现单元格内多数字的提求和
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值