
Tengo una hoja de trabajo donde la columna A tiene varios nombres en diferentes formatos:
A1 John Smith
A2 Jones, Mary
A3 Sally Gomez
A4 La familia González
La columna B tiene datos similares:
B1 The Smith Family Trust
B2 Bob y Mary Jones
B3 Blackwell, John
B4 Luz González
Me gustaría identificar los casos en los que se encuentra el mismo apellido en la columna A y en la columna B. En los ejemplos anteriores, la fórmula, si se coloca en la columna C, daría como resultado
C1 VERDADERO (porque "Smith" se encuentra en ambas A1 y B1)
C2 VERDADERO (porque "Jones" se encuentra tanto en A2 como en B2)
C3 FALSO (porque no hay palabras comunes entre A3 y B3)
C4 VERDADERO (porque "González" se encuentra tanto en A4 como en B4)
¿Es esto incluso posible?
Respuesta1
Teniendo en cuenta sus comentarios y su pregunta, parece que desea devolver VERDADERO si alguna palabra en una frase coincide con una palabra en la frase adyacente. Una forma de hacerlo es con una función definida por el usuario (VBA). Lo siguiente excluye cualquier palabra que esté en arrExclude
, a la que puede agregar como mejor le parezca. También excluirá cualquier carácter que no sea letras, dígitos o espacios, y cualquier palabra que consista en un solo carácter.
Vea si esto funciona para usted.
Otra opción sería echar un vistazo al complemento gratuito de búsqueda difusa proporcionado por MS para las versiones de Excel 2007 y posteriores.
Para ingresar a esta función definida por el usuario (UDF), alt-F11
abre el Editor de Visual Basic. Asegúrese de que su proyecto esté resaltado en la ventana del Explorador de proyectos. Luego, desde el menú superior, seleccione Insert/Module
y pegue el código a continuación en la ventana que se abre.
Para utilizar esta función definida por el usuario (UDF), ingrese una fórmula como
=WordMatch(A1,B1)
en alguna celda.
EDITAR2: Find Matches
segmento cambiado para ver si funciona mejor en 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
EDITAR:Aquí hay una captura de pantalla de los resultados, utilizando tanto sus ejemplos originales como los ejemplos que proporcionó en un comentario a continuación donde indicó que estaba teniendo un problema.
Respuesta2
La parte más difícil de este ejercicio es determinar qué, en la columna A, constituye un apellido. En su ejemplo, es:
- La primera palabra, si hay una coma en el nombre completo.
- la segunda palabra
Si esa regla es cierta, entonces puedes hacer una fórmula como esta:
=NOT(ISERROR(FIND(last_name, B1:B4)))
La fórmula para determinar el apellido es un poco más compleja. Básicamente, tienes que averiguar en qué posiciones de los caracteres se encuentran los espacios y luego colocar las letras en el medio. Hay una buena explicación en este hilo:
Respuesta3
En la celda C1 usa esta fórmulaEnlace
=IF(VLOOKUP(B1:B4,A:A,1)=B1,"",B1)
Respuesta4
Resalte ambas columnas > formato condicional (pestaña de inicio) > resalte reglas de celda > valores duplicados. Esto resaltará todos los duplicados en ambas columnas.
Asegúrese de resaltar las columnas y no las celdas.