Excel FILTER函数输出结果能否存储为单单元格内可直接调用的数组
Excel单单元格存储FILTER返回数组方案
结论
你的需求可以实现,根据你的Excel版本有不同的实现方案:
方案1:Excel 365/2024 版本(完全匹配需求)
该版本支持将数组以结构化形式存在单个单元格内,后续可直接调用:
- 首先定义一个通用解析Lambda函数(仅需操作一次):
点击「公式」选项卡→「定义名称」,名称填写EVAL_ARR,引用位置填写=LAMBDA(arr_text,EVALUATE(arr_text)),点击确定即可。 - E1单元格输入公式,按回车即可:
此时E1单元格会直接显示=ARRAYTOTEXT(FILTER($A1:$D1,$A1:$D1=2),1){2,2};E2单元格对应输入=ARRAYTOTEXT(FILTER($A2:$D2,$A2:$D2=5),1),会显示{5,5,5}。 - 后续调用该单元格数组时,直接用定义好的
EVAL_ARR包裹即可,不需要使用数组公式,正常回车就生效。比如统计E1内数值等于2的个数,公式为:=SUMPRODUCT(EVAL_ARR(E1)=2)
注意:该方案用到了宏表函数,文件需要保存为
.xlsm格式才能正常运行。
方案2:不需要宏表函数的兼容方案
如果不想使用宏表函数,可以用动态数组的溢出范围引用特性:
- 还是按你原来的方式在E1输入
=FILTER($A1:$D1,$A1:$D1=2),结果会自动溢出到相邻单元格 - 后续调用整个数组时不需要引用原A-D列区域,只需要用
E1#就可以代表整个溢出数组,比如统计公式可以写为:=SUMPRODUCT(E1#=2)
该方案不需要额外定义名称,操作更简单,仅需要Excel 365/2021及以上版本支持。
低版本说明
如果你使用的是Excel 2019及更早版本,由于本身不支持动态数组与FILTER函数,无法实现该需求。
内容的提问来源于stack exchange,提问作者Dorian IL
相关产品推荐
相关产品推荐

