【问题标题】:Ranking Numbers with #N/A in List对列表中带有#N/A 的数字进行排名
【发布时间】:2016-03-11 20:55:03
【问题描述】:

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

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

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

【问题讨论】:

  • 使用嵌套在 RANK 函数中的 NUMBER 函数有效吗?
  • 我找到了一个冗长的解决方案。基本上,我将 0 添加到值中,然后将其转换为数字,然后对这些值进行排名。这可行,但我真的想避免创建太多帮助列

标签: excel excel-formula excel-2010


【解决方案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

【讨论】:

  • 感谢您的回复 - 保持 #N/A 并不重要,因此建议 #1 但仍然收到值不可用 (#N/A) 错误。我对结果数字所做的另一件事是 ISNUMBER 函数,我得到的是错误的意思,即输出不是数字格式。也许如果我可以强制输出为数字,它可能会起作用?...
  • @JKo_FinanceUse,对于这个问题,我建议使用VALUE 公式。这会将数字的文本表示形式转换为可以排名的实际数字。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    较新的AGGREGATE¹ function 旨在忽略单元格中的错误(选项6)并具有LARGESMALL 子函数,可用于升序或降序伪@ 987654324@函数。

    作为 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 进行排名而产生的任何错误。

      


    ¹ AGGREGATE function 是随 Excel 2010 引入的。它在早期版本中不可用。

    ² 数组公式需要用Ctrl+Shift+Enter↵来完成。如果输入正确,Excel 会将公式用大括号括起来(例如 {})。您不会自己输入大括号。一旦正确输入第一个单元格,它们就可以像任何其他公式一样被填充或向下或向右复制。尝试将全列引用减少到更接近代表实际数据范围的范围。数组公式以对数方式消耗计算周期,因此最好将引用范围缩小到最小值。请参阅Guidelines and examples of array formulas 了解更多信息。

    【讨论】:

      【解决方案4】:

      试试这个,把你的错误结果改到极致:

      =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))
      

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

      【讨论】:

        猜你喜欢
        • 2015-05-02
        • 1970-01-01
        • 2016-09-13
        • 2017-09-15
        • 2015-03-05
        • 1970-01-01
        • 1970-01-01
        • 2017-06-09
        • 2016-03-12
        相关资源
        最近更新 更多