ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 1588078/37

[求助] 求正则表达式解题

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-3-17 10:19 | 显示全部楼层
都是高手,但是为什么不规范数据源呢

TA的精华主题

TA的得分主题

发表于 2023-3-17 17:43 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
微信截图_20230317174139.png



  1. <div>Option Explicit

  2. Sub 提取条码信息()
  3. Application.ScreenUpdating = False
  4. Dim c As Range, i%, str$, s$, j%
  5. i = 2
  6. With ActiveSheet
  7.   str = .Cells(i, 1).Value
  8.   s = ".(\d{4})(\*|×|-)(\d+)[\d\s-]*(有盖)?"
  9.   Do While Len(str) > 0
  10.     str = .Cells(i, 1).Value
  11.     For j = 0 To UBound(PickStr(str, s)) - 1
  12.       .Cells(i, 2) = "'" & PickStr(str, s, 0)(j)
  13.       .Cells(i, 3) = IIf(PickStr(str, s, 1)(j) = "-", 1, PickStr(str, s, 2)(j))
  14.       .Cells(i, 4) = PickStr(str, s, 3)(j)
  15.       .Cells(i + 1, 1).EntireRow.Insert shift:=xlDown
  16.       i = i + 1
  17.     Next j
  18.     i = i + 1
  19.   Loop
  20.   '删除空行
  21.   .Range("B2:B" & i + 2).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  22. End With
  23. Application.ScreenUpdating = True
  24. End Sub

  25. Function PickStr(str$, ptr$, Optional i% = -1)
  26. 'i, 显示匹配到的值里的分组数组项
  27. Dim reg As Object, ms, m, sub_str$
  28. Set reg = CreateObject("VBScript.RegExp")
  29. With reg
  30.   .Pattern = ptr '正则表达式
  31.   .Global = True '匹配出所有符合条件的字符
  32.   .IgnoreCase = False '不忽略大小写
  33.   .MultiLine = True '多行模式
  34.   Set ms = .Execute(str) '执行匹配
  35. End With
  36. If ms.Count Then
  37.   For Each m In ms
  38.     If i = -1 Then
  39.       sub_str = sub_str & m & "|"
  40.     Else
  41.       sub_str = sub_str & m.SubMatches(i) & "|"
  42.     End If
  43.   Next
  44. Else '未匹配到值时显示空值
  45.    sub_str = sub_str & "|"
  46. End If
  47. PickStr = Split(sub_str, "|")
  48. Set ms = Nothing
  49. Set reg = Nothing
  50. End Function</div>
复制代码



TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-20 18:00 | 显示全部楼层

image.png 现在遇到这问题

电商编码转为瓶数.rar

16.23 KB, 下载次数: 2

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-21 09:44 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2024-5-22 16:06 | 显示全部楼层
感觉很难用一个pattern解决,要组合运用正则和split等。
360截图20240522160459002.jpg
360截图20240522160523491.jpg

电商编码转为瓶数.rar

21.96 KB, 下载次数: 3

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-22 16:59 | 显示全部楼层
grf1973 发表于 2024-5-22 16:06
感觉很难用一个pattern解决,要组合运用正则和split等。

谢谢啊。。。。。。。。。。。。。。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-22 17:00 | 显示全部楼层
grf1973 发表于 2024-5-22 16:06
感觉很难用一个pattern解决,要组合运用正则和split等。

数据是EXCEL直接连着ORACL数据库的

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-22 17:15 | 显示全部楼层
grf1973 发表于 2024-5-22 16:06
感觉很难用一个pattern解决,要组合运用正则和split等。

还有一个情况,条码后面,有带(券)的不要,

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-22 17:25 | 显示全部楼层
grf1973 发表于 2024-5-22 16:06
感觉很难用一个pattern解决,要组合运用正则和split等。

* x X  这些都是算是*号,

带券的数据不要,
麻烦下

电商编码转为瓶数.rar

18.69 KB, 下载次数: 1

TA的精华主题

TA的得分主题

发表于 2024-5-23 08:58 | 显示全部楼层
略作改动即可。
360截图20240523085559572.jpg
360截图20240523085534907.jpg

电商编码转为瓶数.rar

21.11 KB, 下载次数: 2

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-9-26 12:35 , Processed in 0.034822 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表