You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何判断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更高效:

  1. 按 Alt+F11 打开VBA编辑器。
  2. 插入新模块,粘贴以下代码:
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
  1. 修改代码中的rngA、rngB和工作表名称为你的实际数据区域。
  2. 运行宏,匹配结果会自动写入Range B右侧的单元格。

额外提示:

  • 若要去除Range A中的重复匹配值,可在VBA中先对Range A去重,或在公式中结合UNIQUE函数(仅Excel 365支持)。
  • 公式法中,若要精准匹配(比如子串需完全匹配,而非包含),可调整SEARCH的参数或结合其他逻辑。

内容的提问来源于stack exchange,提问作者Luan Tran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 00:40:14