除非注明,文章均为 战战如疯 原创,转载请保留链接: http://www./cat4/559.html,VBA交流群273624828。
之前我分享过一个取汉字拼音首字母的函数,利用的是查字库的方法,但是最近使用时发现字库中的错误太多,导致其实用性大打折扣,在网上又查到了一种比较好的解决方案来跟网友分享下。
该方案是Excelhome网友的作品,原帖地址http://club./thread-229924-1-1.html,要求电脑上安装有微软拼音,该自定义函数功能强大,不仅可以用来取首字母,更可以用来显示全部拼音,甚至可以带声调。
请首先确认安装了微软拼音输入法,如果出现注音错误的情况,可尝试安装最新版本微软拼音解决。
[12.01.29]更新 解决看柳絮飘扬提出的bug,全部都是非汉字情况不会再显示#Value,同时非中文字符间也不再插入分隔符。
[11.09.29]更新 根据dul版的分析,加入了运行环境检查,没有运行环境的话会提示安装微软拼音。
[11.09.23]更新 4年来不断有人问多音字的问题,这次更新终于解决了,由于写了这个函数之后我就从来没用到过,遇到些问题就放下了,一拖就这么久,要不是不断有人给我发消息可能就不会再有这次的更新了,还要感谢大家的使用和督促,让各位久等了。 更新后,“重庆重要”能够正确解析为“chóng qìng zhòng yào” 。 这次重写了很多代码,没有过多测试不知道有没有bug,发现bug的同学请给我发消息,谢谢。 代码在32位Win7 + Office2010和WinXp + office2010测试通过,64位的系统应该会出错,就不要测试了。以前遇到过2010下写的VBA代码在之前版本运行会报未找到库之类的错误,代码 中注意了,但仍可能会有遗漏,总之,请大家反馈意见,让这个小函数更好的为大家服务。
'*************************************************************************** '* '* Module: HzToPy '* Update: 2011-09-23 '* Author: tt.t '* '* Description: 将中文字符串转换为拼音,就这些。原先这里写了太多废话,删了。 '* '* Theory: 原理依然是通过IFELanguage接口实现。 '* 唯一需要解释的是如何解决多音字正确注音的问题。 '* IFELanguage接口是能够正确返回很多多音字拼音的,但多音字的读音只有特定词汇中 '* 才能确认,因此在解析拼音时候不能把词拆成单字,否则多音字返回的拼音就很可能不对。 '* 之前版本中就是因为把词拆开获取拼音导致多音字拼音错误。 '* 这次的更新利用接口返回数据中标识每个拼音长度的数组实现了对返回拼音 '* 的按字拆分,无需再把词拆成字获取单个字的拼音,从而解决了多音字问题。 '* 需要说明的是,VB_MORRSLT结构就是MS文档中的MORRSLT结构,但是VBA自定义结构 '* 无法实现不按4字节对齐,使得不得不修改MORRSLT的定义方式,能这样修改只能说运气不错, '* 因为被修改的部分刚好获取拼音用不到。 '* '* Histroy: '* 2011-09-23 '* ● 重写主要代码,支持多音字,提高了运行效率。 '* ● 取拼音首字时,ao, ai, ei, ou, er作为首字而不是原来的第一个字母。 '* ● 为函数增加了注音方式选择,hàn可以显示为han或han4。 '* ● 函数的使用与之前版本兼容,将模块中函数代码和HZ2PY类代码覆盖之前版本即可实现升级,无需修改文档中的公式。 '* 2011-04-07 '* ● 更正CoTaskMemFree传递参数错误,消除了Win7等环境下崩溃。 '* 2007-04-03 '* ● 更正redim时vba数组默认起始值错误。 '* 2007-04-02 '* ● 最初版本,实现了由汉字获取拼音。 '* '***************************************************************************
汉字转拼音举例:重庆重要1234,澳门
显示用空格分开的拼音 公式: =HzToPy($b$14," ") 结果: hàn zì zhuǎn pīn yīn jǔ lì : chóng qìng zhòng yào 1 2 3 4 , ào mén 显示用-分开的拼音,同时不显示注音符号 公式: =HzToPy($b$14,"-",false) 结果: han-zi-zhuan-pin-yin-ju-li-:-chong-qing-zhong-yao-1-2-3-4-,-ao-men 显示用空格分开的拼音,不显示注音符号,同时仅显示拼音的首字,并大写 公式: =HzToPy($b$14, " ", false,true,false) 结果: H Z ZH P Y J L : CH Q ZH Y 1 2 3 4 , AO M 显示用空格分开的拼音,不显示注音符号,同时仅显示拼音的首字母,并大写 公式: =HzToPy($b$14 ," ", false,true, true) 结果: H Z Z P Y J L : C Q Z Y 1 2 3 4 , A M
附件下载地址:http://pan.baidu.com/s/1hqswD6W。
|