Excel按SKU跨表INDEX MATCH匹配去重后TEXTJOIN拼接公式求解
表A目标列C公式实现方案
前提约定
提前约定数据范围,你实际使用时替换为自己的表格实际范围即可:
- 表A工作表名:
表A,SKU列为A列(数据行A2:A1000),水果列为B列(数据行B2:B1000),目标C列从C2开始填公式 - 表B工作表名:
表B,水果列为A列(数据行A2:A500),Price Range列为B列(数据行B2:B500)
Microsoft 365/Excel 2021及以上版本公式(支持动态数组)
直接在C2单元格输入以下公式,下拉填充即可:
=TEXTJOIN(", ",TRUE,UNIQUE(INDEX(表B!$B$2:$B$500,MATCH(FILTER(表A!$B$2:$B$1000,表A!$A$2:$A$1000=A2),表B!$A$2:$A$500,0))))
逻辑拆解
- 第一步用
FILTER函数筛选出表A中所有和当前行SKU一致的水果列表 - 第二步用
INDEX+MATCH批量匹配表B中对应水果的Price Range值 - 第三步用
UNIQUE函数对匹配到的价格区间去重 - 第四步用
TEXTJOIN按要求的分隔符拼接结果,参数TRUE会自动忽略匹配不到的空值,不会出现多余的逗号
旧版Excel兼容公式(无动态数组函数)
输入完成后需要按Ctrl+Shift+Enter组合键生效,再下拉填充:
=TEXTJOIN(", ",TRUE,IF(MATCH(INDEX(表B!$B$2:$B$500,MATCH(IF(表A!$A$2:$A$1000=A2,表A!$B$2:$B$1000,""),表B!$A$2:$A$500,0)),INDEX(表B!$B$2:$B$500,MATCH(IF(表A!$A$2:$A$1000=A2,表A!$B$2:$B$1000,""),表B!$A$2:$A$500,0)),0)=ROW(INDIRECT("1:"&COUNTIF(表A!$A$2:$A$1000,A2))),INDEX(表B!$B$2:$B$500,MATCH(IF(表A!$A$2:$A$1000=A2,表A!$B$2:$B$1000,""),表B!$A$2:$A$500,0)),""))
内容的提问来源于stack exchange,提问作者Kobe2424
相关产品推荐
相关产品推荐

