Notifications
Clear all

Como comparar dados entre duas tabelas e sinalizar...

10 Posts
2 Usuários
0 Reactions
2,496 Visualizações
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Boa tarde,

Como já disse no tópico de apresentação, ainda estou aprendendo a usar macros e VBA, então meu conhecimento é bastante vago em relação aos mesmos.

Gostaria de saber como comparar dados existentes em duas tabelas e sinalizar (grifar, mudar cor da fonte para vermelho, por ícones ou afins) os dados existentes em ambas tabelas?

Tentei usar a formatação condicional para realçar células mas não aceita várias matrizes...

Se houver uma maneira que não seja via VBA também serve. Eu só quero que estja funcional (e, se possível, visualmente agradável)

Agradeço a atenção de todos antecipadamente.

 
Postado : 27/08/2012 12:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite!!

Seria interessante postar seu arquivo modelo COMPACTADO!!

Att

 
Postado : 27/08/2012 5:30 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja tb no seguinte tópico http://www.planilhando.com.br/forum/viewtopic.php?f=20&t=5388

 
Postado : 27/08/2012 5:52 pm
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Não. Este tutorial eu já havia visto. Ele compara 1 item com outra coluna, tabela inteira. No meu caso, eu gostaria que comparasse vários itens de uma tabela com outros de outra tabela.

Por exemplo, de A1:F25 com A28:F52. Se neste período houver repetição que frizasse, ficasse de outra cor, qualquer coisa para sinalizar dados coincidentes.
De preferência que não tivesse que criar outra tabela para itens coincidentes. Porque neste caso, eu teria que formatar tudo.

 
Postado : 28/08/2012 6:07 am
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Não me deixa editar a mensagem postada...

Desculpe minha ignorância, vou tentar editar o macro que você indicou e ver se tem como adaptar aqui depois volto com um parecer hehe

Olhei melhor lá e acho que talvez dê para adaptar para o que quero fazer.

Obrigada.

 
Postado : 28/08/2012 6:15 am
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Aonde no script está especificando aonde colocar os resultados repetidos (coincidentes), por favor?

Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant
    ' Set CompareRange equal to the range to which you will
    ' compare the selection.
    Set CompareRange = Range("C1:C5")
    ' NOTE: If the compare range is located on another workbook
    ' or worksheet, use the following syntax.
    ' Set CompareRange = Workbooks("Book2"). _
    '   Worksheets("Sheet2").Range("C1:C5")
    '
    ' Loop through each cell in the selection and compare it to
    ' each cell in CompareRange.
    For Each x In Selection
        For Each y In CompareRange
            If x = y Then x.Offset(0, 1) = x
        Next y
    Next x
End Sub
 
Postado : 28/08/2012 6:23 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

A rotina faz =/- o seguinte:
em Set CompareRange (Set CompareRange = Range("C1:C5")
, vc determina qual o local em que os dados a serem comparado estão.
Depois vc seleciona todos os dados que servirão de base para comparação, para cd vlr repetido
e "gravado" na celula correspondente mas na coluna ao lado (por isso não deve ter dados na coluna ao lado) o vlr em duplicata (If x = y Then x.Offset(0, 1) = x)
Se puder disponha um exemplo de sua(s) planilha(s) indicando manualmente como está e o que espera de resposta, ficará mais simples obter uma resposta

 
Postado : 28/08/2012 6:34 am
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Boa tarde, obrigada pela resposta e atenção.

Veja, minha macro está assim agora:

Sub Find_Matches()

    Dim CompareRange As Variant, x As Variant, y As Variant

    Dim k, j As Integer

    k = 3

    j = 4

    'j = row number

    'k = column number

    Range("N9:R13").ClearContents

    ' Set CompareRange equal to the range to which you will

    ' compare the selection.

    Set CompareRange = Range("J6:X7")

    For Each x In Range("J24:S28")

    For Each y In CompareRange

            If x = y Then y.Offset(k, j) = x

        Next y

        j = j + 1

        If j = 8 Then

        j = 4

        k = k + 1

        End If

    Next x

MsgBox "Tudo Verificado!"

End Sub

Ele está checando tudo certo nos ranges que especifiquei, porém está colocando o resultado da verificação no range errado. (coloca em qualquer canto da planilha)

Gostaria que ela colocasse o resultado no range do intervalo de N9:R13.

Alguma sugestão?

Muchas gracias!

 
Postado : 28/08/2012 12:20 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Não sei se entendi direito, mas experimente:

Sub Find_Matches()
Dim CompareRange As Variant, x As Variant, y As Variant
Dim k As Integer, j As Integer

k = 9 'Linha Inicial
j = 14 'coluna inicial

Range("N9:R13").ClearContents
Set CompareRange = Range("J6:X7")
    For Each x In Range("J24:S28")
        For Each y In CompareRange
            If x = y Then Cells(k, j) = x
        Next y
    j = j + 1
        If j = 19 Then
            j = 14
            k = k + 1
        End If
    Next x
MsgBox "Tudo Verificado!"
End Sub
 
Postado : 28/08/2012 12:51 pm
(@cristy0505)
Posts: 28
Eminent Member
Topic starter
 

Oi Reinaldo, mais uma vez obrigada pela atenção.

Então, com esse que você postou ele estava colocando os resultados no range de N9 até R18...

Aqui deu certo assim:

Sub Find_Matches()
    Dim CompareRange As Variant, x As Variant, y As Variant
    Dim k, j As Integer
    c = 4
    r = 3
    'c = row number
    'r = column number
    Range("N9:R13").ClearContents
    ' Set CompareRange equal to the range to which you will
    ' compare the selection.
    Set CompareRange = Range("J6:X7")
    For Each x In Range("J24:S28")
    For Each y In CompareRange
    
     
            If y = x Then Range("J6").Offset(r, c) = y
        Next y
        If ActiveSheet.Range("J6").Offset(r, c).Value = "" Then c = c Else: c = c + 1
        If c = 9 Then
        c = 4
        r = r + 1
        End If
    Next x

MsgBox "Resultados checados!"

End Sub

Grata!

 
Postado : 28/08/2012 1:52 pm