如何修改Excel公式以忽略A列空行匹配对应数据?
| 0 | A | B | C | D | 2023-S | 2023-M | G | 2024-S | 2024-M | J | 选中数据 | L | M |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 产品 | 店铺 | 2023-S | 2023-M | 2024-S | 2024-M | |||||||
| 2 | lookup_array | ||||||||||||
| 3 | 产品A | 店铺3 | 80 | 2% | 120 | 22% | 2024-S | ||||||
| 4 | 产品B | 店铺1 | 320 | 17% | 400 | 15% | return_array | ||||||
| 5 | 产品B | 店铺3 | 90 | 30% | 750 | 8% | 2024-M | ||||||
| 6 | 产品B | 店铺2 | 500 | 4% | 70 | 4% | |||||||
| 7 | |||||||||||||
| 8 | 400 | 选中数据 | |||||||||||
| 9 | 产品C | 店铺2 | 160 | 10% | 245 | 10% | 400 | 产品B | |||||
| 10 | 产品D | 店铺1 | 500 | 8% | 130 | 4% | 400 | 产品E | |||||
| 11 | 产品D | 店铺4 | 130 | 11% | 130 | 4% | 70 | 产品B | |||||
| 12 | 产品E | 店铺2 | 75 | 8% | 650 | 15% | 520 | 产品H | |||||
| 13 | 产品E | 店铺1 | 60 | 47% | 90 | 7% | 130 | 产品D | |||||
| 14 | 产品E | 店铺4 | 500 | 25% | 400 | 35% | 90 | 产品E | |||||
| 15 | 130 | 产品D | |||||||||||
| 16 | 70 | 130 | 产品F | ||||||||||
| 17 | 70 | 产品H | |||||||||||
| 18 | 产品E | 店铺3 | 350 | 9% | 140 | 13% | |||||||
| 19 | 产品F | 店铺2 | 60 | 30% | 130 | 9% | |||||||
| 20 | 产品G | 店铺2 | 90 | 5% | 370 | 12% | |||||||
| 21 | 产品H | 店铺1 | 390 | 27% | 70 | 16% | |||||||
| 22 | 产品H | 店铺2 | 70 | 18% | 520 | 42% |
需在M9:M17区域根据K9:K17的值匹配对应数据,原有两个实现公式如下:
方案1(无灵活return_array)
=LET( _Data, A3:I22, _Col, XLOOKUP(M3,A1:I1,_Data,""), _SelectedData, K9:K17, _Fx, LAMBDA(r,s, MAP(r,LAMBDA(c,COUNTIF(s:c,c)/10+c))), TOCOL(IF(_Fx(_Col,TAKE(_Col,1))=TOROW(_Fx(_SelectedData, TAKE(_SelectedData,1))),TAKE(_Data,,1),NA()),3,1))
方案2(含灵活return_array,对应单元格M3)
=IFERROR(LET( a, K9:K17, b, A1:I1, c, A3:I22, d, XLOOKUP(M3,b,c,""), MAP(a,LAMBDA(e, @DROP(TOCOL(FILTER(IFS(d=e,c),M6=b),3), COUNTIF(K9:e,e)-1)))),"")
表格中存在A列无值的空行(如H8、H16),这些行的数值出现在K9:K17时,上述公式会返回0。以下是添加了忽略A列空行条件的修改版公式:
修改后的方案1
先过滤A列非空行,再进行匹配计算:
=LET( _RawData, A3:I22, _Data, FILTER(_RawData, TAKE(_RawData,,1)<>""), _Col, XLOOKUP(M3,A1:I1,_Data,""), _SelectedData, K9:K17, _Fx, LAMBDA(r,s, MAP(r,LAMBDA(c,COUNTIF(s:c,c)/10+c))), TOCOL(IF(_Fx(_Col,TAKE(_Col,1))=TOROW(_Fx(_SelectedData, TAKE(_SelectedData,1))),TAKE(_Data,,1),NA()),3,1))
修改后的方案2
同样先过滤A列非空行,同时确保匹配逻辑仅作用于有效数据:
=IFERROR(LET( a, K9:K17, b, A1:I1, _RawData, A3:I22, c, FILTER(_RawData, TAKE(_RawData,,1)<>""), d, XLOOKUP(M3,b,c,""), MAP(a,LAMBDA(e, @DROP(TOCOL(FILTER(IFS(d=e,c),TAKE(c,,1)<>""),3), COUNTIF(K9:e,e)-1)))),"")
修改说明
两个方案均新增了FILTER(_RawData, TAKE(_RawData,,1)<>"")步骤,提前剔除A列空值的行,后续所有计算基于过滤后的有效数据源,避免空行数值干扰匹配结果。
内容的提问来源于stack exchange,提问作者Michi
相关产品推荐
相关产品推荐

