Мне нужно сравнить следующее

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

Мне нужно идеальное совпадение для имени в любом порядке. Это код до сих пор:

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

1 ответ1

0

Прошло много времени с тех пор, как я сделал VBa, и я не могу это проверить, но это должно дать вам хороший старт, если он не скомпилируется или даже не будет работать точно так, как требуется.

' 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

У меня есть несколько опасений по поводу этого кода, например, что происходит, если дополнительный фрагмент пробела был в начале или в хвосте str1 или str2 ... Однако, это должно делать то, что задает ваш вопрос (опять же, не проверено)

Возможно, вам придется убедиться, что строка всегда обрезается и / или в нижнем регистре при выполнении сравнения и т.д., Не зная, как она работает в VBa.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .