
我有一個工作表,其中 A 列具有不同格式的各種名稱:
A1 John Smith
A2 Jones、Mary
A3 Sally Gomez
A4 The Gonzalez family
B 列具有類似數據:
B1 The Smith Family Trust
B2 Bob 和 Mary Jones
B3 Blackwell、 John
B4 Luz Gonzalez
我想識別在 A 列和 B 列中找到相同姓氏的實例
。了「Smith」) A1 和 B1)
C2 TRUE(因為「Jones」在 A2 和 B2 中都出現)
C3 FALSE(因為 A3 和 B3 之間沒有共同詞)
C4 TRUE(因為「Gonzalez」在A4 和B4 中均出現
)甚至可能嗎?
答案1
鑑於您的評論和問題,如果一個短語中的任何單字與相鄰短語中的單字匹配,您似乎希望返回 TRUE。實現此目的的一種方法是使用使用者定義函數 (VBA)。以下內容排除了 中的任何單字arrExclude
,您可以根據需要添加這些單字。它還會排除任何非字母、數字或空格的字符,以及僅由單個字符組成的任何單字。
看看這是否適合你。
另一個選擇是查看 MS 為 2007 及更高版本的 excel 版本提供的免費模糊查找插件。
若要輸入此使用者定義函數 (UDF),alt-F11
請開啟 Visual Basic 編輯器。確保您的專案在「專案資源管理器」視窗中突出顯示。然後,從頂部選單中選擇Insert/Module
下面的程式碼並將其貼到打開的視窗中。
若要使用此使用者定義函數 (UDF),請輸入下列公式
=WordMatch(A1,B1)
在某個單元格中。
編輯2: Find Matches
更改了部分,看看它在 Mac 上是否運行得更好
Option Explicit
Option Base 0
Option Compare Text
Function WordMatch(S1 As String, S2 As String) As Boolean
Dim arrExclude() As Variant
Dim V1 As Variant, V2 As Variant
Dim I As Long, J As Long, S As String
Dim RE As Object
Dim sF As String, sS As String
'Will also exclude single letter words
arrExclude = Array("The", "And", "Trust", "Family", "II", "III", "Jr", "Sr", "Mr", "Mrs", "Ms")
'Remove all except letters, digits, and spaces
'remove extra spaces
'Consider whether to retain hyphens
Set RE = CreateObject("vbscript.regexp")
With RE
.Pattern = "[^A-Z0-9 ]+|\b\S\b|\b(?:" & Join(arrExclude, "|") & ")\b"
.Global = True
.ignorecase = True
End With
With WorksheetFunction
V1 = Split(.Trim(RE.Replace(S1, "")))
V2 = Split(.Trim(RE.Replace(S2, "")))
End With
'Find Matches
If UBound(V1) <= UBound(V2) Then
sS = " " & Join(V2) & " "
For I = 0 To UBound(V1)
sF = " " & V1(I) & " "
If InStr(sS, sF) > 0 Then
WordMatch = True
Exit Function
End If
Next I
Else
sS = " " & Join(V1) & " "
For I = 0 To UBound(V2)
sF = " " & V2(I) & " "
If InStr(sS, sF) > 0 Then
WordMatch = True
Exit Function
End If
Next I
End If
WordMatch = False
End Function
編輯:這是結果的螢幕截圖,使用了您的原始範例以及您在下面的評論中給出的範例,其中您指出您遇到了問題。
答案2
本練習最困難的部分是確定 A 列中姓氏的組成。在您的示例中,它是:
- 第一個單詞,如果全名中有逗號
- 第二個字
如果該規則成立,那麼您可以執行以下公式:
=NOT(ISERROR(FIND(last_name, B1:B4)))
實際確定姓氏的公式稍微複雜一些。您本質上必須弄清楚空格所在的字元位置,然後將字母拉到中間。這個線程有一個很好的解釋:
答案3
在儲存格 C1 中使用此公式關聯
=IF(VLOOKUP(B1:B4,A:A,1)=B1,"",B1)
答案4
反白顯示兩列 > 條件格式(主頁標籤)> 反白顯示儲存格規則 > 重複值。這將突出顯示兩列中的所有重複項。
確保突出顯示列而不是單元格。