我的数据会发生变化,因此我使用动态列表。排序也需要动态。我不想点击内置排序功能。
我正在按公式对动态数据进行排序,但当排序数据相同时会失败。例如:
A B Marham 240 Sigonella 400 Toulon 400 Ghedi 150 Lajes 2000 Nordholz 400
按 B 列排序并返回 A 列值,结果应该是:
Lajes 2000 Sigonella 400 Toulon 400 Nordholz 400 Marham 240 Ghedi 150
注意:我不关心重复值之间的顺序(“400”)。
使用这个公式:
{=INDEX($A$1:$A$6, MATCH(SMALL(COUNTIF($B$1:$B$6, "<"&$B$1:$B$6), ROW(1:1)), COUNTIF($B$1:$B$6, "<"&$B$1:$B$6), 0))}
结果是:
Lajes 2000 Sigonella 400 Sigonella 400 Sigonella 400 Marham 240 Ghedi 150
这MATCH
把我搞糊涂了。我该如何解决这个问题?
答案1
您可以通过添加隐藏的 C 列来解决重复问题,在该列中,您可以在值中添加一些非常小的数字,这些数字足够小,无法通过其他方式获得,也不会干扰原始值,这样您就可以区分重复项,例如
A B C
Marham 240 240,0001
Sigonella 400 400,0002
Toulon 400 400,0003
Ghedi 150 150,0004
Lajes 2000 2000,0005
Nordholz 400 400,0006
然后你只需按 C 列中的值排序
或者,如果您不想要任何隐藏的列,您可以像这样输入值:
A B
Marham 240,0001
Sigonella 400,0002
Toulon 400,0003
Ghedi 150,0004
Lajes 2000,0005
Nordholz 400,0006
但格式化字段以显示精度为 0 位的数值,因此 Excel 会保留您的详细值,但将其显示为:
A B
Marham 240
Sigonella 400
Toulon 400
Ghedi 150
Lajes 2000
Nordholz 400
答案2
这是我想出的...虽然它不是我所寻找的...但它确实有效。
使用上面相同的数据,我将其改为INDEX
返回分数而不是垒数:
{=INDEX($B$1:$B$6, MATCH(SMALL(COUNTIF($B$1:$B$6, "<"&$B$1:$B$6), ROW(1:1)), COUNTIF($B$1:$B$6, "<"&$B$1:$B$6), 0))}
然后,为了返回基数,我使用了返回多个匹配值的这个公式:
{=index(A$1:A$6,small(if(b$1:b$6=b1,row(b$1:b$6)),countif(b$1:b$6,b1)))}
如果有人有建议,我仍然希望让原始公式能够自行发挥作用。
答案3
我知道这已经是很久以前的事了,但其他答案中的公式对我来说不起作用。不过,我做了一些小修改后确实让它工作了:
{=INDEX($A$1:$A$7,SMALL(IF(B$1:B$6=B1,ROW(B$1:B$6)),COUNTIF(B1:B$6,B1)))}
答案4
=sort(a2:b7,2,true)
在牢房里怎么样C2
?