Excel·VBA文字数字混合计算、求和

这篇博客介绍了如何在Excel中处理文字数字混合的计算问题。通过VBA的正则表达式,实现了带有运算符的计算函数`EVAL_REMARK`和不带运算符的求和函数`RE_sum`。这两个函数能够智能地识别并处理单元格内的数字、运算符和备注,分别进行计算和求和操作,对于日常数据处理工作极具实用性。
该文章已生成可运行项目,

带运算符计算

《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

举例

在这里插入图片描述

本文章已经生成可运行项目
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔_51

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值