PDA

Vollständige Version anzeigen : Schleife braucht zu lange


MH-AT
01.09.2017, 12:59
Hallo,
irden wie brauchen meine Schleifen urrrr lange.

Habe eine Datei wo ich in einer Spalte leere Zellen habe. Diese sollen mit dem heutigen Datum befüllt werden. Es handelt sich dabei um 40.000 Zeilen.

***************
Sub Test()

Dim Bereich As Range
Dim Zelle As Range
Dim ZHeute As Date
ZHeute = Worksheets(Tabelle_MB5L).Range("O1")


Worksheets(Tabelle_MB5L).Activate

Set Bereich = Worksheets(Tabelle_MB5L).Range("N5:N37600")
For Each Zelle In Bereich
If Zelle.Value = "" Then
Zelle.Value = ZHeute
End If
Next

End Sub

**************
Kann mir bitte wer Helfen? Habe auch noch ein kleines Problem mit meiner ersten Frage vom Vormittag. Ich hätte soweit die Lösung erhalten. Der VBA Code ist echt cool aber dieser Löscht mit alle Formeln aus dem Sheet.
Habe es ein bisschen umgeschrieben aber es funktioniert leider nicht.

*************************
Dim Ausgabe As Variant

Worksheets(Tabelle_MB5L).Activate 'Achtung in der Spalte A muss durchgehend sein!!!

ar = Cells(1).CurrentRegion

For i = 5 To UBound(ar)
ar(i, 13) = ar(i, 4) & ar(i, 5)
Next i

Worksheets(Tabelle_MB5L).Range("M5:M32000").Resize(UBound(ar), 1) = Ausgabe 'Hier werden die Ergebnisse ausgegeben.Anpassen

******************
Bitte auch da um Hilfe :)

Danke

RPP63neu
01.09.2017, 13:09
Moin!
Wenn die Zellen wirklich leer sind, dürfte dies "etwas" schneller sein:
Sub RPP()
With Worksheets(Tabelle_MB5L)
.Range("N5:N37600").SpecialCells(xlCellTypeBlanks) = .Range("O1")
End With
End Sub
Gruß Ralf

Storax
01.09.2017, 13:33
Und wenn alles gefüllt werden soll
Dim vdat As Variant
Dim i As Long
vdat = Bereich
For i = LBound(vdat) To UBound(vdat)
If vdat(i, 1) = "" Or IsEmpty(vdat(i, 1)) Then
vdat(i, 1) = ZHeute
End If
Next

Bereich = vdat


PS Aber wenn ich mir das überlege, ist es wahrscheinlich eher langsam, weil Screenupdating, Events, Calculation vorher nicht ausgeschaltet wurde, denn 40000 Zellen mit Zelle.Value = ZHeute zu befüllen ist zwar langsam, aber sollte bei ausgeschalteten Screeupdating etc. noch hinreichend schnell sein.

MH-AT
01.09.2017, 13:37
cool das geht jetzt echt flott Danke!

Kann mir bitte wer noch bei meinem zweiten Problem helfen?

drambeldier
01.09.2017, 13:58
Moin,
es funktioniert leider nicht
ist keine Fehlerbeschreibung, da braucht es die Meldung und die Zeile, in der der Fehler auftritt. Oder, wenn kein Fehler erzeugt wird: was soll passieren, was passiert, was passiert nicht.

Fehlersuche gibt es übrigens nur am lebenden Excel - Trockenschwimmen macht keinen Spaß.

MH-AT
04.09.2017, 08:07
Guten Morgen, hmmm Problem ist, dass mir alle Formeln überschrieben werden. Aktuell bekomme ich keine Fehlermeldung sondern es tut sich nichts.

Ich brauche in der Tabelle MB5L die Spalte D+E verkettet und das Ergebnis soll in die Spalte M. In der Tabelle ZISSE045 soll die Spalte N+A verkettet werden und das Ergebnis soll in der Spalte O eingetragen werden.

Die Formeln die im restlichen Sheet vorhanden sind, sollen nicht überschrieben werden.


********
'-------------------------------------------------------------------------------------
Dim Tabelle_ZISSE As String 'Datenquelle ZISSE045
Tabelle_ZISSE = "ZISSE045"
Dim Tabelle_MB5L As String 'Datenquelle MB5L
Tabelle_MB5L = "MB5L"
'-------------------------------------------------------------------------------------
'Anfang - Kette MB5L
'-------------------------------------------------------------------------------------
Dim Ausgabe As Variant

Worksheets(Tabelle_MB5L).Activate

ar = Cells(1).CurrentRegion

For i = 5 To UBound(ar)
ar(i, 13) = ar(i, 4) & ar(i, 5)
Next i

Worksheets(Tabelle_MB5L).Range("M5:M32000").Resize(UBound(ar), 1) = Ausgabe 'Hier werden die Ergebnisse ausgegeben.Anpassen


'-------------------------------------------------------------------------------------
'Ende - Kette
'-------------------------------------------------------------------------------------
'Anfang - Kette MB5L
'-------------------------------------------------------------------------------------
Worksheets(Tabelle_ZISSE).Activate

Dim zausgabe As Variant
zkette = Cells(1).CurrentRegion

For i = 5 To UBound(zkette)

zkette(i, 15) = zkette(i, 14) & zkette(i, 1)

Next i

Sheets(Tabelle_ZISSE).Range("O5:O32000").Resize(UBound(zkette), 1) = zausgabe 'Hier werden die Ergebnisse ausgegeben.Anpassen.

'------------------------------------------------------------------------------------
'Ende - Kette
'------------------------------------------------------------------------------------
End Sub
************
lg Martina

drambeldier
04.09.2017, 09:07
Moin,
'Hier werden die Ergebnisse ausgegeben.Anpassen
ohne mich zu fragen, was Du da vorhast: Den Variablen Ausgabe und zAusgabe wird nichts zugewiesen.