ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 修改代码,谢谢

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-2-14 22:21 | 显示全部楼层 |阅读模式
image.png 根据要求提取数值,下面这个代码只能匹配所有数字部分提取出来,请问要提取中文小写跟阿拉伯数字要怎么修改呢?,谢谢
  1. Sub 提取数字()
  2. Dim reg As Object, i&, arr
  3. Set reg = CreateObject("vbscript.regexp")

  4. arr = Range("A2:A65536")
  5. With reg
  6. .Global = True
  7. <font color="#ff0000">.Pattern = "[^\d]"</font>
  8. For Each sh In arr
  9. i = i + 1
  10. arr(i, 1) = .Replace(sh, "")
  11. Next
  12. End With
  13. [d2].Resize(UBound(arr), 1) = arr
  14. Set reg = Nothing
  15. End Sub


复制代码


image.png

新建 XLSX 工作表.zip

8.34 KB, 下载次数: 10

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-16 00:16 | 显示全部楼层
  1. Sub 提取数字()
  2. Dim reg As Object, i&, Arr
  3. Set reg = CreateObject("vbscript.regexp")

  4. Arr = Range("A2:A65536")
  5. With reg
  6. .Global = True
  7. .Pattern = "[^\d一二三四五六七八九十壹贰叁肆伍陆柒捌玖拾]+"
  8. For Each sh In Arr
  9. i = i + 1
  10. Arr(i, 1) = .Replace(sh, "")
  11. Next
  12. End With
  13. [d2].Resize(UBound(Arr), 1) = Arr
  14. Set reg = Nothing
  15. End Sub



复制代码

修改了一下终于可以同时提取中文小写数字跟阿拉伯数字了,提取后有些结果类似九1,八1,92,不知道要怎么统一修改为只用阿拉伯数字格式表示,类似91,81,92

TA的精华主题

TA的得分主题

发表于 2021-2-16 16:13 | 显示全部楼层
做一个自定义函数呢?把对应关系加进去,然后调用,这是我能想到的了,判断会多点,但是能实现,其他的办法也没有想到,做鞥一个大佬吧

TA的精华主题

TA的得分主题

发表于 2021-2-16 18:41 | 显示全部楼层
  1. Sub dwds()
  2. Set reg = CreateObject("vbscript.regexp")
  3. arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
  4. brr = Array("一", "二", "三", "四", "五", "六", "七", "八", "九")
  5. With reg
  6. .Global = True
  7. .Pattern = ".*?([\d一二三四五六七八九十壹贰叁肆伍陆柒捌玖拾]+)|.+"
  8. crr = [a1].CurrentRegion
  9. For x = 2 To UBound(crr)
  10.     Cells(x, 2) = .Replace(crr(x, 1), "$1")
  11. Next
  12. End With
  13. For i = LBound(arr) To UBound(arr)
  14.     [b:b].Replace brr(i), arr(i), lookat:=xlPart
  15. Next
  16. For x = 2 To UBound(crr)
  17.     sr = Cells(x, 2)
  18.     If Len(sr) = 2 Then
  19.         Cells(x, 2) = Replace(sr, Right(sr, 1), "0" & Right(sr, 1))
  20.     End If
  21. Next
  22. End Sub
复制代码

没想到啥好办法

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-16 20:20 | 显示全部楼层

请问一下您这个是数组加了字典完成的吗

TA的精华主题

TA的得分主题

发表于 2021-2-16 20:25 | 显示全部楼层
sulli112 发表于 2021-2-16 20:20
请问一下您这个是数组加了字典完成的吗

没有用字典,只是在replace的时候让他们一一对应即可,相当于把一 到九全部替换一遍

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-16 23:59 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-17 00:09 | 显示全部楼层
wanghongfei 发表于 2021-2-16 20:25
没有用字典,只是在replace的时候让他们一一对应即可,相当于把一 到九全部替换一遍

http://club.excelhome.net/thread-1574977-1-1.html
https://files-c.excelhome.net/forum/202102/10/121925q535hy5se1eg3jgq.png
像这个链接里面第2楼那个要求可以修改吗,我之前的想法是
1.如果可以直接在A列的基础上统一将中文数字一二三四..............转化为123456789,中文部分不变
2。直接将1修改后的数据全部转化为拼音模式,然后将拼音等于sai/yi/de这三个拼音的(因为有很多是用错别字替代),直接crtl+h一个个替换为赛/依/德,在用正规写法提取中文+数字,实现我想要的结果,类似赛1,依1,德1
3.请问您有没有比较好的写法呢,或者是直接告诉我怎么修改您那段代码可以直接实现1中的要求,我再慢慢修改2的,或者您有更好的方法,也可以告诉我呢,非常感谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-17 00:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
HuanChen00 发表于 2021-2-16 16:13
做一个自定义函数呢?把对应关系加进去,然后调用,这是我能想到的了,判断会多点,但是能实现,其他的办法 ...

用if函数来一一替换?

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-2-17 11:12 | 显示全部楼层
  1. Sub dwds()
  2. Set reg = CreateObject("vbscript.regexp")
  3. arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
  4. brr = Array("一", "二", "三", "四", "五", "六", "七", "八", "九")
  5. With reg
  6. .Global = True
  7. .Pattern = ".*?([\d\w^一-龥一二三四五六七八九十]+)|.+"
  8. crr = [a1].CurrentRegion
  9. For x = 1 To UBound(crr)
  10.     Cells(x, 2) = .Replace(crr(x, 1), "$1")
  11. Next
  12. End With
  13. For i = LBound(arr) To UBound(arr)
  14.     [b:b].Replace brr(i), arr(i), lookat:=xlPart
  15. Next



  16. End Sub

复制代码

这个代码可以直接复制中文加数字,类似赛罗一班可变成赛罗1班
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-17 11:47 , Processed in 0.045267 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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