Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1220to1224
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

For each-Schleife von unten anfangen lassen

For each-Schleife von unten anfangen lassen
unten
Hallo,
ich bearbeite mit einer For each-Schleife selektierte Zeilen und möchte sie am Ende löschen lassen.
[code]
For Each rw In Selection.Rows
intRow = rw.Row
...Verarbeitung...
.Range("A" & intRow).EntireRow.Delete
Next rw
[/code]
Leider klappt das nicht so richtig, weil das Löschen die Selektierung verschiebt. Wie kann ich die selektierten Zeilen von unten durchlaufen?
Eine For-Schleife möchte ich ungern nehmen, da ich mehrere tausend Zeilen habe und immer nur ca. 5 markiert werden.
Gruß Uppe

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: For each-Schleife von unten anfangen lassen
14.07.2011 14:53:59
unten
Hallo,
der Ansatz wäre
For I = Range("a65536").End(xlUp).Row To 1 Step -1
...
Next I
Gruß
Frederik
AW: For each-Schleife von unten anfangen lassen
14.07.2011 14:59:34
unten
Hallo Frederik,
das ist mir schon klar, aber so wollte ich es möglichst nicht machen. Zeit ist ja bekanntlich Geld.
Ich habe es im Moment so gelöst, dass ich "vorwärts" ein Feld mit den Zeilennummern fülle, welches ich dann "rückwärts" abarbeite.
i = 0
For Each rw In Selection.Rows
ReDim Preserve arrZeilen(0 To Selection.Rows.Count)
arrZeilen(i) = rw.Row
i = i + 1
Next rw
For i = Selection.Rows.Count To 0 Step -1
intRow = arrZeilen(i)
...Verarbeitung...
.Range("A" & intRow).EntireRow.Delete
Next i
Hat evtl. noch jemand eine bessere Idee?
Gruß Uppe
Anzeige
mal nachgefragt!
14.07.2011 15:01:48
Matthias
Hallo
Warum bearbeitest Du die Zeilen denn erst, wenn Du sie dann sowieso löschst ?
Selection.Rows.Delete
Gruß Matthias
AW: mal nachgefragt!
14.07.2011 15:20:08
Uppe
Hallo Matthias,
ich bearbeite nicht die Zeilen, sondern verwende die Informationen in den Zeilen.
In den Zeilen stehen Dateinamen und Informationen zu den Dateien. Je nach Datei werden unterschiedliche Verarbeitungen angestoßen und wenn diese fertig sind, soll die Zeile gelöscht werden.
Gruß Uppe
und Selection.Rows.Delete ?
14.07.2011 15:42:40
Matthias
Hallo
Selection.Rows einfach erst nach Deiner Verarbeitung löschen, geht nicht?
Gruß Matthias
AW: und Selection.Rows.Delete ?
14.07.2011 19:54:29
Uppe
Hallo Matthias,
das ist natürlich eine Idee! Werde ich Dienstag im Büro testen.
Gruß Uppe
Anzeige
AW: For each-Schleife von unten anfangen lassen
14.07.2011 19:27:55
unten
Hi,
was meinst du zu diesen beiden Möglichkeiten?

Sub xxyyzz1()
Dim lngS As Long, lngE As Long, lngZ As Long
lngS = Selection.Row                   ' 1. Zeile
lngE = lngS + Selection.Rows.Count - 1 ' letzte Zeile
With ActiveSheet
For lngZ = lngE To lngS Step -1        ' alle rückwärts
' Verarbeitung Daten der Zeile Nr. lngZ
.Rows(lngZ).Delete                  ' lösche
Next lngZ
End With
End Sub
Sub xxyyzz2()
Dim rngR As Range, lngZ As Long, rngDel As Range
With ActiveSheet
For Each rngR In Selection.Rows     ' alle vorwärts
lngZ = rngR.Row
' Verarbeitung Daten der Zeile rngR (Nr. lngZ)
If rngDel Is Nothing Then
Set rngDel = .Rows(lngZ)      ' Löschen vormerken
Else
Set rngDel = Union(rngDel, .Rows(lngZ))
End If
Next rngR
'                                   ' Löschen in 1 Rutsch
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Schleife und Löschen von Zeilen
14.07.2011 19:53:47
Zeilen
Hi,
die zweite Routine kann man einfacher und kürzer schreiben:

Sub xxyyzz2n()
Dim rngR As Range, rngDel As Range
With ActiveSheet
For Each rngR In Selection.Rows     ' alle vorwärts
' Verarbeitung Daten der Zeile rngR
If rngDel Is Nothing Then
Set rngDel = rngR             ' Löschen vormerken
Else
Set rngDel = Union(rngDel, rngR)
End If
Next rngR
'                                   ' Löschen in 1 Rutsch
If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End With
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Schleife und Löschen von Zeilen
14.07.2011 19:58:16
Zeilen
Hallo Erich,
ich werde am Dienstag im Büro mal die zweite Variante testen.
Bei der ersten Variante wird ja vorausgesetzt, dass zwischen den selektierten Zeilen keine nichtselektierten sind.
Gruß Uppe
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige