ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 汉字 拼音 首字母 转换 (支持多音字、简繁体、特殊数字字母)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-9-10 10:14 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:文本处理和正则
本帖最后由 山中老人 于 2013-9-11 18:22 编辑

       不是简单通过汉字字符编码计算,带有9000多个字符对应码表。转换准确快速,支持简繁体、多音字、特殊数字字母转换。{:soso_e104:}

       新手直接把需要转换的文字复制到【测试】表中,就可以的到结果。{:soso_e102:}
       码表已经优化排序后,固化到VBA代码中,需要的直接复制VBA模块就可以调用函数了!!





补充内容 (2015-6-24 11:25):
32楼 最新更新 数组模块

拼音转换.rar

326.17 KB, 下载次数: 1178

超快转换

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-9-10 10:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 liucqa 于 2019-4-2 21:12 编辑

http://club.excelhome.net/thread-1469090-1-1.html

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 10:33 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 山中老人 于 2013-9-10 10:36 编辑

我没找到,完整汉字表。
我试用过数组方式(甚至加入了缓存结构),在VBA环境、现在这么大的码表,使用代码固化方式,速度最快。
关键是加载数组消耗了大量的时间。如果要优化排序,写回对照表,时间更是太坑爹了。

TA的精华主题

TA的得分主题

发表于 2013-9-10 11:18 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
山中老人 发表于 2013-9-10 10:33
我没找到,完整汉字表。
我试用过数组方式(甚至加入了缓存结构),在VBA环境、现在这么大的码表,使用代码 ...

数组改成全局初始化,不占用时间

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 11:27 | 显示全部楼层
本帖最后由 山中老人 于 2013-9-10 11:30 编辑
liucqa 发表于 2013-9-10 11:18
数组改成全局初始化,不占用时间

我使用的是静态变量数组,只加载一次。

附件加入了缓存数组,效果不明显。 拼音转换2.rar (326.76 KB, 下载次数: 153)

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 11:47 | 显示全部楼层
因为,我已经将VBA中的码表顺序优化过了(按使用频率优化),所以加入缓存后时间反而还多耗了一点。
加上,通过字符编码规律,进行了码表压缩。我已经没有能力继续优化了。

请高手提出更好的办法! 谢谢!{:soso_e100:}

TA的精华主题

TA的得分主题

发表于 2013-9-10 11:51 | 显示全部楼层
山中老人 发表于 2013-9-10 11:27
我使用的是静态变量数组,只加载一次。

附件加入了缓存数组,效果不明显。

字分散的话缓存意义不大,你应该改一下算法,这么多case,速度不可能快的,应该从unicode码直接取首字母,不能用判断检索之类的语句。

TA的精华主题

TA的得分主题

发表于 2013-9-10 11:54 | 显示全部楼层
完整汉字表还要找吗?直接用QQ拼音导出就行了。txt文件

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 12:11 | 显示全部楼层
liucqa 发表于 2013-9-10 11:51
字分散的话缓存意义不大,你应该改一下算法,这么多case,速度不可能快的,应该从unicode码直接取首字母, ...

我是用的ASC()函数转换为int数据,然后建表的。

Case 48 To 57, 65 To 90: py = p '数字、大写字母
Case 97 To 122: py = Chr(i - 32) '小写字母
Case -20319 To -20284: py = "A"
Case -20063 To -19970, -19807 To -19789, -20283 To -20239, -19787 To -19776, -20237 To -20226: py = "B"
Case -19551 To -19498, -19775 To -19714, -19278 To -19219, -19295 To -19280, -19496 To -19473, -19471 To -19458, -31863 To -31852, -5946 To -5944: py = "C"
Case -18987 To -18954, -19039 To -18989, -18783 To -18768, -19218 To -19202, -18765 To -18727, -18725 To -18711, -18952 To -18946, -3597 To -3595: py = "D"
。。。。
我利用了一部分编码规律啊?

不明之处请指教!

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-9-10 12:16 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 山中老人 于 2013-9-10 12:18 编辑
liucqa 发表于 2013-9-10 11:51
字分散的话缓存意义不大,你应该改一下算法,这么多case,速度不可能快的,应该从unicode码直接取首字母, ...

另外,我检测了一下缓存命中率,长度为100 时命中高达80% 以上。
感觉VBA 用for语句,效率不如case语句。
当然也可能是缓存代码有问题!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-28 19:04 , Processed in 0.046383 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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