Tentando destacar valores exclusivos em várias planilhas no Excel 2007

Tentando destacar valores exclusivos em várias planilhas no Excel 2007

Estou tentando comparar os valores da coluna A Sheet1(que renomeei como "AR") e da coluna A Sheet2(que renomeei como "Colar aqui") e destacar linhas contendo valores que não existem na outra planilha. (Ambas as colunas terminam com uma célula vazia.) Encontrei uma macro que achei que fazia algo semelhante ao que eu queria aqui emRemoção eficiente de registros duplicados em várias planilhas do Excel, e estou tentando modificá-lo para atender às minhas necessidades, mas não consigo fazê-lo funcionar. Atualmente, quando eu o executo, ele bloqueia o Excel e tenho que finalizar a tarefa no Excel.

Isto é o que tenho até agora:

Option Explicit

Sub Compare2()
    Application.ScreenUpdating = False

    Dim startRow As Integer
    startRow = 1

    Dim row As Integer
    row = startRow

    Dim bRow As Integer

    'sharks below, cap'ain
    ' This loop is looping on row.
    ' Scan down column AR!A (i.e., Sheet1!A) until we find an empty cell.
    Do While (Worksheets("AR").Range("A" & row).Value <> "")

        Dim aVal As String
        aVal = Worksheets("AR").Range("A" & row).Value
        bRow = startRow             'I see thy booty

        ' This loop is looping on bRow.  Scan down column 'Paste Here'!A
        ' (i.e., Sheet2!A) until we find an empty cell.
        Do While (Worksheets("Paste Here").Range("A" & bRow).Value <> "")

            Dim aVal2 As String
            aVal2 = Worksheets("Paste Here").Range("A" & bRow).Value

            If (aVal <> aVal2) Then
                Worksheets("AR").Rows(row).Interior.ColorIndex = 6
                                ' we found a traitor; feed 'em to the sharks
                row = row - row
                Exit Do
            End If

            If (aVal2 <> aVal) Then
                Worksheets("Paste Here").Rows(row).Interior.ColorIndex = 6
                row = row - row
                Exit Do
            End If

            bRow = bRow + 1
        Loop

        row = row + 1
    Loop

End Sub

Qualquer ajuda que você possa fornecer seria útil.

Responder1

É uma pena que você não tenha entendido melhor a sub-rotina que estava canibalizando antes de começar a modificá-la.

  • A sub-rotina “WalkThePlank” procurapartidas. Quando encontra uma linha in Sheet1que corresponde a uma linha in Sheet2, ele entra em ação. Você está procurando valores únicos; ou seja, as linhas Sheet1que não correspondem a nada Sheet2e vice-versa. Mas o que você éfazendoestá acionando pares de linhas que não correspondem; ou seja, se Sheet1!Row 1não corresponder Sheet2!Row 1, você age. Isto é prematuro; você precisa digitalizartodo o caminhopara Sheet2determinar se Sheet1!Row 1correspondequalquerlinha em Sheet2.
  • O autor da sub-rotina “WalkThePlank” fez algo que não faz muito sentido. Após excluir a linha indexada pela rowvariável, ele definiu a variável como 0. Isso foi um desperdício, pois fez com que a sub-rotina reexaminasse todas as Sheet1linhas que já havia examinado e determinado como únicas. Mas, como ele exclui a linha que não é única (ou seja, que corresponde à linha bRowon Sheet2), ele não analisaráquelinha novamente e não há um loop infinito. Para aumentar a curiosidade, ele poderia ter dito row = 0, mas, em vez disso, disse enigmaticamente row = row - row.

    Mas você precisa mudar isso. (Para ser mais preciso, acredito que você deveria apenas eliminar as row = …instruções dentro dos Do Whileloops; exceto no row = row + 1final.) Como você não está excluindo linhas, issofazfazer com que sua macro seja reexaminadaos mesmos dadosuma e outra vez; ou seja, é um loop infinito. Você precisa apenas continuar marchando para baixo Sheet1.

  • Você pode abortar um loop infinito do VBA sem matar o Excel e perder seus dados digitando Ctrl+ Break. Se o seu teclado não tiver uma Breaktecla, tente abrir o teclado na tela executando osk e clicando em Ctrle depois em Pause. Se isso não funcionar, tente Ctrle então ScrLk.

Superusuário não é um serviço de escrita de scripts. Acho que expliquei o que está errado o suficiente para que você consiga consertar agora. Se você ainda não conseguir fazer funcionar, volte e conte-nos onde você travou.

informação relacionada