ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何定义根据给出的人员名单进行按姓氏笔划排序的自定义函数?

如何定义根据给出的人员名单进行按姓氏笔划排序的自定义函数?

作者:绿色风 分类: 时间:2022-08-17 浏览:105
楼主
BIN_YANG168
Q:怎样用自定义函数根据给出的人员名单进行按姓氏笔划排序,如排序前:苏明举、李祥、刘获峰、梁渐 排序后变为:刘获峰、苏明举、李祥、梁渐
A:按Alt+F11,插入→模块→在VBE窗口中输入以下代码:

  1. Public Function PM(cName As String, Optional cFh As String = " ") As String
  2. Dim s%, cTxt$, cRow$, c As Range
  3. temp = Split(cName, cFh)
  4. s = UBound(temp) + 1
  5. ReDim arr(1 To s, 1 To 2)
  6. For i = 1 To s
  7.     cTxt = temp(i - 1)
  8.     arr(i, 1) = cTxt
  9.     cRow = ""
  10.     For j = 1 To Len(cTxt)
  11.         Set c = Sheet2.Range("a:a").Find(Mid(cTxt, j, 1), LookIn:=xlValues, lookat:=1)
  12.         If c Is Nothing Then
  13.             cRow = cRow & "9999"
  14.         Else
  15.             cRow = cRow & CStr(Format(c.Row, "0000"))
  16.         End If
  17.     Next
  18.     arr(i, 2) = cRow
  19. Next
  20. For i = 1 To s - 1
  21. For j = i + 1 To s
  22. If arr(i, 2) > arr(j, 2) Then
  23. c1 = arr(i, 1)
  24. c2 = arr(i, 2)
  25. arr(i, 1) = arr(j, 1)
  26. arr(i, 2) = arr(j, 2)
  27. arr(j, 1) = c1
  28. arr(j, 2) = c2
  29. End If
  30. Next
  31. temp(i - 1) = arr(i, 1)
  32. Next
  33. temp(s - 1) = arr(s, 1)
  34. PM = Join(temp, cFh)
  35. End Function

然后在A1单元格输入需要缩写的文本,在其他单元格输入=pm(A1,"、")即可。
说明:
姓名笔画的排列方法

地方各级人民代表大会召开选举大会时,常常要按姓名笔画排列名单,通常采取下述四种排列方法:
(一)按笔画多少排列法
1、以姓第一个字的画数多少排列法。即以姓名第一个字的画数多少排列顺序。画数少的在前,多的在后,依次排列。单姓、复姓以及少数民族中的长姓均以姓名的第一个字,而不是以姓的多少为序。如“欧阳雄”与“柯兰田”,自然笔画少的“欧”应排在“柯”之前。
2、同姓同字比较排列法。若姓名的第一个字相同,则应以第二个字的笔画相比较。如“王文生”与“王志江”,则“王文生”排在“王志江”之前。
3、遇到单名均作无字处理。如“田大利”与“田富”,即是田富排在前。
4、同姓单名排列法。即同姓单名的,统统排在双名之前。
(二)按笔画顺序排列法
1、按汉字书写顺序排列法。画数相同的汉字,按汉字书写笔顺,自上而下,从左到右,由外及里的写法排列,即一(横)、丨(竖)、丿(撇)、丶(点)、乛(折)五种基本笔形顺序排列。起笔是横的排在竖的前面,起笔是竖的排在撇的前面,以此类推。如“广”与“千”相比,“广”起笔是点,“千”起笔是撇,“千”排在“广”之前。
2、笔顺类推排列法。如笔画数相同,而且起笔的笔形也相同,就比较第二笔,以此类推。如“林”与“武”都是八画,起笔又都是横,就比较第二笔,“林”的第二笔是丨(竖),“武”的第二笔是一(横),就把“武”排在“林”之前。
3、对五种基本笔形以外的笔形字的排列法,通常这样处理:
①(提)作一(横)。如“刁”字为一,提和点相连进作丶(点),如“决”字。
②乀(捺)作丶(点),如“人”作丿乀、“又”字为乛丶。
③和丶(点)对称的丿(短撇)作丶(点)。如“少”字和“羊”字,第一、二笔为丷(点)。
④笔形带钩和曲折的均作“折”。包括乛、亅、乚、乙等笔。如两字的同一笔都是“折”,简单“折”排在复杂“折”前。如“李”、“杨”,“李”排在“杨”之前。
(三)按字形结构排列法
1、画数和笔形都是相同的字的排列法。即按字形结构排列。先左右,再上下,后整体。如“晚”与“冕”比,“晚”是左右形。“冕”是上下形,则“晚”排在“冕”之前。“叶”与“申”相比,“叶”是合体字,“叶”排在“申”之前。
2、笔画、笔形完全相同字的排列法。笔画、笔形完全相同,又是同一种结构的字,就把字形比较简单的字排在前头,如“中”、“内”,“中”排在“内”之前。

笔画排序.rar
2楼
supersudda
刚好用得着,谢谢楼主
3楼
tianyk
谢谢楼主,学习了。

免责声明

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

评论列表
sitemap