Remoção eficiente de registros duplicados em várias planilhas do Excel

1

Eu tenho uma pasta de trabalho com 2 folhas. A folha 1 tem 3 colunas (1A, 1B e 1C) e a folha 2 tem 2 colunas (2A e 2B). Agora preciso excluir linhas da planilha 1 se 1A e 1B corresponderem a qualquer linha na planilha 2 (ou seja, 1A = 2A e 1B = 2B). Então, basicamente, esqueça 1C por enquanto e exclua todas as linhas da folha 1 que correspondem às linhas na planilha 2.

Uma maneira seria escrever uma macro que pega cada linha da folha 1 e compara 1A com todos os valores 2A. Se for encontrada uma correspondência, compare os correspondentes 1B com 2B e, se forem iguais, exclua a linha da folha 1. Como as folhas têm mais de 100.000 linhas, acho que isso tornará o número de comparações muito grande e demorar muito tempo.

Existe uma maneira mais eficiente de fazer isso?

    
por Jason 03.12.2014 / 13:49

1 resposta

1

Isto é VBa, não há desfazer, então antes de fazer isso, faça um backup do seu arquivo primeiro!

Option Explicit

Sub WalkThePlank()
Application.ScreenUpdating = False

Dim startRow As Integer
startRow = 1

Dim row As Integer
row = startRow

Dim bRow As Integer

'sharks below cap'ain
Do While (Worksheets("Sheet1").Range("A" & row).Value <> "")

    Dim aVal As String
    Dim bVal As String

    aVal = Worksheets("Sheet1").Range("A" & row).Value
    bVal = Worksheets("Sheet1").Range("B" & row).Value


    'I see thy booty
    bRow = startRow

    Do While (Worksheets("Sheet2").Range("A" & bRow).Value <> "")

    Dim aVal2 As String
    Dim bVal2 As String

    aVal2 = Worksheets("Sheet2").Range("A" & bRow).Value
    bVal2 = Worksheets("Sheet2").Range("B" & bRow).Value

    If (aVal = aVal2 And bVal = bVal2) Then

        Worksheets("Sheet1").Rows(row).Delete ' we found a traitor, feed em to the sharks
        row = row - row
        Exit Do

    End If

    bRow = bRow + 1

    Loop

row = row + 1
Loop

End Sub

Screenshots:

Folha1

Folha2

E depois que eu corro, a macro Sheet1 se parece com (a Sheet2 permanece inalterada)

Como eu adiciono o VBA no MS Office?

    
por 06.01.2015 / 11:45