ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何在两组姓名中找出同音不同字的姓名?

如何在两组姓名中找出同音不同字的姓名?

作者:绿色风 分类: 时间:2022-08-17 浏览:143
楼主
amulee
Q:如何在两组姓名中找出同音不同字的姓名?
A:在许多表格中,由于人名由不同的人输入,可能造成同一个员工姓名出现不同的字。由于大多数人采用拼音输入法,因而可能造成同音不同字的姓名,却又同时表示一个人。在统一这些表格的时候就需要将这些同音不同字的姓名统一起来。
本例利用一个自定义函数,将两组姓名中同音不同字的姓名找出来,并按照第一组姓名的顺序进行排列。如图所示:

 

本例利用了一个拼音函数PY,该函数功能是将汉子转为拼音。本例代码如下:
  1. Function 同音不同字(ByVal Rng1 As Range, ByVal Rng2 As Range)
  2.     '初始化字典
  3.     Dim i%, j%
  4.     InitDictinary
  5.     Dim Arr1, Arr2, d2 As Object, TempStr$, CmpStr1$, CmpStr2$, ArrJG() As String
  6.     Arr1 = Rng1.Value
  7.     Arr2 = Rng2.Value
  8.     ReDim ArrJG(1 To UBound(Arr1), 1 To 1)
  9.     Set d2 = CreateObject("scripting.dictionary")
  10.     '记录2的拼音
  11.     For i = 1 To UBound(Arr2)
  12.         If Len(Trim(Arr2(i, 1))) > 0 Then d2(PY(Arr2(i, 1))) = Arr2(i, 1)
  13.     Next i
  14.     '遍历1,查找拼音相同的
  15.     For i = 1 To UBound(Arr1)
  16.         If Len(Trim(Arr1(i, 1))) > 0 Then
  17.             TempStr = PY(Arr1(i, 1))
  18.             If d2.exists(TempStr) Then
  19.                 TempStr = d2(TempStr)
  20.                 CmpStr1 = ""
  21.                 CmpStr2 = ""
  22.                 '逐字判断
  23.                 For j = 1 To Len(TempStr)
  24.                     CmpStr1 = CmpStr1 & "-" & Asc(Mid(Arr1(i, 1), j, 1))
  25.                     CmpStr2 = CmpStr2 & "-" & Asc(Mid(TempStr, j, 1))
  26.                 Next j
  27.                 If CmpStr1 <> CmpStr2 Then
  28.                     ArrJG(i, 1) = TempStr
  29.                 End If
  30.             End If
  31.         End If
  32.     Next i
  33.     同音不同字 = ArrJG
  34. End Function



附件参考:
同音不同字.rar
2楼
eliane_lei
进来学习,谢谢分享

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap