如何用公式实现子SKU与父SKU的部分匹配并批量输出多匹配结果
搞定SKU部分匹配,返回逗号分隔结果
嘿,针对你8500行父/子SKU的匹配需求,我给你整理了不同Excel版本的可行方案,直接套用就行:
一、Excel 365/2021 版本(最省心)
这个版本支持动态数组函数,一步就能出结果,不用折腾复杂操作:
两种匹配方向的公式
假设数据从第2行开始(第1行是表头):
- 找「父SKU包含子SKU」的匹配项:
在C2单元格敲下面的公式,然后下拉填充整个C列:
=TEXTJOIN(", ", TRUE, FILTER($A$2:$A$8501, ISNUMBER(SEARCH(B2, $A$2:$A$8501)), ""))
- 找「子SKU包含父SKU」的匹配项:
把搜索的顺序反过来就行:
=TEXTJOIN(", ", TRUE, FILTER($A$2:$A$8501, ISNUMBER(SEARCH($A$2:$A$8501, B2)), ""))
简单解释下公式各部分
SEARCH(要找的内容, 查找范围):不区分大小写检查部分匹配,找到就返回位置,找不到返回错误;要区分大小写的话换成FIND就行。ISNUMBER(...):把上面的结果转成“是/否”的布尔值,方便筛选。FILTER(父SKU范围, 筛选条件, 没匹配到返回空):挑出符合条件的父SKU。TEXTJOIN("分隔符", 忽略空值, 要连接的内容):把筛选出来的父SKU用逗号加空格连起来,自动跳过空值。
二、旧版Excel(2019及更早)
如果你的Excel没有动态数组功能,那就用下面两种方案:
方案1:数组公式+TEXTJOIN(如果有TEXTJOIN的话)
在C2单元格输入公式,然后必须按Ctrl+Shift+Enter触发数组公式,再下拉填充:
=TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(B2, $A$2:$A$8501)), $A$2:$A$8501, ""))
(匹配方向调整同样是调换SEARCH里的两个参数)
方案2:VBA自定义函数(万能解法)
要是连TEXTJOIN都没有,写个小函数最靠谱:
- 按
Alt+F11打开VBA编辑器,右键左侧的工程窗口→插入→模块。 - 把下面的代码粘贴进去:
Function MatchSKU(childSKU As String, parentRange As Range, matchDirection As Integer) As String Dim cell As Range Dim result As String result = "" ' 参数说明:matchDirection=1 父SKU包含子SKU;matchDirection=2 子SKU包含父SKU For Each cell In parentRange If matchDirection = 1 Then If InStr(1, cell.Value, childSKU, vbTextCompare) > 0 Then result = result & cell.Value & ", " End If ElseIf matchDirection = 2 Then If InStr(1, childSKU, cell.Value, vbTextCompare) > 0 Then result = result & cell.Value & ", " End If End If Next cell ' 去掉最后多余的逗号和空格 If Len(result) > 0 Then MatchSKU = Left(result, Len(result) - 2) Else MatchSKU = "" End If End Function
- 回到Excel,在C2单元格输入:
=MatchSKU(B2, $A$2:$A$8501, 1)
- 第三个参数
1对应父包含子,换成2就是子包含父,下拉填充就搞定了。
小提醒
因为数据量有8500行,公式计算可能会有点卡,建议先把Excel改成手动计算(文件→选项→公式→手动计算),写完公式后按F9刷新结果就行~
内容的提问来源于stack exchange,提问作者Robert John
相关产品推荐
相关产品推荐

