Office 365中如何用动态数组公式按值列表筛选表格?
Office 365动态数组多值筛选问题解决方法
问题重现
尝试通过动态数组(如A1#格式),基于B2#的数值列表筛选E2#对应的表格,但以下公式均返回#N/A或未得到预期结果:
=FILTRE(E2#; PRENDRE(E2#;;1)=B2#)(法语版函数)=FILTER(E2#, TAKE(E2#,,1)=B2#)(英语版函数)=BYROW(B2#; LAMBDA(x; FILTRE(E2#; PRENDRE(E2#;;1)=PRENDRE(B2#;LIGNE(x)))))(法语版BYROW)=BYROW(B2#, LAMBDA(x, FILTER(E2#,TAKE(E2#;;1)=TAKE(B2#, ROW(x)))))(英语版BYROW)
使用XLOOKUP/RECHERCHEX也未达成目标。
解决方案
方法1:FILTER + MATCH(推荐,高效一次性筛选)
核心是用MATCH判断E2#第一列的值是否存在于B2#列表中,再用ISNUMBER转换为布尔数组供FILTER识别:
英语版公式:
=FILTER(E2#, ISNUMBER(MATCH(TAKE(E2#,,1), B2#, 0)))
法语版公式:
=FILTRE(E2#; ESTNUM(RECHERCHEV(PRENDRE(E2#;;1); B2#; 1; FAUX)))
原理:
TAKE(E2#,,1)提取E2#的第一列数据MATCH(..., B2#, 0)检查每个值是否在B2#列表中,存在则返回位置,否则返回#N/AISNUMBER/ESTNUM将结果转为TRUE/FALSE的一维布尔数组,FILTER基于此返回符合条件的整行
方法2:BYROW + VSTACK(逐值筛选后合并)
如果需要按B2#的顺序保留对应筛选结果,可以用BYROW遍历每个值,再合并结果:
英语版公式:
=DROP(REDUCE("", B2#, LAMBDA(acc, val, VSTACK(acc, FILTER(E2#, TAKE(E2#,,1)=val)))), 1)
法语版公式:
=SUPPR(DYNAMIQUE(REDUIRE("", B2#; LAMBDA(acc; val; EMPILER(acc; FILTRE(E2#; PRENDRE(E2#;;1)=val))))); 1)
原理:
BYROW遍历B2#的每个值val- 对每个
val用FILTER筛选E2#中第一列匹配的行 REDUCE+VSTACK将所有筛选结果逐行合并,DROP/SUPPR(DYNAMIQUE)移除初始的空行占位
内容的提问来源于stack exchange,提问作者MonkeyJLuffy
相关产品推荐
相关产品推荐

