带运算符计算
《excel吧提问-文字数字混合求和》,此类文字数字混合在同一单元格内的计算,可以使用vba正则表达式提取内容计算结果
建议:备注文字内容用[ ]分隔,( )定义运算顺序,半角
Function EVAL_REMARK(ByVal rng$)
'对单元格带备注的数字、运算符、公式计算,返回计算结果
'建议:备注文字内容用[ ]分隔,( )定义运算顺序,半角
Dim result
rng = Replace(rng, "【", "["): rng = Replace(rng, "】", "]") '全角转半角
rng = Replace(rng, "(", "("): rng = Replace(rng, ")", ")")
With CreateObject("vbscript.regexp") '正则表达式
.Global = True
.Pattern = "\[.*?\]|[^0-9+-/*^()]"
result = .Replace(rng, "")
EVAL_REMARK = Application.Evaluate(result) '计算文本表达式,返回结果
End With
End Function
举例
不带运算符求和
仅对文字数字混合的字符串,提取数字后求和,不带运算符计算
Function RE_sum(ByVal rng$)
'对单元格带文字的数字求和,不含运算符+-*/^
Dim result, i&, num&
With CreateObject("vbscript.regexp") '正则表达式
.Global = True
.Pattern = "\d+(\.\d+)?"
Set mhs = .Execute(rng)
num = mhs.Count
If num = 0 Then RE_sum = "": Exit Function
ReDim result(1 To num)
For i = 0 To num - 1
result(i + 1) = mhs(i).Value
Next
RE_sum = Application.Evaluate(Join(result, "+")) '求和,返回结果
End With
End Function