我一直试图弄清楚如何将“正常”计算的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)
定义动态数组。
我希望使用数组常量语法{}从数组计算中排除所需的静态值,但不允许使用公式。
欢迎任何帮助。
谢谢
答案 0 :(得分: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,但即使这样,第二个{{1}将包含每行的结果,因此您可以获得错误的过滤器类别的匹配项。此版本应修复[注意第二COUNTIFS
]
COUNTIFS
....如果你想从另一列中检索一个值,你也需要INDEX ........但请注意,如果有重复,那么RANKS可能会有间隙(按照RANK函数的正常行为)所以“下一级”可能不存在