ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] VBS正则练习题——标记并提取成对括号内的数值求和

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-11-14 18:03 | 显示全部楼层
月关 发表于 2019-11-14 13:06
突然想起来,贴主要求加密。
不是老师不想传授,看来没有点小手段你还得再煎熬两天

TA的精华主题

TA的得分主题

发表于 2019-11-14 18:12 来自手机 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-11-14 18:20 来自手机 | 显示全部楼层
killq 发表于 2019-11-14 18:03

要不把密码偷偷发你先提前学习下?
好好膜拜一下老师这个解题的思路,同时,在吃透老师解法的前提下,把问2的正则表达式再精简一下,有一串废代码。老审核,老师就懒得改了  

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-11-15 09:08 | 显示全部楼层
过来学习一下大佬们的思路

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-15 09:43 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
月关 发表于 2019-11-14 11:02
老师不须担心,就冲他说的最后两句话,特殊字符和结果干净,就知道他连第1问都没解好。我都想不出来要怎 ...

我一点也不担心。因为这两问只不是饭前甜点和凉菜,真正的硬菜还没有上桌呢!就好比网游打副本,才开出来入门难度和普通难度,隐藏BOSS还没有出来呢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-15 15:06 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
duquancai 发表于 2019-11-14 18:12
我没话说,路过凑热闹。

别介,你这正则高高高高高高高高手,都不说话,那岂不是把别人都吓住了

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-15 15:17 | 显示全部楼层
duquancai 发表于 2019-11-14 18:12
我没话说,路过凑热闹。

还有,正式竞赛版块有一个VBA竞赛题正在进行中,用的实例来源正是你之前在我的主题贴子秀的一塌糊涂的替换字符的问题,想必这个竞赛题的3分技术分,对你这正则高手大侠来说,那是手到擒来的了。
我这赶紧给你建个传送门,别让大高手埋怨没有通知到而让你错过这机会呀:

[第127期]替换特定规则范围内的字符(进行中……)
http://club.excelhome.net/thread-1506418-1-1.html
(出处: ExcelHome技术论坛)

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-17 09:40 | 显示全部楼层
月关 发表于 2019-11-14 18:20
要不把密码偷偷发你先提前学习下?
好好膜拜一下老师这个解题的思路,同时,在吃透老师解法的前提下,把 ...

本主题已满3天,请把密码公布,就像24楼所希望的那样,让大家学习一下你的思路吧。先给你点赞了!

TA的精华主题

TA的得分主题

发表于 2019-11-17 12:59 | 显示全部楼层
只写正则:
\d+(?:\.\d+)?(?=\s)
[\u4e00-\u9fa5]+(\d+(?:\.\d+)?)(?!$|[日月\d\.\s]) 取submatches
反正就是取巧,嘿嘿
放到程序里还可以使用chr(10),不过需要字符连接

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-11-17 14:23 | 显示全部楼层
当前2问,看来只要正则的基础知识扎实,就能正确解答。
我把自己对这2问的完整解答也放上来吧。

  1. Option Explicit
  2. Private Const 正则1$ = "小计\d*\.?\d+" '题1_填空处"
  3. Private Const 正则2$ = "(?![月计])[一-龥]\d*\.?\d+" '题2_填空处

  4. Sub Test1()
  5.     Dim r&, ar, Reg As Object, br, ss$, mas As Object, ma As Object, v#, Start%, Length%, i&
  6.     r = Cells(Rows.Count, 1).End(xlUp).Row
  7.     With Range("A1").Resize(r)
  8.         .Font.Bold = False
  9.         .Font.Color = 0
  10.         ar = .Resize(, 2).Value
  11.     End With
  12.     ReDim br(2 To r, 1 To 1)
  13.     Set Reg = CreateObject("VBScript.RegExp")
  14.     With Reg
  15.         .Global = True
  16.         .Pattern = 正则1
  17.         For i = 2 To r
  18.             ss = ar(i, 1) '题1_填空处2
  19.             Set mas = .Execute(ss)
  20.             For Each ma In mas
  21.                 Start = ma.firstindex + 3 '题1_填空处3
  22.                 Length = ma.Length - 2 '题1_填空处4
  23.                 v = Mid(ma.Value, 3) '题1_填空处5
  24.                 br(i, 1) = br(i, 1) + v
  25.                 With Range("A" & i).Characters(Start, Length).Font
  26.                     .Bold = True
  27.                     .Color = vbBlue
  28.                 End With
  29.             Next
  30.         Next
  31.     End With
  32.     Range("B2").Resize(r - 1) = br
  33. End Sub

  34. Sub Test2()
  35.     Dim r&, ar, Reg As Object, br, ss$, mas As Object, ma As Object, v#, Start%, Length%, i&
  36.     r = Cells(Rows.Count, 1).End(xlUp).Row
  37.     With Range("A1").Resize(r)
  38.         ar = .Resize(, 2).Value
  39.     End With
  40.     ReDim br(2 To r, 1 To 1)
  41.     Set Reg = CreateObject("VBScript.RegExp")
  42.     With Reg
  43.         .Global = True
  44.         .Pattern = 正则2
  45.         For i = 2 To r
  46.             ss = ar(i, 1) '题2_填空处2
  47.             Set mas = .Execute(ss)
  48.             For Each ma In mas
  49.                 Start = ma.firstindex + 2 '题2_填空处3
  50.                 Length = ma.Length - 1 '题2_填空处4
  51.                 v = Mid(ma.Value, 2) '题2_填空处5
  52.                 br(i, 1) = br(i, 1) + v
  53.                 With Range("A" & i).Characters(Start, Length).Font
  54.                     .Bold = True
  55.                     .Color = vbRed
  56.                 End With
  57.             Next
  58.         Next
  59.     End With
  60.     Range("C2").Resize(r - 1) = br
  61. End Sub
复制代码

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

本版积分规则

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

GMT+8, 2024-12-25 02:26 , Processed in 0.036782 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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