对包含字母和数字的呼号进行排序的宏

时间:2015-04-10 15:28:13

标签: excel vba sorting

所有呼号都在A列中,运行宏时应对它们进行排序。排序通常在所有大写字母中不区分大小写。呼号由1-2个字母(前缀),1-2个数字(数字)组成,然后是1-3个字母(后缀)我想用数字,后缀,然后按顺序排序每个符号。 W9K,BB3C,W9GFO,AB8VN,G3G,A77Bc,KB8HTM,K9DOG,W8AER,K1ZZ,W4BFT,W0CQC,WA6FV,W6TRW,AA5B,W4IY,N4C,K5UZ,K4LRG

2 个答案:

答案 0 :(得分:-1)

我会咬人。编码的一半乐趣就是解决一个问题,因为知道你已经知道了这个问题。

这是一个用户定义的函数(公式),您可以使用它将呼号转换为排序格式。请注意,数字部分为零填充,因此在二十和二十几岁之前,数字部分不会排在一起。

Option Explicit

Public Function FormatCallSign(aCell As Range)
  Dim Nbr As String
  Dim i As Integer
  Dim tmp As String
  Dim vList As Variant

  For i = 1 To Len(aCell.Value)
    If InStr(1, "1234567890", UCase(Mid(aCell.Value, i, 1))) > 0 Then
      Nbr = Nbr & Mid(aCell.Value, i, 1)
      tmp = tmp & ","
      tmp = Replace(tmp, ",,", ",")
    Else
      If InStr(1, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", UCase(Mid(aCell.Value, i, 1))) > 0 Then
        tmp = tmp & Mid(aCell.Value, i, 1)
      End If
    End If
  Next i
  vList = Split(tmp, ",")



  FormatCallSign = vList(1) & Right("0" & Nbr, 2) & vList(0)
End Function

将公式放在单元格B2中,例如使用功能区上的公式命令并从用户定义的部分中选择函数。

如前所述,如果呼号中已有分隔符,则可以使用简单的公式重新排列部分并排除分隔符。

=CONCATENATE(MID(A3,SEARCH("-",A3)+1,4),RIGHT("0"&MID(A3,SEARCH("/",A3)+1,SEARCH("-",A3)-SEARCH("/",A3)-1),2),LEFT(A3,SEARCH("/",A3)-1))

要构建如上所述的公式,首先要将其部分构建。 首先写一个Search函数找到“/”,然后复制它找到“ - ” 然后编写一个mid函数来获取斜线右边的字符,斜杠的左边,然后是数字部分。将公式粘贴到您的杰作的单个公式中。

由于将三个元素保存在单独的字段中以便简化排序更有意义,因此上述公式可以拆分为三个单独的公式,每列一个。

=MID(A3,SEARCH("-",A3)+1,4)
=value(MID(A3,SEARCH("/",A3)+1,SEARCH("-",A3)-SEARCH("/",A3)-1),2))
=LEFT(A3,SEARCH("/",A3)-1)

这可以纠正排序问题,因为这三个元素是可变长度。

答案 1 :(得分:-1)

呼号格式的初始规范是不准确的,因为它们可以以数字或字母开头,逻辑分类将由ITU指定的前缀。在确定正斜杠之后的字符串是否为有效国家/地区名称后,函数需要对国家/地区进行表查找。这实际上是一个非常复杂的问题。