【发布时间】:2015-03-26 21:06:58
【问题描述】:
我最初的问题并没有想象中那么清楚,所以这里有一点澄清:
我正在使用的是用于数据透视表的项目列表。每行代表一个项目,一个人可以有多个项目,所以同一个人的名字出现在多行。项目排名 1-15。对于最终输出,我们正在寻找每个项目的个人计数。我们希望每个人都被计算一次,并且我们希望他们被计算为他们拥有的最高排名的项目。最后,这为我们提供了个人群体的统计数据,这些群体是每个人拥有的排名最高的项目。
人名在 A 列,排名在 F 列。我有一个公式可以找到每个 A 的最高 F,但是在加载新数据并且总行数发生变化时它失败了。
这是我最初的问题,以及我正在使用的公式:
我有一个有效的数组公式,除非表中的条目数发生变化。我知道如何找到最后一行,但我不知道如何将两者结合起来。以下是详细信息:
我有一个表,它从另一个工作表上的动态更新查询中提取数据。它在 A 列中有重复的文本值,在 F 列中有唯一的数值。在 G 列中,我有一个数组公式。如果当前行的 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))
【问题讨论】:
-
我使用的主题行可能有点误导,但我想不出一个真正准确的问题总结。我想要的是找到与重复 A 值的任何给定实例相对应的所有 F 值的最大值,但是必须检查的总范围每天都在变化(并且 A 值的重复不一定接近列表中的彼此)。这更有意义吗?
-
为了进一步澄清,以防将来人们面临类似的问题,我正在使用的是用于数据透视表的项目列表。每行是一个项目,一个人可以有多个项目,所以同一个人的名字出现在多行。这些项目排名 1-15,我们正在寻找每个项目的个人计数。我们希望每个人只被计算一次,并且我们希望他们获得他们拥有的最高排名的项目。无论如何,我在下面有两个答案都有效。
-
我不介意对我的问题进行澄清。任何可以帮助像我一样困惑的未来人。
标签: excel excel-formula