使用列表

时间:2016-03-11 20:55:03

标签: excel excel-formula excel-2010

我正在尝试对列表中也有#N / A的数字进行排名。我已经看到了使用countif的建议,但这种方法并没有那么富有成效。一种想法是因为列表中的数字/值是使用公式生成的(在这种情况下是索引和iferror公式),Excel无法将输出识别为可以排序的数值。我试图将格式更改为数字,但到目前为止还没有奏效。以下是用于生成需要排名的数字的公式:

={IFERROR(INDEX($BT$12:$BT$272,$BV13,COLUMNS($BW$12:BW13)),#N/A)}

输出范围在1950-2015的任何地方,包括一堆#N / A.关于如何对这些数字进行排名的任何想法?

4 个答案:

答案 0 :(得分:1)

两个建议:

  1. 更改生成数字的公式,如下所示:

    ={IFERROR(INDEX($BT$12:$BT$272,$BV13,COLUMNS($BW$12:BW13)),"")}
    

    空白("")不会导致与#N/A排名相同的问题。

  2. 如果您在列中继续使用#N/A非常重要,请创建一个帮助列,其中包含原始列的结果,但将#N/A替换为空白。假设您的#N/A值列为BX,则可以通过将以下公式复制到BY列来实现:

    =IFERROR(BX12,"")
    

    然后,您将应用RANK公式来查看BY而不是BX

答案 1 :(得分:1)

较新的AGGREGATE¹ function旨在忽略单元格中的错误(选项 6 ),并且具有可用于LARGESMALL的子函数递增或递减伪 - RANK函数。

作为BU12中的数组公式²:BV12,

'ranked in ascending order
=IFERROR(MATCH(BT12, AGGREGATE(15, 6, BT$12:BT$272, ROW(INDIRECT("1:"&COUNT(BT$12:BT$272)))), 0), "")
'ranked in descending order
=IFERROR(MATCH(BT12, AGGREGATE(14, 6, BT$12:BT$272, ROW(INDIRECT("1:"&COUNT(BT$12:BT$272)))), 0), "")

IFERROR包装器可以避免显示因尝试直接排名#N/A而产生的任何错误。

rank_aggregate

¹ Excel 2010引入了AGGREGATE function。早期版本不提供。

²数组公式需要使用 Ctrl + Shift + Enter↵完成。如果输入正确,Excel将公式包装在大括号中(例如 {} )。您不要自己键入大括号。一旦正确进入第一个单元格,就可以像任何其他公式一样向下或向右填充或复制它们。尝试并减少对更接近表示实际数据范围的范围的全列引用。数组公式以对数方式计算计算周期,因此将参考范围缩小到最小值是一种好习惯。有关详细信息,请参阅Guidelines and examples of array formulas

答案 2 :(得分:0)

excel无法对我的列表进行排名的原因是因为输出不是数字。这是一个解决方法:

={IFERROR(INDEX($BT$12:$BT$272,$BV13,COLUMNS($BW$12:BW13))+0,"")}

如果添加ZERO,则会将输出转换为数字。现在您可以最终对输出进行排名。简单的解决方案但有效感谢所有插话的人 - 大声思考肯定有帮助!

答案 3 :(得分:0)

试试这个,将错误结果更改为极端:

=IFERROR(INDEX($BT$12:$BT$272,$BV13,COLUMNS($BW$12:BW13)),99999)

或者取决于方向可以为零。然后,您可以应用自定义格式:

[<>99999]0;"#N/A"

这会将#N/A用于错误,但会在背景中保留一个数字。

然后你的等级公式:

=IF(A1=99999,"",RANK(A1,$A$1:$A$100))

显然更改引用以匹配您的引用。