none
Comparar Planilha e Inserir dados ao Final RRS feed

  • Pergunta

  • Bom dia!

    Preciso fazer o seguinte no Excel em VBA:

    Comparar os dados de uma Planilha ex: PlanA com os dados de uma PlanB

    Os dados que aparecerem na PlanB e não aparecerem na PlanA preciso que sejam inseridos ao Final da PlanA

    Alguém sabe de alguma programação que poderia fazer isso?

    Muito obrigado!

    segunda-feira, 9 de setembro de 2013 14:23

Respostas

  • Estou considerando que PlanA e PlanB estão na mesma pasta de trabalho. Utilize o código abaixo:

    Sub fncMain()
        Dim wksA As Worksheet
        Dim wksB As Worksheet
        Dim lngB As Long
        Dim lngA As Long
        
        With ThisWorkbook
            Set wksA = .Worksheets("PlanA")
            Set wksB = .Worksheets("PlanB")
        End With
        
        For lngB = 1 To fncLastRow(wksB.Columns("A"))
            If fncMatch(wksB.Cells(lngB, "A"), wksA.Columns("A")) = 0 Then
                wksA.Cells(fncLastRow(wksA.Columns("A")) + 1, "A") = wksB.Cells(lngB, "A")
            End If
        Next lngB
    End Sub
    
    Function fncMatch(ByVal varTermo As Variant, ByVal varVetor As Variant) As Long
        On Error Resume Next
        fncMatch = WorksheetFunction.Match(CStr(varTermo), varVetor, 0)
        If fncMatch = 0 Then fncMatch = WorksheetFunction.Match(varTermo + 0, varVetor, 0)
    End Function
    
    Function fncLastRow(rng As Range) As Long
        Dim Temp As Long
        
        With rng
            On Error Resume Next
            Temp = .Find(What:="*" _
            , After:=.Cells(1) _
            , SearchDirection:=xlPrevious _
            , SearchOrder:=xlByColumns _
            , LookIn:=xlFormulas).Row
            If Temp = 0 Then Temp = rng.Cells(1).Row
        End With
        
        fncLastRow = Temp
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Fábio Benetton terça-feira, 10 de setembro de 2013 18:43
    terça-feira, 10 de setembro de 2013 02:33
    Moderador

Todas as Respostas

  • Estou considerando que PlanA e PlanB estão na mesma pasta de trabalho. Utilize o código abaixo:

    Sub fncMain()
        Dim wksA As Worksheet
        Dim wksB As Worksheet
        Dim lngB As Long
        Dim lngA As Long
        
        With ThisWorkbook
            Set wksA = .Worksheets("PlanA")
            Set wksB = .Worksheets("PlanB")
        End With
        
        For lngB = 1 To fncLastRow(wksB.Columns("A"))
            If fncMatch(wksB.Cells(lngB, "A"), wksA.Columns("A")) = 0 Then
                wksA.Cells(fncLastRow(wksA.Columns("A")) + 1, "A") = wksB.Cells(lngB, "A")
            End If
        Next lngB
    End Sub
    
    Function fncMatch(ByVal varTermo As Variant, ByVal varVetor As Variant) As Long
        On Error Resume Next
        fncMatch = WorksheetFunction.Match(CStr(varTermo), varVetor, 0)
        If fncMatch = 0 Then fncMatch = WorksheetFunction.Match(varTermo + 0, varVetor, 0)
    End Function
    
    Function fncLastRow(rng As Range) As Long
        Dim Temp As Long
        
        With rng
            On Error Resume Next
            Temp = .Find(What:="*" _
            , After:=.Cells(1) _
            , SearchDirection:=xlPrevious _
            , SearchOrder:=xlByColumns _
            , LookIn:=xlFormulas).Row
            If Temp = 0 Then Temp = rng.Cells(1).Row
        End With
        
        fncLastRow = Temp
    End Function


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    • Marcado como Resposta Fábio Benetton terça-feira, 10 de setembro de 2013 18:43
    terça-feira, 10 de setembro de 2013 02:33
    Moderador
  • Muito obrigado!!!

    terça-feira, 10 de setembro de 2013 18:42