Das Clever-Excel-Forum.de - Treffen
findet vom 15. - 17. September 2017 in Thüringen / Region Großer Inselsberg statt. Hotelbuchung ab sofort möglich.


For Each Schleife rückwärts - Genie gegen Compiler
#1
Hallo VBA Spezialisten,

ich habe folgendes Problem. Ich möchte gerne eine For Each Schleife rückwärts laufen lassen.
So etwas ist wahrscheinlich alles andere als einfach, aber irgendeinen Trick muss es doch geben?!
Vielleicht habt ihr ja eine Idee.

Code:
Sub ForEachReverse()
Dim i As Integer
Letzte = Range("A" & Rows.Count).End(xlUp).Row
Range("A1:A" & Letzte).Select

'Vorwärts geht:
For Each Zelle In Selection
MsgBox Zelle.Row
Next Zelle

i = Letzte
Rückwärts (geht nicht!!):
For Each Zelle In Selection
MsgBox Zelle.Offset(i, 0).Row
i = i - 1
Next Zelle

End Sub
to top
#2
Hallo Wulfi,

das ist eine Sache, die ich auch sehr vermisse.
Rückwärts geht es leider nur mit Zählschleife(n).

Code:
Sub ForEachReverse()
  Dim i As Long
  Dim rngB As Range, rngZ As Range
  Set rngB = Range(Cells(1, 1), Cells(Rows.Count, 1).End(xlUp))
  
  'Vorwärts geht:
  For Each rngZ In rngB
    MsgBox rngZ.Row
  Next rngZ
  
  'Rückwärts geht so:
  For i = rngB.Rows.Count To 1 Step -1
    MsgBox rngB.Cells(i, 1).Row
  Next i
End Sub

Gruß Uwe
to top
#3
Hallo Uwe,

Du warst schneller ... und ich merke wie ich us der Übung bin. Ich hatte es jetzt so gelöst:
Code:
Option Explicit

Sub ForEachReverse()
Dim zelle As Range
Dim letzte As Long
letzte = Range("A" & Rows.Count).End(xlUp).Row
    For Each zelle In Selection
    MsgBox zelle.Row
    'MsgBox letzte.Offset(letzte, 0).Row
    Range("A1:A" & letzte).Select
    letzte = letzte - 1
    Next zelle
End Sub

Naja ... es wurde wohl geholfen und das zählt 21

Gruß
Marcus

Ich arbeite mit Excel 2003!

Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen.
Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.


?mage
to top
#4
Hallo Marcus,

hab Deinen Code so ergänzt, dass er richtig läuft und getestet.

Code:
Sub ForEachReverse_marose67()
Dim zelle As Range
Dim letzte As Long
letzte = Range("A" & Rows.Count).End(xlUp).Row
Range("A1:A" & letzte).Select
    For Each zelle In Selection
     MsgBox zelle.Row
    'MsgBox letzte.Offset(letzte, 0).Row
    Range("A1:A" & letzte).Select
    letzte = letzte - 1
    Next zelle
End Sub

Es geht aber trotzdem nicht rückwärts.
Es ist unerheblich, was innerhalb der Schleife neu selektiert wird.
Maßgeblich ist der angegebene Bereich in der Startzeile der Schleife.

Gruß Uwe
to top
#5
Hallo Leute,
ihr seid ja sauschnell. Danke! - Was haltet ihr denn von der Idee wenn man eine Hilfsspalte mit fortlaufenden Zahlen einfügt
und dann per Sortierung die zu abzuarbeitenden Zellen umdreht. Denn soviel ich weiß wird mit der For Each Schleife
ja irgendwie alles gleichzeitig abgearbeitet während die Zählschleifen ja doch verhältnismäßig langsam sind.
to top
#6
Hall Wulfi,

Zählschleifen relativ langsam ... Naja. Also ich habe bis jetzt fast alles mit Zählschleifen gemacht. Ich denke einmal dass es darauf ankommt was Du machen willst. Hast Du eine Stoppuhr? Vielleicht am Handy? OK - dann lege Dir diese beiden Codes einmal hinter dein Tabellenblatt (VBA Editor) und starte sie nacheinander:

Code:
Option Explicit

Sub Zaehlen1()
Dim i As Long
For i = 1 To 100000
    [A1] = i
Next
End Sub

Option Explicit

Sub Zaehlen2()
Dim i As Long
Application.ScreenUpdating = False
For i = 1 To 100000
    [A1] = i
Next
Application.ScreenUpdating = True
End Sub

Hier wird beide Male eine For - Next Schleife abgefahren. Und das 100000 mal. In Zelle A1 des Tabellenblattes wird beide Male die Zahl hochgezählt. Unterschied ist, dass beim 2ten Code der Bildschirm nicht aktualisiert wird und der Code somit viel schneller durchlaufen kann.

Natürlich kannst Du auch mit einer Hilfsspalte arbeiten. Auch hier bleibt immer die Frage was Du machen willst. Vielleicht benötigst Du ja auch gar kein VBA. Es gibt Formelgötter, welche Formeln erstellen ... da kann ich bei weitem nicht, mit meinem Wissen, mithalten.

Gruß
Marcus

Ich arbeite mit Excel 2003!

Wissen ist Macht - es ist aber nicht schlimm nicht alles zu wissen.
Man muss nicht alles wissen - man muss nur wissen wo es steht, oder wo man Hilfe bekommt.


?mage
to top


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  Variablen füllen mit Schleife mumpel 21 151 Vor 29 Minuten
Letzter Beitrag: mumpel
  Quellcode kürzen - mehrere if abfragen durch for Schleife ersetzen? Abitus 4 78 Gestern, 07:02
Letzter Beitrag: Abitus
  [VBA] Einfärben von Textboxen über Schleife Rabe 4 78 25.11.2016, 22:04
Letzter Beitrag: schauan
  Hilfe beim Code "Schleife von bis" michel34497 2 67 16.11.2016, 17:55
Letzter Beitrag: michel34497
  Wie viel % schießt Team A 1 Tor gegen Team B dindu 17 442 11.11.2016, 18:56
Letzter Beitrag: dindu
Lightbulb Turnierplan für 6 Mannschaften Jeder gegen Jeden digitops 13 263 05.11.2016, 20:40
Letzter Beitrag: digitops
  Hilfe bei Schleife Kash 2 71 17.10.2016, 07:35
Letzter Beitrag: Kash
  Schleife in Makro einbauen Max89 4 221 14.10.2016, 20:44
Letzter Beitrag: Max89
  Schleife für Excel Solver TUBS 4 365 10.07.2016, 12:31
Letzter Beitrag: TUBS
  Stringkonstruktion ohne Schleife möglich? VBATartar 3 269 02.07.2016, 08:03
Letzter Beitrag: RPP63

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste