Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Datenbank doppelte löschen

Datenbank doppelte löschen
30.11.2006 13:25:02
Philipp
Liebe Fachfrauen/Männer,
habe eine Datenbank mit 5 Spalten, hier werden Daten reinkopiert, das klappt soweit.
Jetzt sollen die Zeilen gelöscht werden die doppelt sind, wenn aber in der Spalte 5 was drin steht, soll die Zeile nicht gelöscht werden sondern die ohne
Kommentar in der Spalte 5, geht sowas,
würde mich auf eine Hilfe freuen,
Philipp

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenbank doppelte löschen
30.11.2006 16:00:38
Yal

Sub ÜbergabeOhneLeerZeilen()
Set ws1 = Worksheets("Tabelle1")
Set ws2 = Worksheets("Tabelle2")
For i = 1 To ws1.Range("A65500").End(xlUp).Row
If ws1.Cells(i, 2) <> 0 Then
ws1.Cells(i, 1).EntireRow.Copy
ws2.Range("A65500").End(xlUp).Offset(1, 0).PasteSpecial
End If
Next i
End Sub

viel Spass
Yal
Oops: habe die Antwort zu falschem Beitrag gesende
30.11.2006 16:07:57
Yal
.
AW: Datenbank doppelte löschen
30.11.2006 20:53:48
Erich
Hallo Philipp W.,
so ganz klar ist die Fragestellung nicht:
Mit Kommentar meinst du wohl einen Wert (z.B. Text) in Spalte 6, nicht den Excel-Kommentar.
Bedeutet "wenn aber in der Spalte 5 was drin steht"
- wenn in Spalte 5 ein nichtleerer Wert drinsteht? (Davon geht unten der Code aus.)
- wenn in Spalte 5 etwas drinsteht (kann auch eine Formel mit Wert "" sein)
Was soll geschehen, wenn in mehreren ansonsten gleiche Datensätzen in Spalte 5 Werte stehen?
Sollen dann alle Dubletten mit Spalte-5-Texten stehen bleiben?
Probiers mal mit
Option Explicit
Sub DoppelteZeilenLoeschen_bedingt()
Dim lngL As Long, zz As Long, sp As Integer
Const bolGrKl As Boolean = False              ' Groß-/Kleinschr. berücksichtigen?
lngL = Cells(Rows.Count, 1).End(xlUp).Row                      ' letzte Zeile
With Range("F1:F" & lngL)
.FormulaR1C1 = "=ROW()"                                     ' Zeilennummern
.Value = .Value                                             '   als Werte
End With
With Range("A1:F" & lngL)                                      ' Sort (Spalte 5 abst.)
.Sort _
Key1:=Range("D2"), Order1:=xlAscending, _
Key2:=Range("E2"), Order2:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=bolGrKl, Orientation:=xlTopToBottom
.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Key3:=Range("C2"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=bolGrKl, Orientation:=xlTopToBottom
End With
For zz = lngL To 2 Step -1                                     ' prüfen und löschen
For sp = 1 To 4
If bolGrKl Then
If Cells(zz, sp) <> Cells(zz - 1, sp) Then Exit For
Else
If UCase(Cells(zz, sp)) <> UCase(Cells(zz - 1, sp)) Then Exit For
End If
Next sp
If sp > 4 And Cells(zz, 5) = "" Then Rows(zz).Delete
Next zz
' Sort nach Zeilennr.
Range("A1:F" & lngL).Sort _
Key1:=Range("F2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Columns("F:F").Delete                                          ' Zeilennr. löschen
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Hallo Erich, Beispiel
30.11.2006 21:08:10
Philipp
Hallo Erich,
Danke das Du dich gemeldet hast, werde gleich testen aber mir
mein Beispiel zum Verständnis.
Philipp
https://www.herber.de/bbs/user/38661.xls
Hier Beispiel, war Falsch
30.11.2006 21:29:47
Philipp
Hallo Erich,
Sorry,
hier das neu Beispiel, mit deinem Makro. Ich hatte die lf. Nr. des Artikel vergessen.
Die Löschzeile soll die sein, wo in der Spalte 6 von den doppelten Artikel-Nr. nichts
steht.
Philipp
https://www.herber.de/bbs/user/38662.xls
AW: Hier Beispiel, war Falsch
30.11.2006 22:17:26
Erich
Hallo Philipp W.,
den Code habe ich in ein allgemeines Modul verschoben - das vermeidet Probleme, wenn man das Tabellenblatt kopiert.
Da "doppelt" sich hier nur nach Spalte A richtet, wird das Ganze kürzer:
Option Explicit
Sub DoppelteZeilenLoeschen_bedingt()
Dim lngL As Long, zz As Long
lngL = Cells(Rows.Count, 1).End(xlUp).Row                      ' letzte Zeile
With Range("G1:G" & lngL)
.FormulaR1C1 = "=ROW()"                                     ' Zeilennummern
.Value = .Value                                             '   als Werte
End With
With Range("A1:G" & lngL)                                      ' Sort (Spalte 5 abst.)
.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("F2"), Order2:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
For zz = lngL To 2 Step -1                                     ' prüfen und löschen
If Cells(zz, 1) = Cells(zz - 1, 1) And Cells(zz, 6) = "" Then Rows(zz).Delete
Next zz
' Sort nach Zeilennr.
Range("A1:G" & lngL).Sort _
Key1:=Range("G2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Columns(7).Delete                                              ' Zeilennr. löschen
End Sub
Und hier die Beispielmappe:
https://www.herber.de/bbs/user/38663.xls
(Die zu löschenden Artikel hab ich händisch gelb gefärbt, die anderen blau.)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Fehler
30.11.2006 23:15:20
Philipp
Hallo Erich,
die Zeile 6 wird nicht gelöscht,
melde mich morgen Mittag, muß nach Düsseldorf, Uni,
gruß Philipp
AW: wirklich Fehler?
30.11.2006 23:38:59
Erich
Hallo Philipp W.,
warum wohl habe ich A6 nicht gelb, sondern blau eingefärbt?
Findest du ein zweites Exemplar der Artikel-Nr. 10800?
Für mich ist das keine Dublette.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Danke stimmt Du hast Recht
01.12.2006 06:59:51
Philipp
Hallo Erich, Du hast natürlich Recht.
Herzlichen Dank Philipp
Danke für Rückmeldung - Schönes WE! (oT)
01.12.2006 07:23:16
Erich
Erich bitte schauen
01.12.2006 21:45:16
Philipp
Guten Abend Erich,
ich habe im Übereifer vergessen, die Überschriftszeile ist in Zeile5 !!!!
Ab Zeile 6 stehen die Daten, habe gerade rumprobiert, krieg es nicht hin,
bitte hilf mir ,
Philipp
Anzeige
AW: Erich bitte schauen Hier das Makro
01.12.2006 22:51:11
Philipp
Guten Abend Erich,
hier ist dein Makro:

Sub DoppelteZeilenLoeschen_bedingt()
Dim lngL As Long, zz As Long
lngL = Cells(Rows.Count, 1).End(xlUp).Row                      ' letzte Zeile
With Range("G1:G" & lngL)
.FormulaR1C1 = "=ROW()"                                     ' Zeilennummern
.Value = .Value                                             '   als Werte
End With
With Range("A1:G" & lngL)                                      ' Sort (Spalte 5 abst.)
.Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("F2"), Order2:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
For zz = lngL To 2 Step -1                                     ' prüfen und löschen
If Cells(zz, 1) = Cells(zz - 1, 1) And Cells(zz, 6) = "" Then Rows(zz).Delete
Next zz
' Sort nach Zeilennr.
Range("A1:G" & lngL).Sort _
Key1:=Range("G2"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Columns(7).Delete                                              ' Zeilennr. löschen
End Sub

'Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Wie vorhin geschrieben, Überschriften sind in Zeile 5, Daten ab Zeile 6.,
herzlichen Guten Nacht
gruß Philipp
Anzeige
AW: Erich bitte schauen Hier das Makro
01.12.2006 23:38:11
Erich
Hallo W.,
so sollte es funzen - mit Daten ab Zeile 6:
Option Explicit
Sub DoppelteZeilenLoeschen_bedingt()
Dim lngL As Long, zz As Long
lngL = Cells(Rows.Count, 1).End(xlUp).Row                      ' letzte Zeile
With Range("G5:G" & lngL)
.FormulaR1C1 = "=ROW()"                                     ' Zeilennummern
.Value = .Value                                             '   als Werte
End With
With Range("A5:G" & lngL)                                      ' Sort (Spalte 5 abst.)
.Sort _
Key1:=Range("A6"), Order1:=xlAscending, _
Key2:=Range("F6"), Order2:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End With
For zz = lngL To 7 Step -1                                     ' prüfen und löschen
If Cells(zz, 1) = Cells(zz - 1, 1) And Cells(zz, 6) = "" Then Rows(zz).Delete
Next zz
' Sort nach Zeilennr.
Range("A5:G" & lngL).Sort _
Key1:=Range("G6"), Order1:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
Columns(7).Delete                                              ' Zeilennr. löschen
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Danke Super
02.12.2006 09:49:07
Philipp
Guten Morgen Erich,
"Hallo W.," war ich doch ...
Habe gerade getestet, klappt Prima.
Dann kann ich ja Montag in der Uni angeben, Prof. will Excel-Makroprogrammierung
zeigen (BWL). Es wäre schön, wenn ich das besser verstehen könnte, wenn es keine
großartiger Aufwand ist, vielleicht für mich verständlicherweise hinschreiben ?
Z.B. For zz = lngL To 7 Step -1 ' prüfen und löschen
If Cells(zz, 1) = Cells(zz - 1, 1) And Cells(zz, 11) = "" Then Rows(zz).Delete
Next zz
weiß nicht so Recht...
herzl. gruß phil
Nachtrag / Frage
02.12.2006 10:39:56
philipp
Hallo Erich,
warum werden Rechts die Zahlen reingesetzt ?
Bitte nicht staunen, wollte nur Wissen,
phil
Anzeige
AW: Danke Super
02.12.2006 11:33:46
Erich
Hallo W.,
(ja Philipp, du weißt doch sicher, wen ich mit W. meine, oder?)
eine kurze Erklärung:
Die Zahlen in Spalte G sind die Zeilennummern. Sie werden da reingeschrieben, bevor der Bereich sortiert wird.
Am Ende wird dann nach den Nummern sortiert - das stellt die ursprüngliche Reihenfolge deiner Daten wieder her.
Mit
For zz = lngL To 7 Step -1 ' prüfen und löschen
If Cells(zz, 1) = Cells(zz - 1, 1) And Cells(zz, 11) = "" Then Rows(zz).Delete
Next zz
wird für jede Zeile zz rückwärts von lngL (letzte) bis Zeile 7 geprüft,
ob der Wert in Spalte 1 ("A") gleich der dem Wert in der Zeile davor (zz-1) ist.
Wenn dann auch noch der Wert in Spalte 11 leer ist (Cells(zz, 11) = ""), wird die Zeile gelöscht.
Alles klar? Ich wünsch dir ein schönes Wochenende!
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Danke aber Hinweis
02.12.2006 13:39:24
philipp
Hallo Erich,
(ja Philipp, du weißt doch sicher, wen ich mit W. meine, oder?)
Ne, kann es sein, das Du meinen Vater meinst der heißt Walter, ich melde mich unter der gleichen Mail-Adresse an ?
Na ja ist auch egal.!Hallo W.,
Ich bedanke mich für die Information und Hilfe insgesamt !!!
Schönes Wochenende Philipp
AW: Danke für Hinweis ...
02.12.2006 16:23:26
Erich
Hallo Philipp, (ohne W.)
großes ACH SO!
Nochmal schönes Wochenende und Grüße - auch an Walter - von Erich aus Kamp-Lintfort

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige