0

我一直在试图弄清楚如何让一部分 excel 公式“正常”计算,而另一部分计算为数组公式。

具体来说,我试图定义我正在检索值的项目的排名,然后将 RANK.EQ 公式应用于某个数组的动态创建的子集,并根据另一列进行过滤。

当前代码应该是静态的并且RANK.EQ(INDEX(RANKING_COLUMN,MATCH(TARGET_CELL,TARGET_COLUMN,0)),IF(FILTER_COLUMN=FILTER_CELL,RANKING_COLUMN,0),1)正在 定义动态数组。INDEX(RANKING_COLUMN,MATCH(TARGET_CELL,TARGET_COLUMN,0))IF(FILTER_COLUMN=FILTER_CELL,RANKING_COLUMN,0)

我希望使用数组常量语法 {} 从数组计算中排除所需的静态值,但不允许使用公式。

欢迎对此提供任何帮助。

谢谢

4

1 回答 1

0

我不确定你为什么想要一个“部分”数组公式,是为了提高效率吗?AFAIK Excel 要求您在公式的任何部分都需要数组输入的情况下“输入数组”所有公式,但我认为在评估非数组部分时没有特别的效率损失。

在您的公式中,您似乎排名降序(最低值排名第 1),这是您的意图吗?如果是这样,那么我认为您不想为动态 IF 函数的 FALSE 部分返回 0,因为零可能会影响排名。

在任何情况下COUNTIF都可以用来模拟RANK.EQ,因此COUNTIFS可以用来模拟RANK.EQ条件 - 这些函数都不需要“数组条目”,所以你应该能够使用这个公式:

=COUNTIFS(RANKING_COLUMN,"<"&INDEX(RANKING_COLUMN,MATCH(TARGET_CELL, TARGET_COLUMN,0)),FILTER_COLUMN,FILTER_CELL)+1

该公式计算排名列中低于您的静态值并且过滤器列也满足过滤器单元格标准的值。这有效地为您提供了“有条件的降序”,尽管您需要加 1,否则最高排名为零。

编辑:解决您的评论-我假设您想要该特定过滤器的下一个项目?在您的MATCH函数中,比较将产生一个TRUE/FALSE值数组,因此 MATCH 的“查找值”需要为 TRUE .....不是 1,但即使如此,第二个COUNTIFS也会包含每一行的结果,因此您可以获得匹配过滤器类别错误。这个版本应该解决这个问题[注意第二个额外的标准COUNTIFS]

=MATCH(TRUE,COUNTIFS(RANKING_COLUMN,"<"&INDEX(RANKING_COLUMN,MATCH(TARGET_CELL, TARGET_COLUMN,0)),FILTER_COLUMN,FILTER_CELL)+1=COUNTIFS(RANKING_COLUMN,"<"&RANKING_COLUMN,FILTER_COLUMN,FILTER_COLUMN,FILTER_COLUMN,FILTER_CELL),0)

....如果你想从另一列检索一个值,你也需要 INDEX........但请注意,如果有重复项,则 RANKS 中可能存在间隙(根据正常行为RANK 函数),因此“下一个排名”可能不存在

于 2013-07-03T08:44:22.317 回答