如何判断range B单元格是否为range A子串并展示对应值列表
判断Range B单元格是否为Range A单元格的子串并匹配对应值列表
方法一:Excel公式法(无需编程)
假设你的Range A是A2:A10,Range B是B2:B10,要把匹配结果放在C列对应位置:
在C2单元格输入以下公式:
=TEXTJOIN(", ", TRUE, IF(ISNUMBER(SEARCH(B2, $A$2:$A$10)), $A$2:$A$10, ""))
- 如果你使用的是Excel 365/2021:直接按回车即可,公式会自动溢出到下方单元格。
- 如果你使用的是旧版Excel:输入公式后需要按
Ctrl+Shift+Enter作为数组公式执行。
公式说明:
SEARCH(B2, $A$2:$A$10):检查B2的值是否是Range A中某个单元格的子串(不区分大小写,要区分的话替换为FIND)。ISNUMBER(...):将搜索结果转为布尔值,找到则返回TRUE。IF(...):筛选出Range A中符合条件的单元格值。TEXTJOIN(", ", TRUE, ...):将所有匹配的值用逗号分隔拼接成字符串,忽略空值。
如果需要在无匹配时显示提示文本,可把公式中的""替换为"无匹配"。
方法二:VBA宏(适合大量数据/自动化)
如果你的数据量较大,或需要重复执行该操作,用VBA更高效:
- 按
Alt+F11打开VBA编辑器。 - 插入新模块,粘贴以下代码:
Sub MatchSubstrings() Dim rngA As Range, rngB As Range Dim cellA As Range, cellB As Range Dim resultStr As String ' 请根据实际表格修改区域和工作表名称 Set rngA = ThisWorkbook.Sheets("Sheet1").Range("A2:A10") Set rngB = ThisWorkbook.Sheets("Sheet1").Range("B2:B10") For Each cellB In rngB resultStr = "" For Each cellA In rngA ' 不区分大小写用vbTextCompare,区分大小写替换为vbBinaryCompare If InStr(1, cellA.Value, cellB.Value, vbTextCompare) > 0 Then resultStr = IIf(resultStr = "", cellA.Value, resultStr & ", " & cellA.Value) End If Next cellA ' 将结果写入B列右侧的单元格(可修改Offset参数调整位置) cellB.Offset(0, 1).Value = IIf(resultStr = "", "无匹配", resultStr) Next cellB End Sub
- 修改代码中的
rngA、rngB和工作表名称为你的实际数据区域。 - 运行宏,匹配结果会自动写入Range B右侧的单元格。
额外提示:
- 若要去除Range A中的重复匹配值,可在VBA中先对Range A去重,或在公式中结合
UNIQUE函数(仅Excel 365支持)。 - 公式法中,若要精准匹配(比如子串需完全匹配,而非包含),可调整
SEARCH的参数或结合其他逻辑。
内容的提问来源于stack exchange,提问作者Luan Tran
相关产品推荐
相关产品推荐

