对字母数字数据进行排序,字母在数字之前

对字母数字数据进行排序,字母在数字之前

问题:如何按照使用 EBCDIC 字符的大型机排序的外观进行排序。

我已经搜索了三天这个问题的答案,但没有任何效果。我有大约 6,000 行零件编号。我需要 Excel 先按字母排序,然后按数字排序(整个零件编号)。零件编号的长度不一致,并且没有任何常量值。

Excel 会这样做:

E7NND550AB
E7NND561CA
E8NND749AA
E9NN10316AA
EAA6889B
EAF907B
EC0N585A

我需要这个:

EAA6889B
EAF907B
EC0N585A
E7NND550AB
E7NND561CA
E8NND749AA
E9NN10316AA

请帮忙!

答案1

自定义排序顺序应该可以解决问题,但我无法让它工作。因此,下一个方法是临时翻译数据。

David McRitchie 的 Excel 页面

如何按照使用 EBCDIC 字符的大型机排序的外观进行排序。

创建此函数:

Function SortBCD(aaa)
   'David McRitchie  1999-04-07
   '  see sorting in http://www.mvps.org/dmcritchie/excel.htm
   'Sort letters before numbers as in BCD and in EBCDIC.
   'FromSTR is comprised of characters to be sorted must in EBCDIC sequence
   'See http://www.mvps.org/dmcritchie/rexx/htm/symbols.htm    
   FromSTR = " -/=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   'Sortstr any characters but must be in EXCEL sequence
   'Please note EXCEL sequence differs from ASCII
   'Must be at least as long as FromSTR
   SortSTR = "#$()0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
   L = Len(aaa)
   capsaaa = UCase(aaa)   'bonus: will treat LCase same as UCase
   For i = 1 To Len(capsaaa)
       For j = 1 To Len(FromSTR)
          If Mid(capsaaa, i, 1) = Mid(FromSTR, j, 1) Then
             SortBCD = SortBCD & Mid(SortSTR, j, 1)
             GoTo nextI
          End If
       Next j
nextI:
   Next i
End Function

要使用,请在源列旁边创建一个列,并使用公式(例如 =SortBCD(A1)),然后在新列上对数据进行排序。排序后删除新列,新列是无意义的乱码,用于帮助排序,排序后不再有用。如果您对公式进行了更改,请不要忘记在重新排序之前按 F9 重新计算。

相关内容