在两个dynamic范围中查找最大值
我原来的问题还不太清楚,所以这里有一点澄清:
我正在使用的是在数据透视表中使用的项目列表。 每行代表一个项目,一个人可以有多个项目,所以同一个人的名字出现在多行上。 这些项目排名1-15。 对于最终的产出,我们正在寻找每个项目的个人数量。 我们希望每个人都被计算一次,并且我们希望他们计入他们拥有的最高等级的物品。 最后,这给了我们一个个人团体的统计,这些团体是每个人拥有的排名最高的项目。
人名在A列,行列在F列。我有一个公式,可以find最高F每A,但失败时,新的数据加载和总行数改变。
这是我原来的问题,以及我正在使用的公式:
我有一个数组公式可以工作,除非表中的条目数量发生变化。 我知道如何find最后一排,但我不知道如何将两者结合起来。 以下是详细信息:
我有一个表从另一张表上的dynamic更新查询中提取数据。 它在列A中有重复的文本值,在列F中有唯一的数字值。 如果当前行的F值是对应A的最大F值,则返回1,否则返回“No”(更容易过滤和计数其他地方的数字,不要问)。
A ... F 乔1.2 乔12.7 拉尔夫3.5 拉尔夫4.1 拉尔夫0.5 沃伦12.9 迈克6.4 迈克8.5 拉尔夫1.3 沃伦7.9 沃伦14.8
{=IF(A2="","",IF(F2=MAX(($A$2:$A$1719=A2)*($F$2:$F$1719)),N(1),"No"))}
这个公式工作正常,除了在任何一天的条目的总范围可以改变。 今天有1718行,加上列标题。 明天我可以有1300个参赛作品,2000年(但不超过2000年)。 如果列A中有空行,整个公式将失败,报表的其余部分将崩溃。
我知道我可以通过使用以下内容获得A列中最后一行的编号:
=MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1
今天,公式返回“1719”这正是我想要的。 在第一个公式中,您可以看到涉及该行号的两个单元格区域引用。
我想不出的是如何把两者结合起来。 理论上,我应该能够用第二个公式中的某种参考来代替第一个公式中的$ A $ 2:$ A $ 1719的参考,但是我找不到一个可行的方法。 有任何想法吗?
对于未来失去的灵魂试图解决与我相同的问题,有两个很好的答案。 您可以在下面的答案中阅读详细信息,但这里是快速参考。
如果你想通过我使用数组公式的方法来做到这一点,请使用: {=IF(A2="","",IF(F2=MAX((INDIRECT("$A$2:$A$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1))=A2)*(INDIRECT("$F$2:$F$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1)))),N(1),"No"))}
如果你不想像我这样疯狂的人,你根本不需要使用数组公式。 =IF(A2="","",IF(COUNTIFS(A:A,A2,F:F,">"&F2)>0,"No",1))
您并不需要在这里findMAX
– 您只需要知道该特定列A值是否有更高的值。 您可以使用COUNTIFS
函数,速度更快,不需要“数组input”,关键的是,可以应用到整个列而没有显着的缺点。
基于这个,你可以在G2
使用这个公式拷贝下来
=IF(A2="","",IF(COUNTIFS(A:A,A2,F:F,">"&F2)>0,"No",1))
这应该给你相同的结果,而不必担心数据的大小
你应该可以使用INDIRECT
,它将单元格地址作为一个string。
所以用$A$2:$A$1719
replace$A$2:$A$1719
INDIRECT("$A$2:$A$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1))
并用$F$2:$F$1719
replace$F$2:$F$1719
INDIRECT("$F$2:$F$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1))
最终的输出应该是这样的:
{=IF(A2="","",IF(F2=MAX((INDIRECT("$A$2:$A$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1))=A2)*(INDIRECT("$F$2:$F$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1)))),N(1),"No"))}