Excel/VBA跨表匹配字符串子串 拼接返回对应列多值结果
需求说明
- 校验TestConfigs工作表
Corner列内容,识别其中所有来自Commun工作表的Corner条目,提取对应ShortName值后用/拼接 - 匹配规则示例:TestConfigs中某行Corner值为
TC_VNOM/LOOSEVEFUSEP时,对应ShortName应返回VNO/LEP - 现有使用的公式仅能返回首个匹配值,无法完成多值拼接:
=INDEX(Table4[ShortName]; AGGREGATE(15; 6; ROW($1:$8)*SIGN(MATCH("*"&Table4[Corner]&"*";TestConfigs!C3; 0)); 1))
基础数据结构
TestConfigs工作表
共2列:
Corner列:存量值为TC_POWER_DOWN/TC_OPENS、TC_VNOM/LOOSEVEFUSEP、TC_NONE/TC_VNOM/TC_OPENS、TC_POWER_DOWN/TC_OPENS、TC_POWER_DOWN/LOOSEVEFUSERShortName列:初始为空,为待填充结果列
Commun工作表
共2列,Corner与ShortName映射关系如下:
| Corner值 | 对应ShortName |
|---|---|
| TC_POWER_DOWN | PWD |
| TC_OPENS | OPS |
| TC_SHORTS | SHT |
| TC_VNOM | VNO |
| LOOSEVEFUSER | LER |
| LOOSEVEFUSEP | LEP |
| TC_NONE | NON |
| TC_OPNOM | OPN |
实现方案
方案1:高版本Excel原生公式(无需VBA,适配Excel 365/2021及以上版本)
直接使用函数组合实现,在ShortName列对应行(以Corner值在C2单元格为例)输入以下公式,下拉填充即可:
=TEXTJOIN("/",TRUE,FILTER(Table4[ShortName],ISNUMBER(SEARCH("/"&Table4[Corner]&"/","/"&C2&"/")),""))
公式说明:匹配时在字符串前后拼接/做边界校验,避免短字符串子串误匹配(比如不会将TC_VNOM_TEST误判定为包含TC_VNOM条目)
按给定测试数据的返回结果:
TC_POWER_DOWN/TC_OPENS→PWD/OPSTC_VNOM/LOOSEVEFUSEP→VNO/LEPTC_NONE/TC_VNOM/TC_OPENS→NON/VNO/OPSTC_POWER_DOWN/TC_OPENS→PWD/OPSTC_POWER_DOWN/LOOSEVEFUSER→PWD/LER
方案2:VBA自定义函数(全Excel版本兼容)
低版本Excel无TEXTJOIN/FILTER函数时,可通过自定义函数实现,操作步骤:
- 按
Alt+F11打开VBA编辑器,右键点击当前工作簿名称 → 插入 → 模块 - 将以下代码粘贴到模块代码窗口:
Function JoinMatchedShortName(targetCell As Range, communMapRange As Range) As String Dim mapArr, i As Long, sourceStr As String, resultStr As String Const delimiter As String = "/" sourceStr = delimiter & targetCell.Value & delimiter mapArr = communMapRange.Value For i = 1 To UBound(mapArr, 1) If InStr(1, sourceStr, delimiter & mapArr(i, 1) & delimiter, vbTextCompare) > 0 Then resultStr = resultStr & mapArr(i, 2) & delimiter End If Next If Len(resultStr) > 0 Then JoinMatchedShortName = Left(resultStr, Len(resultStr) - 1) End If End Function
- 返回Excel界面,在ShortName列单元格输入公式(以C3为待匹配Corner单元格为例),下拉填充整列即可:
=JoinMatchedShortName(C3, Table4[#All])
内容的提问来源于stack exchange,提问作者Mateus Santos Valença
相关产品推荐
相关产品推荐

