Versuch, eindeutige Werte über mehrere Blätter in Excel 2007 hinweg hervorzuheben

Versuch, eindeutige Werte über mehrere Blätter in Excel 2007 hinweg hervorzuheben

Ich versuche, die Werte aus Spalte A Sheet1(die ich in "AR" umbenannt habe) und Spalte A Sheet2(die ich in "Hier einfügen" umbenannt habe) zu vergleichen und Zeilen mit Werten hervorzuheben, die auf dem anderen Blatt nicht vorhanden sind. (Beide Spalten enden mit einer leeren Zelle.) Ich habe ein Makro gefunden, von dem ich dachte, dass es etwas Ähnliches tut wie das, was ich hier wollte.Effizientes Entfernen doppelter Datensätze aus mehreren Excel-Tabellen, und ich versuche, es meinen Bedürfnissen entsprechend zu ändern, aber ich bekomme es nicht zum Laufen. Wenn ich es derzeit ausführe, stürzt Excel ab und ich muss die Aufgabe in Excel beenden.

Das habe ich bisher:

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

Jede Hilfe, die Sie leisten können, wäre hilfreich.

Antwort1

Es ist schade, dass Sie die Subroutine, die Sie kannibalisierten, nicht besser verstanden haben, bevor Sie mit der Änderung begannen.

  • Die Subroutine „WalkThePlank“ sucht nachStreichhölzer. Wenn es eine Zeile in findet, Sheet1die mit einer Zeile in übereinstimmt Sheet2, wird es aktiv. Sie suchen nach eindeutigen Werten, d. h. nach Zeilen in , Sheet1die mit nichts in übereinstimmen Sheet2, und umgekehrt. Aber was Sietunlöst Zeilenpaare aus, die nicht übereinstimmen; d. h., wenn Sheet1!Row 1nicht übereinstimmt Sheet2!Row 1, ergreifen Sie Maßnahmen. Das ist verfrüht; Sie müssen scannenden ganzen Wegdurch, um Sheet2festzustellen, ob Sheet1!Row 1ÜbereinstimmungenbeliebigZeile in Sheet2.
  • Der Autor der Subroutine „WalkThePlank“ hat etwas getan, das nicht viel Sinn ergibt. Nachdem er die durch die rowVariable indizierte Zeile gelöscht hatte, setzte er die Variable auf 0. Das war Verschwendung, da die Subroutine dadurch alle Zeilen erneut untersuchte, Sheet1die sie bereits untersucht und als eindeutig bestimmt hatte. Da sie aber die Zeile löscht, die nicht eindeutig ist (d. h. die mit der Zeile bRowin übereinstimmt Sheet2), wird sie nicht nachDasZeile erneut, und es gibt keine Endlosschleife. Um die Neugier zu steigern, hätte er sagen können row = 0, aber stattdessen sagte er kryptisch row = row - row.

    Aber das müssen Sie ändern. (Genauer gesagt glaube ich, dass Sie einfach die row = …Anweisungen innerhalb der Do WhileSchleifen eliminieren sollten, mit Ausnahme der row = row + 1am Ende.) Da Sie keine Zeilen löschen,tutveranlassen Sie Ihr Makro zur erneuten Prüfungdie gleichen Datenimmer und immer wieder; das heißt, es ist eine Endlosschleife. Sie müssen einfach weiter nach unten marschieren Sheet1.

  • Sie können eine VBA-Endlosschleife möglicherweise abbrechen, ohne Excel zu beenden und Ihre Daten zu verlieren, indem Sie Ctrl+ eingeben Break. Wenn Ihre Tastatur keine Taste hat Break, versuchen Sie, die Bildschirmtastatur aufzurufen, indem Sie ausführen osk und auf Ctrlund dann klicken Pause. Wenn das nicht funktioniert, versuchen Sie es mit Ctrlund dann ScrLk.

Super User ist kein Skript-Schreibdienst. Ich denke, ich habe den Fehler ausreichend erklärt, sodass Sie ihn jetzt beheben können. Wenn Sie ihn immer noch nicht zum Laufen bringen, kommen Sie zurück und sagen Sie uns, wo Sie nicht weiterkommen.

verwandte Informationen