ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 请教关于Excel表不完整模糊输入首写字母回车后自动充填对应中文名称的问题!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-23 10:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 ivccav 于 2018-6-23 10:51 编辑

刚才看到你说完全不需要转为拼音这一步。我很好奇。
提前准备拼音是为了提高速度,因为拼音转换是很耗时间的。
在代码中转换拼音一点难度都没有,直接用写好的函数转换即可,只是影响程序效率,都不会这么做。

如果要用,改一句话即可。已经改好,并把菜单中的所有拼音都删除了。支持汉字、拼音全拼、拼音首字母。

楼上那位的转换拼音的方法错误率太高,已经没有人使用了,

你输入CQ试试看看能不能查询到有“重庆”的菜品没有,肯定是没有的。

你看到我的代码多,是因为程序支持功能多,如纯键盘操作,可用方向键选择,回车键录入。

关于Excel表不完整模糊输入首写字母简写回车后自动充填对应完整中文名称的问题 有拼音版.zip (52.71 KB, 下载次数: 25)


3.gif



TA的精华主题

TA的得分主题

发表于 2018-6-23 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

我中肯地说两句:

1、如果菜品多(过超1万)的话,即时提取拼音首字母确实是会慢,建议选择楼上高手所说的预先提取法;
2、如果菜品少的话,即时提取不会慢,也省却了预先提取的麻烦,楼主按需选择吧;
3、楼上高手提取拼音所用的HztoPy方法是网上高高手所创,好处是准确(充分考虑了多音字),但缺点是代码臃肿(功能强大所致),而且电脑必须安装微软拼音输入法。
4、而单单为提取拼音首字母,我的代码更精简,但诚然,是没有考虑多音字的。在不考虑多音字的情况下使用,我的代码几乎没有误码。此代码是经我个人亲自调整过的,跟网上那些误码率高的代码不同,请不要看见代码类似就乱判断。

以上说明不对人,只对事。
只能说,各人的代码都有优点有缺点。
请根据自己的实际情况使用。

TA的精华主题

TA的得分主题

发表于 2018-6-23 12:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
vitrel 发表于 2018-6-23 11:17
我中肯地说两句:

1、如果菜品多(过超1万)的话,即时提取拼音首字母确实是会慢,建议选择楼上高手所 ...

你的那个方法是不可能准的,不同的操作系统,汉字的编码排序都不同,你也许调整过,也不过把其中一两个汉字替换了,但是这种方法并不可靠,网上有人用你这种方法提取枇杷,是错误的,你的代码返回PO,也是错误的,这种方法依赖不同系统中汉字的顺序。查找词库的准确率更高,当然肯定也会有误,因为汉字是多音字,如果词库中没有这个词,一样有可能错误,且效率低(一般并不影响体验),一般都是预制好查询内容。模糊查询不仅仅是查拼音,还有其他用途,比如助记码,快捷码,或者自己设定的值。

最好的办法是用这些函数先获得首字母或全拼,然后修改错误的部分,做为辅助工具即可。

Excel2003没有.CountLarge

TA的精华主题

TA的得分主题

发表于 2018-6-23 14:58 | 显示全部楼层
ivccav 发表于 2018-6-23 12:00
你的那个方法是不可能准的,不同的操作系统,汉字的编码排序都不同,你也许调整过,也不过把其中一两个汉 ...

高手,首先我对你是善意的,可能是我表达不到位,请你勿介意。

你说的内容,绝大多数我也认同,你对汉字拼音使用的见解,我也很佩服,受教了。
但有一点,你说我的拼音误码率高,这点我不太认同,很希望与您交流一下。

汉字转拼音首字母(只是首字母,不是拼音全码,以下同),Excel的普遍做法有三类:
第一类:高高手的方法HztoPy,直接读取微软拼音输入法里的数据,对于汉字转拼音,几乎完美;但只是提取拼音首字母来说,有点牛刀杀鸡。
第二类:(就是您说那种)根据汉字编码的排序,用分区的方法确定每个汉字的拼音(或首字母)。此方法最差,误码率极高,最根本的原因在于,汉字编码的顺序根本不是按拼音排序的,只是刚好有大部分汉字有这个规律,于是就被人利用了而已,可还有相当的汉字编码不符合这规律,这就是误码的源泉。(我不详细解释了,你也是高手,应该明白)
第三类:(就是我用的方案)先举个例,Excel对单元格的汉字有排序功能(基本上用过Excel的人都用过此功能),排序的依据的顺序是:声母、韵母、声调、笔划顺序等。我的代码正好是利用了Excel对汉字排序而对拼音进行分区,以此确定首字母。为了验证此法,我特意在WinXP、Win7、Win10上的Excel2003、Excel2007、Excel2010、Excel2013等对全部字符(对,是全部字符)进行排序,结果发现,排序结果与操作系统无关,但与Office版本有关,Excel2007~2013的排序结果完全相同且正确(Excel2003的排序结果强差人意)。因此,我相信,用我的方法,在Excel2007~2013上,几乎不会误码(不考虑多音字)。至于WPS上或Excel2016怎样,我就不保证了。

最后,我还是那句,具体问题具体分析。
对于“模糊查找”、“快速录入”来说,没有最好的方案,只有最适合的方案。
对于回答网友的问题,我们尽我们能力提供方案供他参考便是,
我相信,网友即使最后选用了某方案,最终还是会着情修改的,毕竟每人的使用情况都不一样。

就像Win10,即使微软怎样把它吹上了天,但作为用户,还是有相当一部分认为它不适合而不选用它。
因为我们毕竟是人,选择时要考虑的因素有太多太多,软件代码是否先进,也只能作为选择时的考虑条件之一(仅仅是之一)。

TA的精华主题

TA的得分主题

发表于 2018-6-23 15:54 | 显示全部楼层
ivccav 发表于 2018-6-23 09:59
这个获取拼音的方法不是我原创,我只是觉得好,就保留了。该方法需要安装有微软拼音输入法2.0以上,一 ...

64位用不了,excel2016版本的,先提示StrPtr 类型不匹配 Private Function GenerateGUID()

TA的精华主题

TA的得分主题

发表于 2018-6-23 19:28 | 显示全部楼层
本帖最后由 ggmmlol 于 2018-6-24 09:06 编辑
vitrel 发表于 2018-6-23 14:58
高手,首先我对你是善意的,可能是我表达不到位,请你勿介意。

你说的内容,绝大多数我也认同,你对汉 ...

谢谢楼下指正E、N、P三个拼音首字母的代表汉字。下面的代码已经修正。
我的win10(64位)+Office2013(32位),简单取拼音首字母的函数需要调整如下:
Function Py$(ByVal rng As String)
    Dim i%, pyArr, str$, s$
    pyArr = [{"吖","A";"八","B";"攃","C";"咑","D";"妸","E";"发","F";"旮","G";"哈","H";"丌","J";"咔","K";"垃","L";"妈","M";"乸","N";"噢","O";"帊","P";"七","Q";"冄","R";"仨","S";"他","T";"屲","W";"夕","X";"丫","Y";"帀","Z"}]
    str = UCase(Replace(Replace(rng, " ", ""), " ", ""))  '去空格和Tab
    For i = 1 To Len(str)
        s = Mid(str, i, 1)
        If s Like "[一-龥]" Then s = WorksheetFunction.Lookup(s, pyArr)            '如果是CJK统一汉字,先进行转换
        Py = Py & s '
    Next
End Function

TA的精华主题

TA的得分主题

发表于 2018-6-24 07:56 | 显示全部楼层
ggmmlol 发表于 2018-6-23 19:28
我的win10(64位)+Office2013(32位),简单取拼音首字母的函数需要调整如下:
Function Py$(ByVal rng ...


您好!我看过您的代码,结果几乎全部正确(不考虑多音字),就只有三个生僻字是错误的。注:正确读音是从百度上查的。

对比图.jpg

建议您更改一下代码:

{"吖","A";"八","B";"攃","C";"咑","D";"妸","E";"发","F";"旮","G";"哈","H";"丌","J";"咔","K";"垃","L";"妈","M";"乸","N";"噢","O";"帊","P";"七","Q";"冄","R";"仨","S";"他","T";"屲","W";"夕","X";"丫","Y";"帀","Z"}

TA的精华主题

TA的得分主题

发表于 2018-6-24 09:10 | 显示全部楼层
vitrel 发表于 2018-6-24 07:56
您好!我看过您的代码,结果几乎全部正确(不考虑多音字),就只有三个生僻字是错误的。注:正确读音是 ...

谢谢指正。E、N、P这三个字母对应的汉字,确实应该是 妸、乸、帊。

TA的精华主题

TA的得分主题

发表于 2018-6-25 11:34 | 显示全部楼层
cikoola 发表于 2018-6-23 15:54
64位用不了,excel2016版本的,先提示StrPtr 类型不匹配 Private Function GenerateGUID()



朋友,您好!
首先,您提出的问题,我也没办法解决,只是有些另外的意见想向您表达一下。
Excel从2010版开始有了64位版。
但64位的Excel对VBA代码(特别是对现有插件)兼容性很差。
就连微软自己都提出了这样的指导意见:除非你有非常大的数据报表(2G以上)需要处理,否则还是建议使用32位版本。
还有一点,与其它软件不同,64位的Windows也可以安装32位的Office,这点可能还有部分人不知道。
因此,如非必要,建议为了兼容性,建议使用32位的Office。

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-28 01:43 | 显示全部楼层


二位高人大侠的讨论,
小弟受益匪浅,
真的,
小弟得到了高人大侠的帮助,
真心真心是感动的.


小弟继续研究深讨,
努力与实际效果相符,
得到理想结果.


真心地再次感谢二位高人大侠的帮助,
这么久以来,
只有你们出现肯帮助卑微愚钝的小弟我.


2018年06月28日 星期四 留

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 07:00 , Processed in 0.047574 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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