Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
780to784
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
780to784
780to784
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Doppelte Zeilen bis zum Buchstaben N löschen

Doppelte Zeilen bis zum Buchstaben N löschen
17.07.2006 16:25:55
Frank
Hallo Leute,
ich habe versucht über die vorhandenen Beiträge zu doppelten Datensätzen eine Lösung für mein Problem zu bekommen, habe aber nichts passendes gefunden.
Folgendes möchte ich bewerkstelligen:
Ich habe ein Tabellenblatt mit Datensätzen.
Die releaventen Daten befinden sich in den Reihen A bis N.
In Zeile O ist noch ein Datum vermerkt, wann dieser Datensatz eingefügt wurde.
Nun kann es vorkommen, dass Datensätze doppelt vorhanden sind, lediglich das Datum in Zeile O ist anders.
Ich möchte nun, dass Excel diese trotzdem als doppelt erkennt und dann jeweils den Datensatz (die Zeile) löscht, die älteren Datums ist.
Hinsichtlich der einfachen Löschung doppelter Datensätze ohne Berücksichtigung des Datums in Reihe O bin ich so vorgegeangen (das klappt einwandfrei):

Sub Doppelteraus()
Dim z1 As Long
Dim z2 As Long
'Dim PZ4 in Declarationen
z1 = ActiveSheet.UsedRange.Rows.Count
Range("A1").Select
Selection.CurrentRegion.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("A" & z1 + 1), Unique:=True
z2 = ActiveSheet.UsedRange.Rows.Count 'wird für die Berechnung gelöschter doppelter Datensätze benötigt
Range("A1:O" & z1).Delete
PZ4 = z2 - z1 'wird für die Berechnung gelöschter doppelter Datensätze benötigt
PZ4 = z1 - PZ4 'wird für die Berechnung gelöschter doppelter Datensätze benötigt
End Sub

Hat jemand eine Idee, wie ich dieses Makro für meinen Plan umstricken kann.
Gruß
Frank

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Doppelte Zeilen bis zum Buchstaben N löschen
17.07.2006 17:02:23
Peter
Hallo Frank,
versuch mal die beigefügte Mappe.
Ggf. musst du noch die Zeile 2 gegen 3 oder etwas anderes anpassen, falls du Überschriften in deiner Tabelle hast.
https://www.herber.de/bbs/user/35145.xls
Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
AW: Makro läuft
17.07.2006 17:26:09
Frank
Hallo Peter!
Vielen Dank, das Makro läuft problemlos.
Ich verstehe es zwar nicht 100%ig aber es funktioniert.
Ich habe übrigens Überschriften drin, die aber auch drin bleiben (sollen sie auch), ohne dass in Zeile 2 oder 3 des Makros Änderungen notwendig gewesen wären.
Jetzt habe ich nur noch meinen Zähler eingebaut, der mir an anderer Stelle anzeigt, wie viele doppelte Datensätze entfernt wurden. So sieht es jetzt aus:

Sub Doppelteraus()
Dim lZeile    As Long
Dim lLetzte   As Long
Dim iSpalte   As Integer
Dim bDoppelt  As Boolean
'Dim PZ4 in Declarationen
PZ4 = 0
lLetzte = ActiveSheet.Range("A65536").End(xlUp).Row
For lZeile = lLetzte To 2 Step -1
bDoppelt = False
For iSpalte = 1 To 14
If Cells(lZeile, iSpalte).Value <> Cells(lZeile - 1, iSpalte).Value Then
bDoppelt = True
Exit For
End If
Next iSpalte
If bDoppelt = False Then
If Cells(lZeile, 15).Value <= Cells(lZeile - 1, 15).Value Then
Rows(lZeile).Delete Shift:=xlUp
Else
Rows(lZeile - 1).Delete Shift:=xlUp
'Zähler
PZ4 = PZ4 + 1
End If
End If
Next lZeile
End Sub

Anzeige
AW: Makro läuft
17.07.2006 18:17:42
Peter
Hallo Frank,
hier das Makro mit Erläuterungen:
Public

Sub AlteZeileLoeschen()
Dim lZeile    As Long     ' For/Next Zeile-Index
Dim lLetzte   As Long     ' letzte belegte Zeile
Dim iSpalte   As Integer  ' For/Next Spalten-Index
Dim bDoppelt  As Boolean  ' Schalter alles doppelt = False, sonst True
Dim iDoppelt  As Integer  ' Zähler der gelöschten Zeilen
'   die letzte belegte Zeile feststellen - anhand Spalte A
lLetzte = ActiveSheet.Range("A65536").End(xlUp).Row
For lZeile = lLetzte To 2 Step -1 ' von hinten nach vorn dur die Zeilen
bDoppelt = False               ' Schalter auf False stellen
For iSpalte = 1 To 14          ' von Spalte A bis Spalte N
'     ist eine Zelle im Bereich UNGLEICH, braucht nicht gelöscht zu werden
'     der Schalter wird auf True gesetzt und die For/Next Schleife verlassen
If Cells(lZeile, iSpalte).Value <> Cells(lZeile - 1, iSpalte).Value Then
bDoppelt = True
Exit For
End If
Next iSpalte                   ' nächste Spalte
If bDoppelt = False Then       ' wurde keine UNGLEICHE Spalte gefunden?
'       wenn alle Spalten (A-N) gleich sind, wird das Datum in Spalte O
'       verglichen und die Zeile, mit dem kleineren (älteren) Datum gelöscht
If Cells(lZeile, 15).Value <= Cells(lZeile - 1, 15).Value Then
Rows(lZeile).Delete Shift:=xlUp
Else
Rows(lZeile - 1).Delete Shift:=xlUp
iDoppelt = iDoppelt + 1   ' die gelöschten Zeilen zählen
End If
End If
Next lZeile
'   Hinweis auf die gelöschten Zeilen ausgeben
MsgBox "Es wurden " & iDoppelt & " Datensätze gelöscht.", _
64, "   Nachricht für " & Application.UserName
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Makro läuft
17.07.2006 23:09:43
Frank
Hallo Peter!
Vielen Dank, dass Du Dir die Mühe gemacht hast, die Kommentare einzupflegen.
So ist es für mich natürlich einfacher nachzuvollziehen.
Super nett!
Entschuldige die späte Antwort, aber wir haben noch etwas den 72sten vom Schwiegervater gefeiert.
Gute Nacht, morgen ist auch noch Zeit für Excel.
Frank

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige