【问题标题】:Excel - Advanced Sorting FunctionExcel - 高级排序功能
【发布时间】:2018-01-25 01:08:53
【问题描述】:

我有一个锦标赛电子表格,其中在“D”列(20 到 150 个条目)中有一个名称列表,以及每个人被分配到的桌号(“E”列)。

在“I”列中,我有一个荒谬的公式,它创建了每张桌子上可用座位数的列表(此信息从一个事件变为另一个事件)。

“G”列是我的问题。我想遍历“E”列的内容,并且任何时候“E”列中的值与“I”列的内容匹配,以给出“D”列的内容。

这是我目前在单元格 G3 中的公式:

{=IFERROR(INDEX(D$3:D$150,SMALL(IF(E$3:E$150=I3,ROW(E$3:E$150)-ROW(E$3)+1),ROWS(E$3:E3))),"")}

只要“E”列中的值为 1,该公式对“E”列中的所有值都适用。该公式在 Google 表格中运行良好,但 Excel 似乎以不同方式处理范围。我尝试过使用标准公式和数组公式都没有成功。

任何建议将不胜感激。

补充一点,如果需要,我可以使用 VBA,但我更愿意坚持使用函数。

【问题讨论】:

    标签: function excel-formula excel-2010


    【解决方案1】:

    对于这个例子,我使用了以下公式:

    =INDEX($C$14:$C$25,AGGREGATE(15,6,(ROW($D$14:$D$25)-ROW($D$14)+1)/($D$14:$D$25=H16),COUNTIF($H$16:H16,H16)),1)
    

    您需要调整范围以满足您的需要。

    【讨论】:

      【解决方案2】:

      根据我的测试,问题似乎在于ROWS(E$3:E3) 作为SMALL 函数的第二个参数。基本上,当您在第 12 行中找到第一个 2 时,您正在向小函数询问 D 中的第 10 个最小值,该值在 E 列中有 2。因为看起来您只期待八名玩家,所以这将永远找不到任何东西.

      尝试将ROWS(E$3:E3) 更改为COUNTIF(I$3:I3, I3)

      这将计算您已经在 I 列中传递了多少个 1 或 2,因此当您到达 2 时,它应该重置并要求第一个最小的。

      【讨论】:

        【解决方案3】:

        @Forward Ed。感谢您的输入。这帮助我走上了我需要的道路。

        这是最终为我工作的公式:

        {=IFERROR(INDEX(D$3:D$150,SMALL(IF(E$3:E$150=I3,ROW(E$3:E$150)-MIN(ROW(E$3:E$150))+1) ,J3)),"")}

        【讨论】:

          猜你喜欢
          • 2011-11-19
          • 2021-12-23
          • 1970-01-01
          • 2013-01-29
          • 2012-09-08
          • 1970-01-01
          • 2013-03-24
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多