none
comparar tabelas segundo o criterio de uma coluna RRS feed

  • Discussão Geral

  • oi boa noite. o meu problema é o seguinte. tenho duas tabelas as duas possuem a mesma estrutura. so que uma mostra as entradas de itens enquanto a outra mostra a saida. preciso de uma macro que compara uma coluna de uma tabela com a coluna da outra. os itens da primeira coluna que nao se repete na segunda coluna devem ser copiados junto com sua respectiva linha para outra planilha em outra aba. nos prints abaixo segue como eu fiz manualmente. porem eu gostaria de automatizar o processo. se alguem puder me ajudar desde ja eu agradeço, de coraçao. 

    quinta-feira, 3 de maio de 2018 02:32

Todas as Respostas

  • lindao da mamãe,

       Seria algo assim?

    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

    ==========================================

    Excel - Comparar dados de duas tabelas e achar dados iguais. <Resolvido>

    https://www.hardware.com.br/comunidade/dados-tabelas/1251480/

    ==========================================

    []'s,
    Fabio I.
    domingo, 6 de maio de 2018 01:36
  • Ola Fabio boa noite na minha planilha eu uso os dois casos quando os criterios se repetem nas duas planilha e quando nao se repetem. para quando os dados se repetem eu ja tinha resolvido porem como eu achei o seu codigo mais facil que o meu vou dar uma testada nele pra ver se posso aproveita-lo. porem como eu disse no primeiro texto eu preciso de uma soluçao pra quando os dados nao se repetirem. eu ja montei um porem achei meu codigo meio frankesntein vou te mostrar ele pra ver se voce ou alguem pode me ajudar a simplificar ele.

    Sub copia_C_V_para_carteira()
    '
    
        Sheets("C_V").Select
        Range("Tabela11[#All]").Select
        Selection.Copy
        Sheets("carteira").Select
        Range("A1").Select
        ActiveSheet.Paste
        Call filtra_carteira
        
    End Sub
    
    Sub filtra_carteira()
    
    'Eu prefiro nomear o intervalo na planilha, mas opcionalmente vc pode nomear aqui, como está feito, ou não nomear se preferir, escrevendo os intervalos diretamente no 'AdvancedFilter' (não recomendo)
    Planilha6.Range("N1:N6").Name = "Criterios"
    Planilha7.Range("A1:H1000").Name = "DadosTabela"
    Planilha7.Range("A1:H1000").Name = "LocalSaida"  'É preciso que os TÍTULOS EXISTAM previamente nas células "A7:M7" da Planilha de saída.
    
    Dados = "DadosTabela"
    CriteriosMacro = "Criterios"    'Você pode usar um intervalo na planilha para inserir mais critérios (1ª linha os títulos e as demais os critérios desejados)
    Resultado = "LocalSaida" 'Obs.: É opcional nomear o intervalo, mas eu sugiro que você o faça
    
    Range(Dados).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _
                Range(CriteriosMacro), Unique:=True
                   
        Range("A2:H160").Select
        Selection.SpecialCells(xlCellTypeVisible).Select
        Selection.ClearContents
       ActiveSheet.ShowAllData
          Call Ordem
     End Sub
    Sub Ordem()
    ActiveWorkbook.Worksheets("carteira").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("carteira").Sort.SortFields.Add Key:=Range("B2"), _
      SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
      xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("carteira").Sort
      .SetRange Range("A1:H20000")
      .Header = xlYes
      .MatchCase = False
      .Orientation = xlTopToBottom
      .SortMethod = xlPinYin
      .Apply
    End With
     Range("A2").Select
    End Sub
    
    
    
    

    se puderem me agradecer eu agradeço de coraçao.

    desde ja agradeço...

    um abraçao a todos

    segunda-feira, 7 de maio de 2018 00:22
  • lindao da mamãe,

       Eu montei um código que funcionou, mas você vai precisar adequá-lo ao sua planilha.

       Antes vou explicar onde está o "DILEMA" da comparação das colunas diferentes, pois as iguais o código também contempla.

       Imagine duas colunas :

       A primeira tem 6 números numerados de 1 ate 6;
       A segunda tem 7 números: 1, de 7 a 11 e o 6;

       1   -   1
       2   -   7
       3   -   8
       4   -   9
       5   -   10
       6   -   11
       NT  -  6

       Passos:

       1 - Pego a primeira tabela, o primeiro número "1" e comparo com a segunda tabela, o primeiro número, são iguais! Então sem problemas (blnVerifica = TRUE), jogo na lista dos iguais e mando ignorar o resto... ("Exit For" - saia fora do "For"  interno). Passo para a primeira tabela, o segundo número...

       2 - Pego a primeira tabela, o segundo número "2" e comparo com a segunda tabela, não achei! Então eu tenho certeza que esse número (o número "2") não tem correspondência na segunda tabela! Posso guardar esse número... mas e os números da segunda tabela?
            DILEMA: E NÃO tenho certeza sobre os números da segunda tabela! Então preciso varrer tudo de novo, mas desta vez da segunda tabela para a primeira tabela!

       O exemplo claro acima é o número "6", só vou ter certeza sobre ele na última passagem.

       Bom, usei mas 3 planilhas a saber:

       - Planilha 5 - Guarda as igualdades;
       - Planilha 8 - Guardo os número da planilha 6 que NÃO tem na planilha 7;
       - Planilha 9 - Guardo os número da planilha 7 que NÃO tem na planilha 6;

       Segue o código do "Compara2":


    Sub Compara2() Dim blnVerifica As Boolean Dim X1 As String Dim Y1 As String blnVerifica = False X1 = "" Y1 = "" Planilha5.Range("A1:A20").Name = "SaidaExiste" Planilha6.Range("N1:N6").Name = "Criterios" Planilha7.Range("A1:D2").Name = "DadosTabela" Saida = "SaidaExiste" CriteriosMacro = "Criterios" Dados = "DadosTabela" Set Saida1 = Planilha5.Range(Saida) Set CriteriosMacro1 = Planilha6.Range(CriteriosMacro) Set DadosTabela1 = Planilha7.Range(Dados) 'Posiciona o cursor no começo de cada planilha Worksheets("Planilha5").Activate Planilha5.Range("A1").Activate Worksheets("Planilha8").Activate Planilha8.Range("A1").Activate Worksheets("Planilha9").Activate Planilha9.Range("A1").Activate '----------------------------------- Primeira rodada For Each Y In DadosTabela1 For Each X In CriteriosMacro1 If X = Y Then Sheets("Planilha5").Select 'posiciona o cursor na planilha cadastro ActiveCell.Offset(1, 0).Range("a1").Select ActiveCell.Value = X blnVerifica = True Y1 = "" Exit For Else If blnVerifica = False Then If Not (Y = "" Or Y1 = Y) Then Y1 = Y End If End If Next X If blnVerifica = False Then Sheets("Planilha9").Select ActiveCell.Offset(1, 0).Range("a1").Select ActiveCell.Value = Y1 Else blnVerifica = False End If Next Y '----------------------------------- Segunda rodada For Each X In CriteriosMacro1 For Each Y In DadosTabela1 If X = Y Then 'JÁ FOI FEITO, NÃO PRECISA FAZER DE NOVO... '... PORÉM PRECISO SABER QUEM É. 'Sheets("Planilha5").Select 'posiciona o cursor na planilha cadastro 'ActiveCell.Offset(1, 0).Range("a1").Select 'ActiveCell.Value = X 'ABAIXO ME DIZ PARA NÃO USAR ESSE VALOR (blnVerifica = True). blnVerifica = True X1 = "" Exit For Else If blnVerifica = False Then If Not (X = "" Or X1 = X) Then X1 = X

    End If End If Next Y If blnVerifica = False Then Sheets("Planilha8").Select ActiveCell.Offset(1, 0).Range("a1").Select ActiveCell.Value = X1 Else blnVerifica = False End If Next X End Sub

    []'s,
    Fabio I.


    • Editado Fabio I segunda-feira, 7 de maio de 2018 15:57
    segunda-feira, 7 de maio de 2018 15:56
  • Fabio I.

    Boa noite.

    olha meu amigo eu usei seu codigo e adaptei a minha planilha porem ele colocou os dados encontrados em uma unica coluna, eu precisava que os dados resultantes apresentassem o mesmo formato da tabela original. tipo assim ao inves de colocar os dados linha a linha em todas as colunas ele transpos tudo na coluna a com cada novo dado na linha subsequente.

    quinta-feira, 17 de maio de 2018 23:11