`AGGREGATE` 和 `INDEX` 函数中的数组

Arrays in `AGGREGATE` and `INDEX` functions

场景:

所以,今天上班时我的电脑 运行 更新了 MS Office。然后,大约 30 分钟后,有人来找我,提出了一个看似简单的要求:与其使用 VLOOKUP 到 return,只是 第一个 匹配,他们想要一个 all 匹配项的分隔列表。 (例如 "which offices has this user visited this week"?)看起来很简单。

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

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

点击 Enter,然后... 6。与我预期的不太一样 (6, 35, 19, 56, 47),所以我说 "sorry about that",返回单元格,然后按 Ctrl+Shift+输入:

6,又是

所以,运行 "Evaluate Formula",结果是 k 位置(最后一个参数)的 ROW(A:A) AGGREGATE returning 1 而不是 {1,2,3,4,5,6,7,8,9,10,11},无论您使用的是普通公式还是数组公式。

所以,我手动输入数组:

=TEXTJOIN(", ", TRUE, IFERROR(INDEX(B:B, AGGREGATE(15, 6, ROW(A:A)/--(A:A=E1), {1,2,3,4,5,6,7,8,9,10,11})),""))

最终结果:6。我再次计算公式,AGGREGATE 丢弃了数组中除第一个值之外的所有内容。如果我在 AGGREGATE 结果上删除 INDEX,并且只删除 运行 TEXTJOIN,它就可以正常工作。同样,=SUM(ROW(B1:B11)) 工作正常,但 =SUM(INDEX(B1:B11, ROW(B1:B11), 1)) 不工作。

问题:

现在,我 95% 确定 我曾经能够让这个 INDEX(.., AGGREGATE(..))SUM(INDEX(..)) 正常工作,而不仅仅是 return输入第一个值 - 这是否改变了某些函数链如何与数组一起工作,或者我只是记错了?

(有兴趣的朋友,最后我们改用数组公式=TEXTJOIN(", ", TRUE, IF(A:A=E1, B:B, ""))

测试中使用的垃圾数据:

A |  6
A | 35
A | 19
B | 33
B | 46
B | 72
A | 56
C | 41
C | 20
B | 52
A | 47

尽管您发现添加 IF 而不是长 INDEX/AGGREGATE 是可行的。

它不起作用的原因是INDEX通常没有设置为以数组作为行号。

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

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

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

但是当一个简单的 IF() 就可以满足需要时,这又是一个漫长的过程。