Excel - compara nomes em duas células em ordem diferente

0

Eu preciso comparar o seguinte

Cell 1         John Peter henderson                          
Cell 2         peter John Henderson                
Result         Match

Cell 1         Anne jolie beuhler             
Cell 2         Jolie Anne
Result         NO MATCH

Cell 1         Kate spade lee
Cell 2         susan kate spade
Result         NO MATCH

Preciso de uma correspondência perfeita para o nome em qualquer ordem. Este é o código até agora:

function allIn(str1, str2) 
' check whether all elements of str1 occur in str2 
' and vice versa 
Dim l1, l2, ii As Integer 
Dim isfound As Boolean 
isfound = True 
l1 = Len(str1) 
l2 = Len(str2) 

If l1 < l2 Then ' look for all the elements of str1 in str2 

For ii = 1 To l1 

If InStr(1, str2, Mid(str1, ii, 1), vbTextCompare) <= 0 Then 
    isfound = False 
Exit For 
End If 
Next ii 
Else ' look for all the elements of str2 in str1 

For ii = 1 To l2

If InStr(1, str1, Mid(str2, ii, 1), vbTextCompare) <= 0 Then 
isfound = False 
Exit For 
End If 
Next ii 
End If 
allIn = isfound 
End Function
    
por gwen 28.08.2013 / 12:26

1 resposta

0

Já faz muito tempo desde que eu fiz o VBa e não posso testar isso, mas isso deve dar um bom começo se ele não compilar ou mesmo funcionar exatamente como necessário.

' check whether all elements of str1 occur in str2
' and vice versa.
Function allIn(str1, str2) As Boolean

'first thing to check is if the 2 strings are the same length, if they're not then we know they are different
If Len(str1) <> Len(str2) Then
    allIn = False
End If

Dim isfound As Boolean
isfound = True

'Get the 1st string as array (split by white space)
Dim s1() As String
s1() = Split(str1)

'iterate through each array, word at a time
For Each element In s1

    If Not InStr(str2, element) Then
        isfound = False
    End If

'if it wasn't found, we can exit the loop immediately (no point finishing the test as it's already failed)
If (isfound = False) Then
    Exit For
End If

Next element

allIn = isfound
End Function

Eu tenho algumas preocupações sobre este código, como o que acontece se uma parte extra do espaço em branco estava no início ou na cauda do str1 ou str2 ... No entanto, isso deve fazer o que sua pergunta está perguntando (novamente , não testado)

Pode ser necessário garantir que a string esteja sempre aparada e, ou em minúsculas, ao fazer a comparação, etc., sem saber como ela funciona no VBa.

    
por 29.08.2013 / 09:34