AGGREGATE和INDEX函数中的数组

时间:2019-07-02 11:50:59

标签: arrays excel excel-formula office365

场景:

因此,今天,我的计算机在工作时运行了MS Office更新。然后,大约30分钟后,有人来找我,提出了一个简单的请求:他们不是使用VLOOKUP仅返回 first 比赛,而是想要定界的所有匹配项。 (例如“该用户本周访问过哪些办公室”?)看起来很简单。

因此,使用一些垃圾数据(见下文),我迅速编写了以下快速演示行:

=TEXTJOIN(", ", TRUE, IFERROR(INDEX(B$1:B$11, AGGREGATE(15, 6, ROW(A$1:A$11)/--(A$1:A$11=E1), ROW(A$1:A$11))),""))

点击 Enter ,然后... 6。不太符合我的期望(6, 35, 19, 56, 47),所以我说“对不起”,回到单元格,然后按 Ctrl + Shift + < kbd>输入:

6

因此,运行“求值公式”,结果发现ROW(A$1:A$11) k 位置(最后一个参数)的AGGREGATE返回了{{1} }而不是1,无论您使用的是普通公式还是数组公式。

因此,我手动键入阵列:

{1,2,3,4,5,6,7,8,9,10,11}

最终结果:=TEXTJOIN(", ", TRUE, IFERROR(INDEX(B$1:B$11, AGGREGATE(15, 6, ROW(A$1:A$11)/--(A$1:A$11=E1), {1,2,3,4,5,6,7,8,9,10,11})),"")) 。我再次评估公式,6正在丢弃数组中除第一个值以外的所有内容。如果我放下AGGREGATE,然后在INDEX结果上运行TEXTJOIN,它就可以正常工作。同样,AGGREGATE可以正常工作,但是=SUM(ROW(B1:B11))不能正常工作。

问题:

现在,我 95%确信,我曾经能够使此=SUM(INDEX(B1:B11, ROW(B1:B11), 1))INDEX(.., AGGREGATE(..))正常工作,而不仅仅是返回第一个值-是这对于某些函数链如何与数组一起使用已经发生了改变,还是我记错了?

(对于那些感兴趣的人,最后我们改用了数组公式SUM(INDEX(..))

用于测试的垃圾数据:

=TEXTJOIN(", ", TRUE, IF(A$1:A$11=E1, B$1:B$11, ""))

1 个答案:

答案 0 :(得分:2)

尽管您发现添加IF代替了漫长的INDEX / AGGREGATE工作。

之所以不起作用,是因为通常没有将INDEX设置为将数组作为行号。

但是我们可以强制使用N(IF({1},...))

=TEXTJOIN(", ", TRUE, IFERROR(INDEX(B$1:B$11, AGGREGATE(15, 6, ROW(A$1:A$11)/--(A$1:A$11=E1), N(IF({1},ROW(A$1:A$11))))),""))

这是一个数组公式,退出编辑模式时,需要使用Ctrl-Shift-Enter而不是Enter进行确认。

enter image description here

但是,当简单的IF()可以完成所需的操作时,这又是很长的路要走。