Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1644to1648
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
Inhaltsverzeichnis

Makro: Zeilen löschen, kopieren, filtern

Makro: Zeilen löschen, kopieren, filtern
16.09.2018 18:20:19
Christian
Hallo an euch alle,
habe mir unten stehendes Makro aufgezeichnet und möchte euch nun bitten, dies so abzuändern, dass es jederzeit wiederholbar ist.
Beim Starten des Makros ist die Tabelle nach dem Text in A1 gefiltert und einige der eingeblendeten Zeilen haben rote Schriftfarbe und einige schwarze Schriftfarbe.
Was nun eigentlich passieren soll,
1. sollen alle eingeblendeten, schwarz geschriebenen Zeilen gelöscht werden. (in meinem Beispiel kamen diese Zeilen aus dem Bereich 3770:57183)
2. Wenn der Filter nicht bereits entfernt wurde, weil Zeile 1 gelöscht wurde, soll der Filter entfernt werden.
3. Die Tabelle soll nach F absteigend, C aufsteigend sortiert werden (ich weiß das fehlt bei der Aufzeichnung)
4. alle am Anfang der Tabelle rot geschriebenen Zeilen sollen ans Ende der Tabelle namens Ergebnis kopiert werden. In meinem Beispiel wurden die Zeilen 1 und 2 weil sie rot geschrieben waren ans Ende der Tabelle Ergebnis kopiert, in die Zeilen 2062 und 2063. Alles was nach der ersten schwarzen Zeile kommt soll nicht kopiert werden, auch wenn es rote Schriftfarbe hat.
5. Danach habe ich die zuvor kopierten Zeilen gelöscht.
6. und die Mappe wieder nach dem Text in A1, in diesem Fall tt3671676 gefiltert.
Ihr merkt da ist vieles dabei, was sich bei jedem Ausführen des Makros ändert, daher bitte ich euch um Hilfe.
Gruß und dank
Christian
Sub Makro1()
' Makro1 Makro
' Tastenkombination: Strg+j
Rows("3770:57183").Select
Selection.Delete Shift:=xlUp
ActiveSheet.ShowAllData
Rows("1:2").Select
Selection.Cut
Sheets("Ergebnis").Select
Range("A2062").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll Down:=6
Sheets("Auswertung").Select
Selection.Delete Shift:=xlUp
Range("A1").Select
Selection.Copy
Application.CutCopyMode = False
Selection.AutoFilter
Selection.Copy
ActiveSheet.Range("$A$1:$F$59449").AutoFilter Field:=1, Criteria1:= _
"tt3671676"
End Sub

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
17.09.2018 19:28:07
Rob
Beispiel-Datei zum herunterladen vorhanden?
AW: Makro: Zeilen löschen, kopieren, filtern
17.09.2018 21:36:15
Christian
Hallo Rob, ich versuche zur Zeit mein Bestes, aber das ist sehr schwer da was zusammenzubringen da ich eine im Original 43,2 MB große Tabelle auf 300 KB kürzen muss und sie immer noch alle eventualitäten beinhalten soll.
Aber auf weniger als 640 KB schaffe ich sie im Moment nicht zu bringen, ohne dass es unverständlich wird.
Ich versuche es mal nochmal einfacher zu erklären was es machen soll, vielleicht bekommt man es ja auch ohne Beispiel hin.
1. Alle Zu beginn eingeblendeten und schwarz geschriebenen Zeilen löschen. (Kann in Ausnahmefällen auch sein dass keine eingeblendete Zeile schwarz geschrieben ist, dann soll halt nichts gelöscht werden).
2. den Filter in Spalte A entfernen falls er noch gesetzt ist.
3. die Tabelle nach Spalte F absteigend, dann Spalte C aufsteigend sortieren.
4. Falls die jetzige Zelle A1 schwarz geschrieben ist, kann das Makro an dieser Stelle beendet werden, wenn sie rot geschrieben ist geht es weiter:
5. alle rot geschriebenen Zeilen zu Beginn der Tabelle sollen ans Ende der Tabelle namens Ergebnis kopiert werden.
Beispiel: in der Tabelle Auswertung, um die es geht, ist Zeile 1 und 2 rot geschrieben und Zeile 3 schwarz geschrieben, also sollen die beiden ersten Zeilen, da sie rot geschrieben sind ans Ende der Tabelle Ergebnis kopiert werden. Und zwar in die Zeilen 2079 und 2080 da die Tabelle Ergebnis bislang aus 2078 Zeilen besteht.
6. alle soeben kopierten Zeilen sollen in der Tabelle Auswertung gelöscht werden, sodass Auswertung!A1 auf jeden Fall schwarz geschriebenen Text enthält.
7. Der Filter soll wieder in Spalte A gesetzt werden, als Kriterium der Text in A1.
Ist das jetzt irgendwie verständlicher?
Gruß
Christian
Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
18.09.2018 21:41:36
Rob
Dann bitte eine Datei zusammenbasteln. Das wird keiner für Dich machen wollen.
AW: Makro: Zeilen löschen, kopieren, filtern
18.09.2018 22:30:04
Christian
Hallo Rob,
ok ich habe es einmal probiert. Hoffe das genügt.
Im jetzigen Zustand ist die Tabelle Auswertung nach dem Text in A1 gefiltert und zusätzlich habe ich nach dem Filtern händig eine Zeile (34) eingefügt.
Jetzt sollen alle eingeblendeten schwarz geschriebenen Zeilen (1, 4, ,28) gelöscht werden.
Dann soll der Filter entfernt werden, sofern er nicht bereits durch Löschen von Zeile 1 entfernt wurde.
Dann soll die Tabelle nach F aufsteigend, dann C absteigend sortiert werden, wodurch die von Hand zugefügte Zeile 34 nach oben in Zeile 1 wandert.
Jetzt sind die ersten 4 Zeilen rot geschrieben, die 5. schwarz. Alles was vor der ersten schwarz geschriebenen Zeile steht, sprich Zeile 1-4 soll ans Ende der Tabelle Ergebnis kopiert werden, also in die Zeilen 17-20.
Dann sollen die zuvor kopieren Zeilen aus der der Tabelle Auswertung gelöscht werden, sodass die Zeile tt2063781 20.12.2007 13.05.1987
, sprich die erste schwarze Zeile in Zeile 1 steht.
und es soll wieder nach A1 gefiltert werden.
https://www.herber.de/bbs/user/124053.xlsx
Was noch wichtig ist, alles kann sein, nicht muss.
Es kann sein, dass
1. zu Beginn alle eingeblendeten Zeilen schwarz geschrieben sind.
2. zu Beginn alle eingeblendeten Zeilen rot geschrieben sind.
3. das keine Zeile händig hinzugefügt wurde, dann kann man sich das sortieren sparen.
4. Das nach dem sortieren in A1 schwarzer Text steht, sodass keine Zeilen nach Tabelle Ergebnis kopiert werden sollen.
Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
19.09.2018 17:22:56
Rob
Ich schau es mir mal an...
AW: Makro: Zeilen löschen, kopieren, filtern
19.09.2018 18:44:08
Rob
Ans Ende der Tabelle in Zeile 17-20 kopieren? Bei mir hat die Tabelle insgesamt 31 Zeilen nach dem Löschen!?
Zitat: "Jetzt sind die ersten 4 Zeilen rot geschrieben, die 5. schwarz. Alles was vor der ersten schwarz geschriebenen Zeile steht, sprich Zeile 1-4 soll ans Ende der Tabelle Ergebnis kopiert werden, also in die Zeilen 17-20."
HIer schon mal bis dahin der Code:

Option Explicit
Sub Christian()
Dim r As Range
Dim LastRow As Long
Dim Filterkriterium As String
Filterkriterium = Tabelle1.Range("A1")
'tt0463834
LastRow = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
With Tabelle1
For Each r In .Range("A1:A" & LastRow)
If r = Filterkriterium And r.Font.Color = RGB(0, 0, 0) Then
r.EntireRow.Delete
End If
Next r
'Nach F aufsteigend, nach C absteigend
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
Range("F1:F" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With .Sort
.SetRange Range("A1:F" & LastRow)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
Range("C1:C" & LastRow), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With .Sort
.SetRange Range("A1:F" & LastRow)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub

Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
19.09.2018 22:18:21
Christian
Hallo Rob,
sorry wenn das ein Misverständnis war, aber die Zeilen sollen von der Tabelle "Auswertung" in die Tabelle "Ergebnis" kopiert werden und "Ergebnis" hat in meinem Beispiel zu Beginn 16 Zeilen und in meinem Beispiel danach 20.
Dass die Schriftfarbe sich in der Tabelle Ergebnis geändert hat von schwarz auf rot, war mein Fehler, war nicht so gewollt.
Gruß
Christian
AW: Makro: Zeilen löschen, kopieren, filtern
20.09.2018 10:56:06
Rob
Ein weiteres Problem; wenn Du es auf Deine Weise händisch filterst, dann hast Du in Spalte 1 ggf. zwei unterschiedliche alphanumerische Ziffern. Filter z.B. nach tt1777604, dann hast Du in der ersten zeile tt0463834 stehen.
Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
20.09.2018 11:24:49
Christian
Hallo Rob,
das stimmt, ich kann auch nach einem anderen Text als A1 filtern und in diesem Fall bleibt A1 stehen.
Ist aber nicht geplant, dass ich das mache.
Ich habe mir noch Gedanken gemacht, woran das Makro überhaupt unterscheiden kann, ob nach dem Filtern Zeilen hinzugefügt wurden oder nicht.
Und bin zu dem Schluss gekommen dass eigentlich keine Unterscheidung notwendig ist, da alle diese Zeilen rot sind, sodass sie sowieso nicht gelöscht würden.
Nur wenn das Makro das nicht unterscheidet, muss in jedem Fall neu sortiert werden.
Gruß
Christian
AW: Makro: Zeilen löschen, kopieren, filtern
20.09.2018 15:32:57
Rob
Probier das mal aus:

Option Explicit
Sub Christian()
Dim r As Range
Dim LastRow As Long
Dim Filterkriterium As String
Filterkriterium = Tabelle1.Range("A1")
'tt0463834
LastRow = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
With Tabelle1
For Each r In .Range("A1:A" & LastRow)
If r = Filterkriterium And r.Font.Color = RGB(0, 0, 0) Then
r.EntireRow.Delete
End If
Next r
'Nach F aufsteigend, nach C absteigend
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
Range("F1:F" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With .Sort
.SetRange Range("A1:F" & LastRow)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:= _
Range("C1:C" & LastRow), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With .Sort
.SetRange Range("A1:F" & LastRow)
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Zellen bis zur ersten font color schwarz in Tabelle2, Spalte1 Ende kopieren
For Each r In .Range("A:A")
If r.Font.Color = RGB(255, 0, 0) Then
LastRow = Tabelle2.Cells(Rows.Count, 1).End(xlUp).Row + 1
Sheets("Ergebnis zu Beginn").Cells(LastRow, 1) = r
Else
GoTo ZellenLöschen
End If
Next r
'Kopierte Zellen aus Tabelle1 löschen
ZellenLöschen:
.Range("A1").Activate
Do While ActiveCell.Font.Color = RGB(255, 0, 0)
Tabelle1.Range("A1").Activate
If ActiveCell.Font.Color = RGB(255, 0, 0) Then
ActiveCell.EntireRow.Delete
End If
Loop
End With
End Sub

Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
20.09.2018 18:36:59
Christian
Hallo Rob,
so ganz klappt es nicht, es sind über 2300 Zeilen nach Tabelle Ergebnis kopiert worden, obwohl A1 hätte schwarz sein sollen, also gar nichts hätte kopiert werden sollen.
Ich habe auch eine Vermutung weshalb. Das mit den beiden Sortierkriterien war nicht so gemeint, dass erst nach Spalte F und dann nach Spalte C sortiert werden soll, dann hätte ich ja auch direkt nach Spalte C sortieren können.
Das war so gemeint, dass einmal sortiert werden soll aber man kann ja angeben, dass zuerstmal nach Spalte F sortiert werden soll und wenn 2 Werte in Spalte F identisch sind, soll dann der Wert in Spalte C mit einbezigen werden um die Reihenfolge zu ermitteln.
Außerdem hatte ich noch darum gebeten dass zum Schluss wieder nach A1 gefiltert wird.
Gruß
Christian
Anzeige
AW: Makro: Zeilen löschen, kopieren, filtern
21.09.2018 14:19:10
Rob
Hi Christian,
verstehe nicht ganz, was Du meinst....
AW: Makro: Zeilen löschen, kopieren, filtern
21.09.2018 14:22:32
Christian
Du kannst doch wenn du unter Daten auf Sortieren klickst mehrere Kriterien auswählen nach denen sortiert werden soll, jedenfalls nachdem dein Makro ausgeführt wurde, ist die Tabelle nach Spalte C sortiert. Mit der kleinsten Zahl zuerst.
Durch die falsche Sortierung wurden mehr als 2300 Zeilen kopiert.
Gruß
Christian

315 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige