因此,今天,我的计算机在工作时运行了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, ""))
答案 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进行确认。
但是,当简单的IF()
可以完成所需的操作时,这又是很长的路要走。