我原来的问题并不像以前那么清晰,所以这里有一点澄清:
我正在使用的是在数据透视表中使用的项目列表。每行代表一个项目,一个人可以有多个项目,因此同一个人的名字出现在多行上。这些项目排名1-15。对于最终输出,我们要查找每个项目的个人数。我们希望每个人只计算一次,我们希望他们计入他们拥有的最高排名项目。最后,这给了我们一组个人,这些群体是每个人拥有的最高排名项目。
人们的名字在A列,排名在F列。我有一个公式,可以找到每A最高的F,但是当加载新数据并且总行数发生变化时失败。
这是我原来的问题,以及我正在使用的公式:
除非表中的条目数发生变化,否则我的数组公式有效。我知道如何找到最后一排,但我不知道如何将两者结合起来。以下是详细信息:
我有一张表可以从另一张表上的动态更新查询中提取数据。它在A列中具有重复的文本值,在F列中具有唯一的数值。在G列中,我有一个数组公式。如果当前行的F值是相应A的最大F,则返回1,否则返回"否" (更容易过滤并只计算其他地方的数字,不要问)。
A ... F Joe 1.2 Joe 12.7 Ralph 3.5 Ralph 4.1 Ralph 0.5 Warren 12.9 Mike 6.4 Mike 8.5 Ralph 1.3 Warren 7.9 Warren 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))
答案 0 :(得分:1)
您不需要在此处找到MAX
值 - 您只需要知道该特定列A值是否有更高的值。您可以使用COUNTIFS
功能,这样更快,不需要"数组输入"并且,至关重要的是,它可以应用于整个列,没有明显的缺点。
基于此,您可以在G2
复制下来使用此公式
=IF(A2="","",IF(COUNTIFS(A:A,A2,F:F,">"&F2)>0,"No",1))
这应该给你相同的结果,而不用担心数据的大小
答案 1 :(得分:0)
您应该能够使用INDIRECT
将单元格地址作为字符串。
所以用{/ p>替换$A$2:$A$1719
INDIRECT("$A$2:$A$" & (MATCH(TRUE, INDEX(ISBLANK('SourceQuery'!A1:A2001), 0, 0), 0)-1))
并将$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"))}