所有呼号都在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
答案 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指定的前缀。在确定正斜杠之后的字符串是否为有效国家/地区名称后,函数需要对国家/地区进行表查找。这实际上是一个非常复杂的问题。