分享

这个新函数真好用,可以取代很复杂的VBA,WPS表格越来越懂中国人

 Excel不加班 2024-06-29 发布于广东

VIP学员的问题,要从购买明细里面将金额提取出来并求和。

如果是WPS表格最新版,这种问题非常简单,跟卢子来看看。

最新版提供了REGEXP函数,专门处理这种疑难杂症。假如需要将所有金额提取出来放在不同单元格。

=REGEXP(A2,"\d+")

如果要提取里面的文字,只需增加第三参数,写2即可。

=REGEXP(A2,"\d+",2)

这就是最原始的用法,现在是要对金额求和,因为REGEXP提取出来的内容是文本格式,需要加--转换成数值格式,才能求和。

=SUM(--REGEXP(A2,"\d+"))

以上是针对正数,如果含有小数点,公式有所改变。

=SUM(--REGEXP(A2,"\.?\d+"))

里面如果含有负数,也可以处理。

=SUM(--REGEXP(A2,"-?\d+\.?\d+"))

以上,其实就是正则表达式,Excel里面也有,不过需要借助VBA。

=正则提取(A2,"(-?\d+\.?\d+)","+",2)

点开发工具,VB,插入模块,将下面这段很长的代码粘贴进去。

Option ExplicitFunction 正则提取(Str As String, Optional Reg As String = "(\d+)", Optional Delimiter As String = ",", Optional 方式 = 0, Optional ToNum As Integer = 1)
' Str 需处理的文本
' Reg 正则表达式,默认为(\d+)提取连续数字
' Delimiter 分隔符,默认为逗号,
' 方式 提取后处理方式, ' 0 表示取数字中的第n个字符串 ' 1 表示提取后和分隔符Delimiter连接起来, ' 2 表示求和,注意需提取数字
Dim objRegEx As Object, objMh, i, S
Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = Reg
objRegEx.Global = True
Set objMh = objRegEx.Execute(Str)
If objMh.Count > 0 Then If 方式 = 0 Then S = objMh(ToNum - 1).SubMatches(0) 正则提取 = S Exit Function End If For i = 0 To objMh.Count - 1 If 方式 = 1 Then
S = S & Delimiter & objMh(i).SubMatches(0)
Else
S = S + Val(objMh(i).SubMatches(0))
End If
Next
End If
正则提取 = IIf(方式 = 1, Mid(S, 2), S)
End Function

新版本的WPS表格确实更懂中国人,将复杂问题简单化。

作者:卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多