我有一张工作表,其中 A 列包含各种不同格式的名称:
A1 John Smith
A2 Jones, Mary
A3 Sally Gomez
A4 The Gonzalez family
B 列包含类似的数据:
B1 The Smith Family Trust
B2 Bob and Mary Jones
B3 Blackwell, John
B4 Luz Gonzalez
我想要找出在 A 列和 B 列中找到相同姓氏的情况。在上面的例子中,如果将公式放在 C 列中,则结果为
C1 TRUE(因为在 A1 和 B1 中都找到了“Smith”)
C2 TRUE(因为在 A2 和 B2 中都找到了“Jones”)
C3 FALSE(因为 A3 和 B3 之间没有共同的词)
C4 TRUE(因为在 A4 和 B4 中都找到了“Gonzalez”)
这可能吗?
答案1
考虑到您的评论和问题,您似乎希望如果一个短语中的任何单词与相邻短语中的一个单词匹配,则返回 TRUE。一种实现此目的的方法是使用用户定义函数 (VBA)。以下内容排除了 中的任何单词arrExclude
,您可以根据需要添加这些单词。它还将排除任何非字母、数字或空格的字符,以及任何仅由单个字符组成的单词。
看看这对你是否有用。
另一个选择是查看 MS 为 Excel 2007 及更高版本提供的免费模糊查找插件。
要输入此用户定义函数 (UDF),alt-F11
请打开 Visual Basic 编辑器。确保您的项目在 Project Explorer 窗口中突出显示。然后,从顶部菜单中,选择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
突出显示两列 > 条件格式(主页选项卡)> 突出显示单元格规则 > 重复值。这将突出显示两列中的所有重复项。
确保突出显示的是列而不是单元格。