REDUCE+VSTACK组合拳,一个公式返回所有结果
常见场景:VLOOKUP查找
下图演示了一个常见场景,从原数据中查找制定产品的数据。用的也是常规方法VLOOKUP查找:
=VLOOKUP($E2,$A:$C,COLUMN(B:B),0)
数组公式返回一维数组
想要更方便的话可以考虑用数组公式,把查找值设置为数组:
=VLOOKUP(E2:E5,A:C,2,0)
公式以数组形式一次性返回所有产品1月份的数据:
也可以把第三参数列索引设置为数组:
=VLOOKUP(E2,A:C,{2,3},0)
公式以数组形式一次性返回一个产品两个月的数据:
上述两个公式分别返回纵向和横向的一维数组,把它们整合起来是不是应该返回一个二维数组呢?于是把第二、三参数同时设置为数组:
=VLOOKUP(E2:E5,A:C,{2,3},0)
公式并没有返回期望中的二维数组,而是纵向数组。
REDUCE+VSTACK返回二维数组
Excel365版本中可以用REDUCE来实现如图所示效果:
公式解读:
REDUCE函数的作用是将初始值和数组中的每个元素依次应用指定的LAMBDA函数。
-
· 初始值:””(空值) -
· 数组:E2:E5 -
· 指定的LAMBDA函数:LAMBDA(x,y,VSTACK(x,VLOOKUP(y,A:C,{2,3},0)))
初始值会被传递给LAMBDA中的x,而数组E2:E5中的4个元素会被依次传递给y。

VLOOKUP(y,A:C,{2,3},0)中可以看出y是被作为VLOOKUP的查找值,意味着4个元素都会被作为查找值运行一次。
VLOOKUP每一次运算后的结果与x用VSTACK垂直堆叠,REDUCE最终返回最后一次堆叠后的数组。
DROP函数用于删除数组中的第一行,因为第一行是初始值x,也就是空值,是不需要的数据。
总的来说,这个公式的作用是:对于E2:E5中的每个值,在A:C范围中进行精确查找,并返回第2列和第3列的对应值,然后将这些结果垂直堆叠在一起,最后删除堆叠结果的第一个元素(初始值””)。
REDUCE+VSTACK更多案例
REDUCE+VSTACK组合拳应用十分广泛,要把多个值依次应用于某一个公式,都可以考虑用它来一次性完成。
把{“桃子”;”山竹”}依次应用于FILTER作为筛选条件,筛选结果用VSTACK垂直堆叠:
=REDUCE(A1:B1,{"桃子";"山竹"},LAMBDA(x,y,VSTACK(x,FILTER(A2:B10,A2:A10=y))))
A2:A4中的文本重复指定次数,垂直堆叠:
=REDUCE("重复文本",A2:A4,LAMBDA(x,y,VSTACK(x,EXPAND(y,OFFSET(y,1),y))))
好了,今天的Excel小课堂就到此结束,大家赶紧实际操作联系一下吧,有不懂的问题可以留信问我!感谢关注Excel880,还请多多转发,持续关注我们呀!