Excel - 当有重复值时按公式排序

Excel - 当有重复值时按公式排序

我的数据会发生变化,因此我使用动态列表。排序也需要动态。我不想点击内置排序功能。

我正在按公式对动态数据进行排序,但当排序数据相同时会失败。例如:

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

相关内容