ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助]如何自动识别汉字的拼音缩写

[复制链接]

TA的精华主题

TA的得分主题

发表于 2007-4-26 15:17 | 显示全部楼层
QUOTE:
以下是引用王王王在2006-10-10 21:20:00的发言:

楼主,能告诉我公式是怎么编的吗?

打开附件,按下Alt+F11可以察看代码。

TA的精华主题

TA的得分主题

发表于 2007-4-27 21:40 | 显示全部楼层

放出本人03 年前写的一段代码

Private Function GetChsYM_SingleWord(SingleWord As String) As String
    Dim lCS As Variant
    Dim i As Integer
    Dim IBase As Integer
    Dim AsciiOfWord As Integer
    '"啊"a"芭"b"擦"c"搭"d"蛾"e"发"f"噶"g"哈"h"击"ij"喀"k"垃"l"妈"m"拿"n"哦"o"啪"p"期"q"然"r"撒"s"塌"t"挖"uvw"昔"x"压"y"匝"z"座"z
    lCS = Array(-20319, -20283, -19775, -19218, -18710, -18526, -18239, -17922, -17417, -17417, -16474, -16212, -15640, -15165, -14922, -14914, -14630, -14149, -14090, -13318, -12838, -12838, -12838, -12556, -11847, -11055, -10246)
    IBase = Asc("A")
    If Trim(SingleWord) = "" Then GetChsYM_SingleWord = " ": Exit Function
    AsciiOfWord = Asc(Left(Trim(SingleWord), 1))
    If AsciiOfWord > 0 Then GetChsYM_SingleWord = UCase(Chr(AsciiOfWord)): Exit Function
    If AsciiOfWord < lCS(0) Or AsciiOfWord >= lCS(26) Then GetChsYM_SingleWord = "?": Exit Function
    For i = 0 To 25
        If AsciiOfWord >= lCS(i) And AsciiOfWord < lCS(i + 1) Then Exit For
    Next
    IBase = IBase + i
    GetChsYM_SingleWord = Chr(IBase)
End Function
获得声母首字母,

获得词组首字母的

Private Function GetChsYm(sParm As String) As String
    Dim iLen As Long, i As Long, sRet As String
    sRet = ""
    iLen = Len(sParm)
    For i = 1 To iLen
        sRet = sRet & GetChsYM_SingleWord(Mid(sParm, i, 1))
    Next
    GetChsYm = sRet
End Function

中国:ZG

针对gb2312 汉字, 多音字 多个读音中,取子目标最前面的那个

长大:CD

TA的精华主题

TA的得分主题

发表于 2007-4-27 22:08 | 显示全部楼层

注意那个array 的注释,

是GB2312 每个声母开始时候的第一个音 ,完全可以 使用公式 code 和 CHAR 完成此片代码.

A1 中随便输入一个常用汉字,将此片代码粘贴到A2 ,看看效果

=CHAR(64+MATCH(CODE(A1),{45217,45253,45761,46318,46826,47010,47297,47614,48119,48119,49062,49324,49896,50371,50614,50622,50906,51387,51446,52218,52698,52698,52698,52980,53689,54481},1))

此函数的问题, 1 如果A1 内容为字符串,或者非常用汉字,则出错,

简易解决如下,=IF(AND(CODE(A1)>=45217,CODE(A1)<54481),CHAR(64+MATCH(CODE(A1),{45217,45253,45761,46318,46826,47010,47297,47614,48119,48119,49062,49324,49896,50371,50614,50622,50906,51387,51446,52218,52698,52698,52698,52980,53689,54481},1)),A1)

2 不能在一个公式中处理字符串, 因为没有像 sum 之类的文本函数可以处理字符串数组的合并. 还得用自定义函数,恶

[此贴子已经被作者于2007-4-28 1:40:16编辑过]

TA的精华主题

TA的得分主题

发表于 2008-10-29 21:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
非常感谢楼主提供

TA的精华主题

TA的得分主题

发表于 2008-12-9 11:10 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-3-30 12:33 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-5-19 18:12 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-25 02:42 , Processed in 0.034144 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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