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

Schleife sehr langsam

Schleife sehr langsam
13.11.2013 08:01:24
Martin
Hey Leute,
da ich bisher gute Erfahrungen hier gemacht habe, habe ich noch eine Frage^^
Und zwar habe ich ein Makro, dass für verschiedene Berechnungen bei unter 1000 Zeilen rund 1,07 Minute(n).
Davon braucht diese Schleife allein jedoch schon rund eine Minute:
'Leerzeile einfügen sobald sich Werte in Spalte A unterscheiden
For lngrow = Cells(Rows.Count, 1).End(xlUp).Row To 3 Step -1
If Cells(lngrow, 1).Value Cells(lngrow - 1, 1).Value And Not IsEmpty(Cells(lngrow, 1)) And Not IsEmpty(Cells(lngrow - 1, 1)) Then _
Rows(lngrow).Insert Shift:=xlShiftDown
Next
Hat jemand eine Idee, wie man diese beschleunigen könnte?
Die Sachen mit Screenupdating(= false), Calculation( = xlcalculationmanual)und EnableEvents(=false) habe ich schon.
Im Endeffekt soll einfach, sobald sich in Zeile A ein Wert ändert, eine Leerzeile eingefügt werden.
Gruß
Maba

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: versuchs mit einer For Each...Next-Schleife oT
13.11.2013 08:26:24
JoWE

AW: versuchs mit einer For Each...Next-Schleife oT
13.11.2013 08:41:37
Martin
Das habe ich nun auch versucht, jedoch zeigt er bei:
For Each lngrow In Range("a2:a" & ende)
If Cells(lngrow, 1).Value Cells(lngrow + 1, 1).Value And Not IsEmpty(Cells(lngrow, 1)) And Not IsEmpty(Cells(lngrow + 1, 1)) Then _
Rows(lngrow + 1).Insert Shift:=xlShiftDown
Next
einen Fehler an(Anwendungs oder objektdefinierter Fehler), könnte mir jemand ein wenig behilflich sein?

'For Each' erfordert eine LaufVariable vom ...
13.11.2013 08:59:02
Luc:-?
…Typ Variant bzw einen ObjektTyp wie zB hier Range, Martin,
was lngrow mit Sicherheit nicht ist und dir die Fehlermeldung eigentl mitgeteilt haben dürfte.
Hier könntest du sogar nur die Zeilen durchgehen - Range(…).Rows -, dann würde die LaufVariable stets eine ganze Zeile repräsentieren. Die Bezeichnung lngrow ist für eine For Each-LaufVariable allerdings idiotisch, weshalb du diese vermeintliche Profi-Bezeichnungsmethode lassen solltest. Sie macht dich sonst schnell zum Lügner und nutzt (nicht nur) dann kaum was. Das du kein Profi bist, sieht ohnehin auch ein Blinder… :->
Im Übrigen rate ich dir, ruhig auch mal in die VBE-Hilfe zu sehen und dich nicht immer nur auf Foren-Beratung zu verlassen. Selbst ist der Mann!
Morrn, Luc :-?

Anzeige
AW: 'For Each' erfordert eine LaufVariable vom ...
13.11.2013 10:02:10
Martin
Hey Luc,
ich weiß,dass die Bezeichnung falsch ist, und ich hatte sie in dem Testlauf auch als Variant deklariert, jedoch wollte ich erstmal testen,ob sie überhaupt läuft, dann hätte ich immer noch den Namen ändern können.
Gruß
Martin

dauert bei mir 1 Sekunde ...
13.11.2013 09:06:12
Matthias
Hallo
Zuerst mal bin ich der gleichen Meinung wie Luschi: For Each ist keine gute Idee
Warum der Fehler bei Deinem Testlauf kommt kann man nur vermuten.
Ich tippe mal der Fehler kommt nicht, wenn Du statt
For Each lngrow In Range("a2:a" & ende)
For Each lngrow In Range("a3:a" & ende)

schreiben würdest.
Wahrscheinlich ist A1:A2 verbunden. Genau da würde der Fehler so auftreten.
Ich habe das jetzt mal nachgespielt ( also die erste Variante [ohne For Each] )
A1:A1000 1000 verschieden Werte.
Es wird also bei jeder Zelle eine Zeile eingefügt. Das dauert bei mir 1 Sekunde
Ich habe allerdings nur Spalte(A) mit Daten gefüllt und keine weiteren Formeln in der Tabelle.
Gruß Matthias

Anzeige
AW: dauert bei mir 1 Sekunde ...
13.11.2013 10:15:15
Martin
Hey Matthias,
ne A1 und A2 sind nicht verbunden, und vlt liegt es daran, dass ich die Werte aus Spalte A per Formel aus einem anderen Tabellenblatt hole?!
Gruß Martin

AW: versuchs mit einer For Each...Next-Schleife oT
13.11.2013 08:51:03
Luschi
Hallo JoWe,
das ist allerdings keine gute Idee, da in diesem Fall die Schleife immer von Zeile 3 an nach unten läuft.
Gruß von Luschi
aus klein-Paris

AW: Ja, stimmt! Vorschläge?
13.11.2013 08:59:53
JoWE

AW: Schleife sehr langsam
13.11.2013 11:55:07
Rudi
Hallo,
teste mal:
Sub ZeilenRein()
With Range(Cells(3, 1), Cells(Rows.Count, 1).End(xlUp))
With .Offset(, 20)  'anpassen
.FormulaR1C1 = "=1/(rc1=r[-1]C1)"
.SpecialCells(xlCellTypeFormulas, xlErrors).EntireRow.Insert
.EntireColumn.ClearContents
End With
End With
End Sub

Gruß
Rudi

Anzeige
AW: Schleife sehr langsam
13.11.2013 12:27:03
Martin
Läuft sehr gut, und auch schneller, jedoch hat es noch eine kleine Macke:
Aus
Spalte A: A, A, A, B, C, C, C
macht er
Spalte A: A, A, A," "," ", B, C, C
statt
Spalte A: A, A, A," ",B," ", C, C, C
aber trotzdem schonmal um einiges schneller, danke schonmal
Gruß
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige