我有一个类似于下面的大文件。我希望能够将 A 列中的一组单词与 B 列中的一组单词进行比较,并在 C 列中得到“不匹配”、“完全匹配”或“部分匹配”。我是公式的初级用户,可以使用 VBA 保存和运行宏。
小提示,这些列确实有重复项,并且只需要逐个单元格进行比较(例如 A1 与 B1)。即使是更简单的形式也会有所帮助。谢谢。
A - 国际足联级别、皇家巴萨经典赛、阿拉伯键盘、克莱蒙费朗
B - 绿草足球、欧洲酒店、阿拉伯键盘、费朗
C - 不匹配、不匹配、完全匹配、部分匹配
- 我尝试过 VLOOKUP 和 SEARCH 的变体,但没有结果。
- 我已尝试将文本分列,然后使用 VLOOKUP 对两组文本进行操作,但它仍然会显示我无法使用的部分数据。
- 我能得到的最接近的答案是如何比较 Excel 中的两列以突出显示不匹配的单词? 但当我对所有列运行宏时,它会忽略重复项并且不会比较 A1 与 B1,它似乎会检查 A:A 与 B:B,我仍然需要手动检查无匹配、完全匹配和部分匹配,这非常耗时。
当搜索部分匹配时,我想将整个单词与部分单词进行匹配 -
Cup vs Cupboard = Partial
Cupcake vx Cupboard = No Match
答案1
尝试一下这个小UDF():
Public Function comparee(s1 As String, s2 As String) As String
comparee = "No Match"
If s1 = s2 Then
comparee = "Exact match"
Exit Function
End If
arr1 = Split(s1, ", ")
arr2 = Split(s2, ", ")
For Each a1 In arr1
For Each a2 In arr2
If a1 = a2 Then
comparee = "Partial"
Exit Function
End If
Next a2
Next a1
End Function
答案2
这是我在另一个论坛上找到的解决方案:
Function GetMatches(s1 As String, s2 As String)
Dim spl1 As Variant, spl2 As Variant, i As Long
If s1 = s2 Then GetMatches = "Exact Match": Exit Function
spl1 = Split(Application.Trim(s1))
spl2 = Split(Application.Trim(s2))
For i = 0 To UBound(spl1)
If Not IsError(Application.Match(spl1(i), spl2, 0)) Then GetMatches = GetMatches & " " & spl1(i)
Next i
If Len(GetMatches) = 0 Then
GetMatches = "No Match"
Else
GetMatches = Application.Trim(GetMatches)
End If
End Function