Notifications
Clear all

Macro que compare o texto de duas células

7 Posts
4 Usuários
0 Reactions
1,755 Visualizações
(@celo9716)
Posts: 0
New Member
Topic starter
 

Bom dia gente, preciso de uma macro que compare palavra por palavra entre duas células e mostre quais palavras tem em uma célula e não tem na outra. Até agora só consegui fazer uma macro que compara as células... não seu texto em si.

 
Postado : 29/08/2016 9:58 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Eu não entendi muito bem.
Mas...considerando que vc pretende comparar o texto de uma coluna com outra, terá um resultado em C [1 para verdadeiro e 0 para falso]

Sub AleVBA_21637()

    Dim rw As Range

    For Each rw In Range("A2:C10").Rows
        If rw.Cells(1) <> "" Then
            rw.Cells(3).Value = Levenshtein(rw.Cells(1), rw.Cells(2))
        End If
    Next rw

End Sub

Public Function Levenshtein(s1 As String, s2 As String)

Dim i As Integer
Dim j As Integer
Dim l1 As Integer
Dim l2 As Integer
Dim d() As Integer
Dim min1 As Integer
Dim min2 As Integer

l1 = Len(s1)
l2 = Len(s2)
ReDim d(l1, l2)
For i = 0 To l1
    d(i, 0) = i
Next
For j = 0 To l2
    d(0, j) = j
Next
For i = 1 To l1
    For j = 1 To l2
        If Mid(s1, i, 1) = Mid(s2, j, 1) Then
            d(i, j) = d(i - 1, j - 1)
        Else
            min1 = d(i - 1, j) + 1
            min2 = d(i, j - 1) + 1
            If min2 < min1 Then
                min1 = min2
            End If
            min2 = d(i - 1, j - 1) + 1
            If min2 < min1 Then
                min1 = min2
            End If
            d(i, j) = min1
        End If
    Next
Next
Levenshtein = d(l1, l2)
End Function

Att

 
Postado : 29/08/2016 10:17 am
(@celo9716)
Posts: 0
New Member
Topic starter
 

Então Alexandre, eu tenho 2 células, em cada uma delas tem um texto, eu preciso comparar esse texto que tem nelas, pra saber quais palavras tem em ambas células e quais não tem.

Boa tarde!!

Eu não entendi muito bem.
Mas...considerando que vc pretende comparar o texto de uma coluna com outra, terá um resultado em C [1 para verdadeiro e 0 para falso]

Sub AleVBA_21637()

    Dim rw As Range

    For Each rw In Range("A2:C10").Rows
        If rw.Cells(1) <> "" Then
            rw.Cells(3).Value = Levenshtein(rw.Cells(1), rw.Cells(2))
        End If
    Next rw

End Sub

Public Function Levenshtein(s1 As String, s2 As String)

Dim i As Integer
Dim j As Integer
Dim l1 As Integer
Dim l2 As Integer
Dim d() As Integer
Dim min1 As Integer
Dim min2 As Integer

l1 = Len(s1)
l2 = Len(s2)
ReDim d(l1, l2)
For i = 0 To l1
    d(i, 0) = i
Next
For j = 0 To l2
    d(0, j) = j
Next
For i = 1 To l1
    For j = 1 To l2
        If Mid(s1, i, 1) = Mid(s2, j, 1) Then
            d(i, j) = d(i - 1, j - 1)
        Else
            min1 = d(i - 1, j) + 1
            min2 = d(i, j - 1) + 1
            If min2 < min1 Then
                min1 = min2
            End If
            min2 = d(i - 1, j - 1) + 1
            If min2 < min1 Then
                min1 = min2
            End If
            d(i, j) = min1
        End If
    Next
Next
Levenshtein = d(l1, l2)
End Function

Att

 
Postado : 29/08/2016 10:33 am
(@edcronos2)
Posts: 0
New Member
 

vc não deu exemplos do conteudo que deve ser comparado

mas adnato que tem que ter um separador em comum tipo um espaço entre as palavras
usando o split se separa o conteudo de cada celula em uma matriz
então em loop compara cada palavra com as da outra celula e guarda as que não tiver na outra em um array para ser registrado no planilha

 
Postado : 29/08/2016 10:54 am
(@celo9716)
Posts: 0
New Member
Topic starter
 

Exemplo:

https://drive.google.com/open?id=0B2ZOpfz6NmU6cDJnZUgzNS1IVUE

No caso da imagem acima, a uma palavra a mais na célula D4 do que na célula A4, desta forma gostaria de pinta-la de alguma cor.

 
Postado : 29/08/2016 11:02 am
(@edcronos2)
Posts: 0
New Member
 

vamos dizer assim,
estou por fora de processos lexicográficos

mas por alto seria oq eu falei
com ressalva que seria palavra por palavra até achar inconsistência
achando texto diferente vai salvando até achar novamente parte iguais

devo devo dizer que é no minimo um processo complexo que vai ter que ter um pré tratamento de texto , pré contagem de palavras para definir o texto primário , além de busca segundaria para achar trechos iguais em posições diferentes

confesso que não teria animo de fazer isso

 
Postado : 29/08/2016 11:21 am
(@brunoxro)
Posts: 0
New Member
 

Boa tarde celo9716,

Adaptei uma macro que tenho, a macro em anexo vai fazer uma comparação entre as duas células A1 e D1, e trazer uma lista de palavras que forem iguais.

Fiz uma parte por comando de macro, por isso pode levar um tempo para executar todo o processo. Se eu fosse usar as funções do VBA, eu levaria muito tempo para a montagem.

Teste e veja se a Macro lhe atende.

att,

 
Postado : 29/08/2016 3:22 pm