Я разработал следующий код для сравнения двух ячеек (строк) в столбцах A и D и записи значения D-ячейки в соответствующей B-ячейке, если найдено парное совпадение.Сравнение элементов двух строк
Sub CompareAndGuess()
Dim strLen, aux As Integer
Dim max1, max2 As Long
Dim str As String
Range("A1").Select
Selection.End(xlDown).Select
max1 = ActiveCell.Row
Range("D1").Select
Selection.End(xlDown).Select
max2 = ActiveCell.Row
For a = 2 To max1
str = Cells(a, 1)
str = StrConv(str, vbUpperCase)
strLen = Len(str)
aux = strLen
For l = 3 To strLen
For d = 2 To max2
If Cells(d, 4) = Left(str, aux) Then
Cells(a, 2) = Cells(d, 4)
Exit For
ElseIf Cells(d, 4) = Right(str, aux) Then
Cells(a, 2) = Cells(d, 4)
Exit For
End If
Next d
aux = aux - 1
If Cells(a, 2) <> "" Then
Exit For
End If
Next l
Cells(a, 2).Select
Next a
End Sub
Может кто-нибудь помочь мне найти, где это проблема, потому что когда я его запускаю код только угадает правильный один ряд из 50, тогда как он должен соответствовать по крайней мере 40 или около того.
Пожалуйста, я действительно не могу найти ошибку. Не стесняйтесь предлагать другое решение моей проблемы, если хотите.
образец данных я анализирующая является: имен с опечатками: -
Jatiuca
Pajuara
Poco
Santa Luzia
Pajucara
Domingos Acacio
Jaragua
Stella Maris
P Verde
Tabuleiro dos Martin
Gruta Lourdes
Brasilia
Centro Historico
Monumento
Tabuleiro dos Martins
имен с опечатками для поиска по этому списку: -
JARAGUÁ
TABULEIRO DO MARTINS
CENTRO
BRASÍLIA
CACIMBAS
JATIÚCA
CAITITUS
PAJUÇARA
CANAÃ
PONTA VERDE
CANAFÍSTULA
POÇO
CAPIATÃ
CAVACO
SANTA LÚCIA
VB имеет 'функцию InStr', которая может представлять интерес здесь. .. –
Да, я тоже подумал об этом методе и благодарю вас за ремикс. Я дам ему попробовать, но все же я хотел бы знать, что не так в моем коде ... –
Как в стороне, не очень хорошая практика использовать 'l' таким образом. – pnuts