excel 自然或人为排序顺序

pu82cl6c  于 2023-05-01  发布在  其他
关注(0)|答案(5)|浏览(138)

我已经研究了好几个月了。我只是不能得到natural(真字母数字)结果。我很震惊,我不能得到他们,因为我已经能够在RPG自1992年以来与EBCDIC
我正在寻找任何解决方案,在SQL,VBS或简单的Excel或访问。以下是我掌握的数据:

299-8, 
3410L-87, 
3410L-88, 
420-A20, 
420-A21, 
420A-40, 
4357-3, 
AN3H10A, 
K117GM-8, 
K129-1, 
K129-15, 
K271B-200L, 
K271B-38L, 
K271D-200EL, 
KD1051, 
KD1062, 
KD1092, 
KD1108, 
KD1108, 
M8000-3, 
MS24665-1, 
SK271B-200L, 
SAYA4008

我正在寻找的顺序是真正的字母数字顺序如下:

AN3H10A, 
KD1051, 
KD1062, 
KD1092, 
KD1108, 
KD1108, 
K117GM-8, 
K129-1, 
K129-15, 
MS24665-1,
M8000-3, 
SAYA4008, 
SK271B-200L

库存是7800记录,所以我有一些问题的处理能力以及。
任何帮助将不胜感激。
杰夫

sg24os4d

sg24os4d1#

在原生Excel中,您可以添加多个排序列以返回每个字符的ASCII代码,但如果字符是数字,则在代码中添加一个大数字(例如,如果字符是数字,则在代码中添加一个大数字)。g 1000)。
然后对每个帮助列进行排序,包括表中的第一列,但不包括排序中的列。
公式:

=IFERROR(CODE(MID($A1,COLUMNS($A:A),1))+AND(CODE(MID($A1,COLUMNS($A:A),1))>=48,CODE(MID($A1,COLUMNS($A:A),1))<=57)*1000,"")

排序对话框:

结果:

您可以使用VBA实现类似的算法,也可能使用SQL。我不知道VBS或Access。

niknxzdl

niknxzdl2#

您可以尝试使用format来左填充字符串,按以下顺序

select column
from my_table 
order by  Format(column, "0000000000")
q35jwt9p

q35jwt9p3#

添加排序列:

, iif (left(fieldname, 1) between '0' and '9', 1, 0) sortField
etc
order by sortField, FieldName
w46czmvw

w46czmvw4#

假设你的数据在“A”列。如果你把这个公式放在列“B”=IFERROR(IF(LEFT(A1,1)+1>0,"ZZZZZZZ "&A1,A1),A1)中,它会自动在所有数值前面加上Z,这样当你对A-Z排序时,它们会自然地出现在所有字母值后面。稍后你可以找到并替换那个有趣的ZZZZZ字符串。..

puruo6ea

puruo6ea5#

有许多方法,但在本例中,最少的工作量可能是构建两个分隔符(-)的列。
然后“填充”右对齐的结果(空格或0),然后对两列进行排序。
所以在查询生成器中,我们有这样的:

SELECT Field1, 
Format(
Mid(field1,1,IIf(InStr(field1,"-")=0,50,InStr(field1,"-")-1)),
">@@@@@@@@@@") AS Expr1,
Format(
Mid(field1,IIf(InStr(field1,"-")=0,99,InStr(field1,"-")+1)),
">@@@@@@@@@@") AS Expr2
FROM Data

当我们运行上面的原始查询时,我们会得到这样的结果:

因此,现在在查询生成器中,只需对第一个派生列进行排序,然后对第二个派生列进行排序。
例如:

运行查询,我们得到以下结果:

编辑:
看看你想要的结果,看起来上面的排序是错误的。我们必须向右填充0。
第二次尝试:

SELECT Field1, 
Left(Mid(field1,1,IIf(InStr(field1,"-")=0,30,InStr(field1,"-")-1)) 
& String(30,"0"),30) AS Expr1, 
Left(Mid(field1,IIf(InStr(field1,"-")=0,99,InStr(field1,"-")+1)) 
& String(30,"0"),30) AS Expr2
FROM Data

结果如下:

考虑到您的表大小很小,那么上面的查询应该执行得很好。

相关问题