问题:如何按照使用 EBCDIC 字符的大型机排序的外观进行排序。
我已经搜索了三天这个问题的答案,但没有任何效果。我有大约 6,000 行零件编号。我需要 Excel 先按字母排序,然后按数字排序(整个零件编号)。零件编号的长度不一致,并且没有任何常量值。
Excel 会这样做:
E7NND550AB
E7NND561CA
E8NND749AA
E9NN10316AA
EAA6889B
EAF907B
EC0N585A
我需要这个:
EAA6889B
EAF907B
EC0N585A
E7NND550AB
E7NND561CA
E8NND749AA
E9NN10316AA
请帮忙!
答案1
自定义排序顺序应该可以解决问题,但我无法让它工作。因此,下一个方法是临时翻译数据。
如何按照使用 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 重新计算。