求双列匹配特定词时返回同行第三列值的VBA宏及解决方案
解决方案:通过VBA宏匹配前两列词汇并返回第三列值
方法一:自定义函数(支持单元格直接调用)
适合需要像内置函数一样在单元格中快速获取结果的场景:
- 按
Alt + F11打开VBA编辑器 - 右键当前工作簿 → 插入 → 模块,粘贴以下代码:
Function GetThirdColVal(key1 As String, key2 As String, dataArea As Range) As Variant Dim rowItem As Range ' 遍历数据区域的每一行 For Each rowItem In dataArea.Rows ' 检查当前行前两列是否都包含指定词汇(不区分大小写) If InStr(1, rowItem.Cells(1).Value, key1, vbTextCompare) > 0 And _ InStr(1, rowItem.Cells(2).Value, key2, vbTextCompare) > 0 Then GetThirdColVal = rowItem.Cells(3).Value Exit Function ' 找到匹配项后直接退出(因无重复匹配) End If Next rowItem ' 未找到匹配时返回提示 GetThirdColVal = "无匹配项" End Function
- 返回Excel,在目标单元格输入公式:
=GetThirdColVal("词汇1", "词汇2", A:C)- 替换
"词汇1"和"词汇2"为你要匹配的内容 A:C是数据所在列范围,可根据实际调整(比如A2:C100跳过表头)
- 替换
方法二:独立宏过程(适合按钮触发或批量执行)
如果需要手动运行宏获取结果,可使用这个过程:
Sub FindMatchingResult() Dim targetKey1 As String, targetKey2 As String Dim dataRange As Range Dim i As Long ' 设置要匹配的两个词汇 targetKey1 = "词汇1" targetKey2 = "词汇2" ' 设置数据范围(假设数据从A2开始,表头在A1) Set dataRange = ThisWorkbook.Sheets("Sheet1").Range("A2:C" & Cells(Rows.Count, "A").End(xlUp).Row) ' 遍历每一行查找匹配 For i = 1 To dataRange.Rows.Count If InStr(1, dataRange.Cells(i, 1).Value, targetKey1, vbTextCompare) > 0 And _ InStr(1, dataRange.Cells(i, 2).Value, targetKey2, vbTextCompare) > 0 Then ' 弹出结果提示,也可写入指定单元格 MsgBox "匹配到的第三列值:" & dataRange.Cells(i, 3).Value ' 示例:将结果写入E1单元格 → Range("E1").Value = dataRange.Cells(i, 3).Value Exit Sub End If Next i MsgBox "未找到匹配项" End Sub
关键细节调整
- 若需要完全匹配(而非包含),把
InStr(...)>0替换为dataRange.Cells(i,1).Value = targetKey1即可 - 若要区分大小写,将
vbTextCompare改为vbBinaryCompare
内容的提问来源于stack exchange,提问作者flatbed67
相关产品推荐
相关产品推荐

