Intentar resaltar valores únicos en varias hojas en Excel 2007

Intentar resaltar valores únicos en varias hojas en Excel 2007

Estoy tratando de comparar los valores de la columna A Sheet1(a la que le cambié el nombre "AR") y la columna A Sheet2(a la que le cambié el nombre "Pegar aquí") y resaltar las filas que contienen valores que no existen en la otra hoja. (Ambas columnas terminan con una celda vacía). Encontré una macro que pensé que hacía algo similar a lo que quería aquí enEliminación eficiente de registros duplicados en varias hojas de Excel, y estoy intentando modificarlo para satisfacer mis necesidades, pero no puedo hacerlo funcionar. Actualmente, cuando lo ejecuto, bloquea Excel y tengo que finalizar la tarea en Excel.

Esto es lo que tengo hasta ahora:

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

Cualquier ayuda que pueda brindarnos sería útil.

Respuesta1

Es una lástima que no entendiste mejor la subrutina que estabas canibalizando antes de comenzar a modificarla.

  • La subrutina “WalkThePlank” está buscandopartidos. Cuando encuentra una fila Sheet1que coincide con una fila en Sheet2, toma medidas. Buscas valores únicos; es decir, filas Sheet1que no coinciden con nada Sheet2y viceversa. Pero lo que ereshaciendoestá desencadenando pares de filas que no coinciden; es decir, si Sheet1!Row 1no coincide Sheet2!Row 1, toma medidas. Esto es prematuro; necesitas escaneartodo el caminopara Sheet2determinar si Sheet1!Row 1coincidecualquierfila en Sheet2.
  • El autor de la subrutina “WalkThePlank” hizo algo que no tiene mucho sentido. Después de eliminar la fila indexada por la rowvariable, estableció la variable en 0. Esto fue un desperdicio, ya que provocó que la subrutina volviera a examinar todas las Sheet1filas que ya había examinado y determinado como únicas. Pero, dado que elimina la fila que no es única (es decir, que coincide con la fila bRowenSheet2 ), no veráesofila de nuevo, y no hay un bucle infinito. Para aumentar la curiosidad, podría haber dicho row = 0, pero, en cambio, dijo crípticamente row = row - row.

    Pero necesitas cambiar eso. (Para ser más preciso, creo que deberías eliminar las row = …declaraciones dentro de los Do Whilebucles; excepto las row = row + 1del final). Como no estás eliminando filas, estohacehacer que su macro se vuelva a examinarlos mismos datosuna y otra vez; es decir, es un bucle infinito. Necesitas seguir marchando hacia abajo Sheet1.

  • Es posible que pueda cancelar un bucle infinito de VBA sin matar Excel y perder sus datos escribiendo Ctrl+ Break. Si su teclado no tiene una Breaktecla, intente abrir el teclado en pantalla ejecutando osk y haciendo clic en Ctrly luego Pause. Si eso no funciona, inténtalo Ctrly luego ScrLk.

Superusuario no es un servicio de redacción de guiones. Creo que he explicado lo que está mal lo suficientemente bien como para que puedas solucionarlo ahora. Si aún no logras que funcione, regresa y cuéntanos dónde te quedaste atascado.

información relacionada