ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 恳求用VBA提取数字、字母、文字的代码

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-28 09:25 | 显示全部楼层
谢谢提示,谢谢赐教!这下可好了。

TA的精华主题

TA的得分主题

发表于 2011-10-28 09:39 | 显示全部楼层
Function Tq(S, p, Optional ByVal Fg As String = "")
'p=0、1、2、3分别为取数字、字母、汉字、标点
a = Array("[^0-9.]+", "[^a-z]+", "[^\u4e00-\u9fff]+", "[a-z0-9\u4e00-\u9fff\.]+")
With CreateObject("vbScript.regexp")
  .Pattern = a(p)
  .IgnoreCase = True
  .Global = True
  Tq = .Replace(S, Fg)
End With
End Function

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-28 10:01 | 显示全部楼层
本帖最后由 松儿 于 2011-10-28 10:04 编辑
Zamyi 发表于 2011-10-28 09:39
Function Tq(S, p, Optional ByVal Fg As String = "")
'p=0、1、2、3分别为取数字、字母、汉字、标点
a  ...
  谢谢!可是我在运行时,运行不了。出现了这样

截图07.png

(如图)的情况。我似乎是经常遇到这种情况,不知是什么原因?请求赐教。

TA的精华主题

TA的得分主题

发表于 2011-10-28 10:20 | 显示全部楼层
本帖最后由 cbtaja 于 2011-10-28 10:37 编辑

对于正则表达式对象,其Replace方法和Execute方法,一正一反。
12楼用Replace方法,同样达到了目的,看起来似乎还要更简单些。
不过,Execute方法,也自有它的优点:能够得到matchs集合,而对这个集合,可以用代码来处理,比如,可以遍历其中的所有成员,如本例所示;也可以选择其中的某几个特定项来处理。因此,Execute方法,更加灵活一些,而replace方法,似乎就固定了。
同样地,对于提取数字、字母、汉字等,在自定义函数中直接给出正则表达式选项,使用的时候就简单了,同时,也就固化成只有4个选项了。而如果在自定义函数中,把正则表达式作为参数提供,则保留了正则表达式强大的灵活性,可以根据需要来编辑正则表达式,以获取各种组合情况的内容,比如提取“汉字及标点”,“中英文及标点”等等。

总之,定制的简单易用,而自定义的则灵活强大,所谓“鱼和熊掌不可兼得”,使用者根据自身的情况来选择。

TA的精华主题

TA的得分主题

发表于 2011-10-28 10:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
松儿 发表于 2011-10-28 10:01
  谢谢!可是我在运行时,运行不了。出现了这样

这个同样是自定义函数,因此需要在表格中编辑公式加以引用才行的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-10-28 10:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cbtaja 发表于 2011-10-28 10:23
这个同样是自定义函数,因此需要在表格中编辑公式加以引用才行的。

谢谢赐教!长见识了。

TA的精华主题

TA的得分主题

发表于 2011-10-28 11:12 | 显示全部楼层
cbtaja 发表于 2011-10-28 10:20
对于正则表达式对象,其Replace方法和Execute方法,一正一反。
12楼用Replace方法,同样达到了目的,看起来 ...

改下 .Pattern = a(p) 为
If IsNumeric(p) Then .Pattern = a(p) Else .Pattern = p
鱼和熊掌便可兼得了{:soso_e113:}

TA的精华主题

TA的得分主题

发表于 2011-10-28 11:34 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Zamyi 发表于 2011-10-28 11:12
改下 .Pattern = a(p) 为
If IsNumeric(p) Then .Pattern = a(p) Else .Pattern = p
鱼和熊掌便可兼得了 ...

加一个判断,以决定是“捕鱼”还是“猎熊”,这个方式很不错。对于EXCEL中不会大段大段出现的文本,可以是说很完美的了。

TA的精华主题

TA的得分主题

发表于 2011-10-28 15:34 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-10-28 16:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
cbtaja 发表于 2011-10-28 09:04
fgf,“分隔符”。设置一个分隔符,可以把符合条件的内容分段区分出来,比如数据中包含多个数时,提取出 ...

是的,我明白了,返回的每个字符都用特定的分隔符分开。谢谢你。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-22 20:35 , Processed in 0.039312 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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