VIP学员的问题,要从购买明细里面将金额提取出来并求和。 ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_2_20240629074530159.png)
如果是WPS表格最新版,这种问题非常简单,跟卢子来看看。 最新版提供了REGEXP函数,专门处理这种疑难杂症。假如需要将所有金额提取出来放在不同单元格。 ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_3_20240629074530315.png)
如果要提取里面的文字,只需增加第三参数,写2即可。 ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_4_20240629074530627.png)
这就是最原始的用法,现在是要对金额求和,因为REGEXP提取出来的内容是文本格式,需要加--转换成数值格式,才能求和。 ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_5_2024062907453165.png)
以上是针对正数,如果含有小数点,公式有所改变。 =SUM(--REGEXP(A2,"\.?\d+")) ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_6_20240629074531362.png)
里面如果含有负数,也可以处理。 =SUM(--REGEXP(A2,"-?\d+\.?\d+")) ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_7_20240629074531658.png)
以上,其实就是正则表达式,Excel里面也有,不过需要借助VBA。 =正则提取(A2,"(-?\d+\.?\d+)","+",2) ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_8_20240629074531909.png)
点开发工具,VB,插入模块,将下面这段很长的代码粘贴进去。 ![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_9_20240629074532268.png)
Option Explicit Function 正则提取(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表格确实更懂中国人,将复杂问题简单化。
![](http://image109.360doc.com/DownloadImg/2024/06/2907/285519317_11_2024062907453318.png)
作者:卢子,清华畅销书作者,《Excel效率手册 早做完,不加班》系列丛书创始人,个人公众号:Excel不加班(ID:Excelbujiaban)
|