VBA之正则表达式(42)-- 快速提取名称

news/2024/11/8 12:05:09/

实例需求:A列为待处理数据,现需要从中提取商品名、通用名、胰岛素笔相关信息,保存到B列至D列,需要注意如下几点:

  • 胰岛素笔(E列)数据只存在于每组产品的第一行记录中,例如第2行数据中的“胰岛素笔”,对应第2~8行数据。
  • 商品名称可能以数字或者字母结尾,通用名可能以数字开头

在这里插入图片描述

示例代码如下。

Sub Demo()Dim objRegExp As ObjectDim objMatch As ObjectDim arrRes(), strTxt, iRow, i, intLstRowDim rngRes As RangeSet objRegExp = CreateObject("vbscript.regexp")objRegExp.Pattern = "^([一-龟]{3}( [\d/]+| [A-Z\d]+){0,1}) (.*?)($| (/*[一-龟]{2,3}笔)+)"objRegExp.Global = TrueintLstRow = Cells(Rows.Count, 1).End(xlUp).RowReDim arrRes(1 To intLstRow - 1, 1 To 3)iRow = 1For i = 2 To intLstRowstrTxt = Trim(Cells(i, 1))Set objMatch = objRegExp.Execute(strTxt)If objMatch.Count > 0 ThenarrRes(iRow, 1) = objMatch(0).submatches(0)arrRes(iRow, 2) = objMatch(0).submatches(2)arrRes(iRow, 3) = Trim(objMatch(0).submatches(3))iRow = iRow + 1End IfNextWith Cells(2, 2).Resize(intLstRow - 1, 3).Clear.UnMerge.Value = arrResEnd WithSet rngRes = Cells(2, 4)For i = 3 To intLstRowIf Len(Trim(Cells(i, 4))) = 0 ThenSet rngRes = Union(rngRes, Cells(i, 4))ElseIf rngRes.Cells.Count > 1 Then rngRes.MergeSet rngRes = Cells(i, 4)End IfNextWith Cells(2, 4).Resize(intLstRow - 1, 1).HorizontalAlignment = xlCenter.VerticalAlignment = xlCenterEnd WithSet objRegExp = NothingSet objMatch = Nothing
End Sub

【代码解析】
第6行代码创建正则对象。
第7行代码设置正则匹配模式。

正则表达式说明
^([一-龟]{3}( [\d/]+| [A-Z\d]+){0,1}) 匹配三个汉字字符开头,后面可以跟一个空格和数字/斜线或大写字母/数字的组合(可选)
(.*?)匹配任意长度的任意字符,直到遇到下一个规则
(/*[一-龟]{2,3}笔)+)匹配任意数量的斜线字符,之后跟两个或者三个汉字,最后以“笔”字结束

第8行代码设置正则全局匹配。
第12~21行代码循环处理每行数据。
第13行代码读取数据,并使用Trim函数去除空格。
第14第行代码执行正则匹配。
第15行代码判断匹配是否成功。
第16~18行代码读取匹配结果中的内容。
第23行代码清空保存结果的区域。
第23行代码取消合并单元格。
第24行代码将结果回写到单元格区域中。
第27~35行代码实现D列合并单元格。
第29行代码判断D列单元格是否空。

  • 如果为空,则第30行代码将单元格区域合并至变量rngRes中。
  • 如果不为空,则第32行代码上一组产品对应D列合并,并初始化变量rngRes

第36~39行代码设置D列格式水平居中垂直居中。
第40~41行代码释放对象变量占用的系统资源。


http://www.ppmy.cn/news/669588.html

相关文章

mac系统通过终端连接远程服务器

mac系统通过终端连接远程服务器 1、通过自带终端连接1.1 命令直接连接1.2 方式2——创建连接 2、通过iTerm2连接2.1 方式一:命令直接连接 3. Mac上使用scp命令 1、通过自带终端连接 1.1 命令直接连接 如下:ssh -p 22 root远程IP1.2 方式2——创建连接 …

笔记本触控板没有反应

即鼠标失灵的情况 解决方法: 打开控制面板->硬件和声音->设备和打印机 选择设备“LAPTOP-LMI5T3FO”,进入属性面板,选择硬件,找到“I2C HID设备”,先禁用,再启用

有关笔记本电脑安装触控板驱动程序,对触控板进行相应的设置步骤

1、去相关电脑商家的官网,比如华硕电脑官网,进入官网后找到“服务与支持”,如下图所示 2、点击“服务与支持”,进入页面 输入产品的型号,点击“搜索”; 3、点击“驱动程序和工具软件”按钮进入下一步 4、选择所需驱动…

笔记本之触控板

不知道的事 有很多我们不知道的事,需要去探索 一、笔记本之触控板 我们都习惯了,外接鼠标的操作手感,忽略了,笔记本电脑也有自己的内置触控板。而它的功能也是非常的强大。 进入控制面板 搜索「鼠标」 点击 选择触控板&#x…

命令行 笔记本键盘禁用_笔记本触控板怎么关

点击蓝字 关注我们 如何打开和关闭笔记本触摸板?现在越来越多的人使用笔记本电脑,有些人把它们当作电视。即使你能在电视上看到它,你也能在笔记本电脑上看到它,即使你不能在笔记本电脑上看到它。但是笔记本电脑有一个触摸板,我相…

长期使用笔记本触控板请以中指为主

说明 最近在笔记本上连续写程序,加上对mac触控板的爱不释手,快捷操作,点击触感真的很良心。但是永久了发现食指痛的不行,所以不得不分析下原因 以食指为主使用触控板食指关节出现劳损 声明,我不能确定我使用食指的方式…

2021-2027全球与中国触控板市场现状及未来发展趋势

触摸板市场排名前五的公司是Synaptics,阿尔卑斯电气,苹果,Interlink Electronics,Goodix和Elan Microelectronics。 这些顶级公司目前占总市场份额的90%以上,并有望在预测期内保持其在市场上的主导地位。 随…

Windows10触控板防误触

Windows10触控板防误触 问题描述解决办法:设置插入鼠标后自动关闭触控板结果验证 问题描述 使用笔记本电脑键盘打字时,会碰到触控板,导致光标漂移,影响打字效率. 解决办法:设置插入鼠标后自动关闭触控板 点击–>Windows10–>设置–>蓝牙和其他设备–>触控板; 取消…