包含文字的数字是无法直接相加的,需要先将数字部分提取出来在相加求和。根据数字所在单元格文本字符串位置的不同,可以使用MID函数或MIDB函数、RIGHT函数或RIGHTB函数、LEFT函数或LEFTB函数来进行提取。
MID 或MIDB 用途:MID 返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。MIDB返回文本串中从指定位置开始的特定数目的字符,该数目由用户指定。MIDB函数可以用于双字节字符。
语法:MID(text,start_num, num_chars)或MIDB(text, start_num,num_bytes)。
参数:Text 是包含要提取字符的文本串。Start_num 是文本中要提取的第一个字符的位置,文本中第一个字符的start_num 为1 ,以此类推;Num_chars指定希望MID 从文本中返回字符的个数;Num_bytes指定希望MIDB 从文本中按字节返回字符的个数。
实例:如果a1=电子计算机,则公式“=MID(A1,3,2)” 返回“计算”,=MIDB(A1,3,2)返回“子”。
RIGHT 或RIGHTB 用途:RIGHT 根据所指定的字符数返回文本串中最后一个或多个字符。RIGHTB根据所指定的字节数返回文本串中最后一个或多个字符。
语法:RIGHT(text,num_chars),RIGHTB(text,num_bytes) 。
参数:Text 是包含要提取字符的文本串;Num_chars 指定希望RIGHT 提取的字符数,它必须大于或等于0。如果num_chars 大于文本长度,则RIGHT 返回所有文本。如果忽略num_chars, 则假定其为1。Num_bytes 指定欲提取字符的字节数。
实例:如果A1=学习的革命,则公式“=RIGHT(A1,2)”返回“革命”,=RIGHTB(A1,2)返回“命”。
LEFT 或LEFTB用途:根据指定的字符数返回文本串中的第一个或前几个字符。此函数用于双字节字符。
语法:LEFT(text,num_chars)或LEFTB(text, num_bytes)。
参数:Text 是包含要提取字符的文本串;Num_chars指定函数要提取的字符数,它必须大于或等于0。Num_bytes按字节数指定由LEFTB 提取的字符数。
实例:如果A1=电脑爱好者,则LEFT(A1,2)返回“电脑”,LEFTB(A1,2)返回“电”。
Function mysum(aa As Range)
Set reg = CreateObject("VBSCRIPT.REGEXP")
reg.Global = True
reg.Pattern = "\d+"
For Each a In aa
Set mc = reg.Execute(a)
For i = 0 To mc.Count - 1
kk = kk & mc.Item(i)
Next
bb = bb + Val(kk)
kk = ""
Next
mysum = bb
End Function
自定义函数
假如你要求的数据是在A1:E1,那么输入公式=mysum(A1:E1)就可以得出结果
H3数组公式:
=SUM(-TEXT(RIGHT(TEXT(RIGHT(TRANSPOSE(LEFT(B3:F3,FIND("元",B3:F3)-1)),COLUMN(A:G)),),COLUMN(A:G)-1),"-0;;0;\0"))
按CTRL+SHIFT+回车键结束公式即可。
提取数字求和!