
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,
Sheet1
die mit einer Zeile in übereinstimmtSheet2
, wird es aktiv. Sie suchen nach eindeutigen Werten, d. h. nach Zeilen in ,Sheet1
die mit nichts in übereinstimmenSheet2
, und umgekehrt. Aber was Sietunlöst Zeilenpaare aus, die nicht übereinstimmen; d. h., wennSheet1!Row 1
nicht übereinstimmtSheet2!Row 1
, ergreifen Sie Maßnahmen. Das ist verfrüht; Sie müssen scannenden ganzen Wegdurch, umSheet2
festzustellen, obSheet1!Row 1
ÜbereinstimmungenbeliebigZeile inSheet2
. Der Autor der Subroutine „WalkThePlank“ hat etwas getan, das nicht viel Sinn ergibt. Nachdem er die durch die
row
Variable indizierte Zeile gelöscht hatte, setzte er die Variable auf 0. Das war Verschwendung, da die Subroutine dadurch alle Zeilen erneut untersuchte,Sheet1
die sie bereits untersucht und als eindeutig bestimmt hatte. Da sie aber die Zeile löscht, die nicht eindeutig ist (d. h. die mit der ZeilebRow
in übereinstimmtSheet2
), wird sie nicht nachDasZeile erneut, und es gibt keine Endlosschleife. Um die Neugier zu steigern, hätte er sagen könnenrow = 0
, aber stattdessen sagte er kryptischrow = row - row
.Aber das müssen Sie ändern. (Genauer gesagt glaube ich, dass Sie einfach die
row = …
Anweisungen innerhalb derDo While
Schleifen eliminieren sollten, mit Ausnahme derrow = row + 1
am 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 marschierenSheet1
.- 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.