Herbers Excel-Forum - das Archiv
Formeln werden über Makro seh langsam eingetragen
Betrifft: Formeln werden über Makro seh langsam eingetragen
von: Josef
Geschrieben am: 04.01.2007 12:54:12
Hallo!
Mit dem Makro Markierung:_F wird die Spalte F markiert.
Mit dem Makro pastF wird in jede markierten Zelle eine Formel eingetragen. Nur die Eintragung erfolgt extrem langsam im Schneckentempo. Warum ist dies bitte so? Und was könnte ich tun, damit die Abarbeitung des Makros schnell erfolgt?
Danke
Josef
Sub Markierung_F()
Dim C As Range, ErgBereich As Range
Dim laR As Long
laR = Cells(Rows.Count, 1).End(xlUp).Row
For Each C In Range("F3:F" & laR)
If C.Offset(0, -1).Value <> "" Then
Set ErgBereich = C
Exit For
End If
Next C
If ErgBereich Is Nothing Then
Exit Sub
Else
For Each C In Range("F3:F" & laR)
If C.Offset(0, -1).Value <> "" Then
Set ErgBereich = Application.Union(ErgBereich, C)
End If
Next C
ErgBereich.Select
Set ErgBereich = Nothing
End If
'Call pastF
End Sub
Sub pastF()
On Error GoTo Weiter:
Dim rngCell As Range
For Each rngCell In Selection
rngCell.FormulaR1C1 = "=R[-1]C[4]"
Next
Weiter:
End Sub
Betrifft: AW: Formeln werden über Makro seh langsam eingetra
von: Ramses
Geschrieben am: 04.01.2007 13:00:19
Hallo
Schalte vorher die automatische Berechnung aus
Sub Ausschalten()
With Application
.Calculation = xlManual
End With
End Sub
Und nachher wieder ein
Sub Einschalten()
With Application
.Calculation = xlAutomatic
End With
End Sub
Gruss Rainer
Betrifft: AW: Formeln werden über Makro seh langsam eingetra
von: Josef
Geschrieben am: 04.01.2007 13:06:06
Hallo Rainer!
Besten Dank. Klappt bereits.
Josef
Betrifft: AW: Formeln werden über Makro seh langsam eingetragen
von: Rudi Maintaire
Geschrieben am: 04.01.2007 13:28:16
Hallo,
die Schleife gehört zum Typ "absolut überflüssig"
Sub pastF()
Selection.FormulaR1C1 = "=R[-1]C[4]"
End Sub
Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe
Betrifft: AW: Formeln werden über Makro seh langsam eingetragen
von: Daniel Eisert
Geschrieben am: 04.01.2007 13:34:17
Hallo
das ganze wird langsam, weil du Schleifen verwendest, die du gar nicht brauchst.
VBA ist, wenn mit Range-Objekten (also Zellen) gearbeitet wird sehr langsam. Schleifen sollten da möglichst vermieden werden.
außderm brauchst du die Zellen vor dem Eintragen der Formel nicht zu selektieren, wenn der Zellbereich bereits durch ein Range-Objekt definiert ist, auch das kostet Zeit.
da immer die gleiche Formel eingetragen wird, kannst du dir die Schleife in Sub pastF() sparen, in dem du einfach schreibst:
ErgBereich.formulaR1C1 = "=R[-1]C[4]"
somit kannst du dir auch gleich die ganze Sub sparen.
des weiteren kannst du dir die Prüfungsschleifen sparen, wenn du die Prüfung in die Formel mit einbaust. Dann sind zwar mehr Zellen gefüllt, aber das ist auf jeden Fall schneller als eine Prüfung per VBA.
Dein ganzer Code reduziert sich dann auf folgende Zeilen:
Dim laR As Long
laR = Cells(Rows.Count, 1).End(xlUp).Row
Range("F3:F" & laR).formulaR1C1 = "=if(RC[-1]="""","""",R[-1]C[4])"
du kannst das ganze sogar zum Einzeiler verkürzen, das ist dann aber etwas unübersichtlich
Range("F3:F" & Cells(Rows.Count, 1).End(xlUp).Row).formulaR1C1 = "=if(RC[-1]="""","""",R[-1]C[4])"
Gruß, Daniel
Betrifft: AW: Formeln werden über Makro seh langsam eingetragen
von: Josef
Geschrieben am: 04.01.2007 14:50:31
Hallo Daniel!
Danke für Deine Antwort und Deine Hilfe.
Einen Fehler hätte ich aber noch:
Wenn ich zum Beispiel in der Zelle F253 die Formel
=WENN(E253="";"";J252) eingetragen habe, dann erhalte ich, wenn in der Zelle J252 kein Wert steht den Vermerk #WERT!. Stweht z, B. eine 0 in J252 dann wird aus dem #WERT! eine 0
Was müßte ich hier bitte noch machen, damit, wenn kein Wert in J252 ist keine #WERT! Meldung kommt sondern die Zelle leer bleibt.
Danke
Josef
Betrifft: AW: Formeln werden über Makro seh langsam eingetragen
von: Daniel Eisert
Geschrieben am: 04.01.2007 15:12:16
Hallo
den Fehler kann ich leider nicht nachvollziehen.
ich bekomme bei dieser Formel wenn J252 leer ist, ebenfalls eine 0 angezeigt, aber keinen Fehler. Wp hier daß Problem liegt, kann ich leider nicht sagen.
Ist die Zelle J252 auch wirklich leer oder steht ggf. ne Formel drin?
wenn die 0 stört, über EXTRAS-OPTIONEN-ANZEIGE die 0-Werte ausblenden oder die Formel noch mit ner zusaätzlichen IF-Abfrage erweitern:
=WENN(E253="";"";wenn(J252="";"";J252))
Gruß, Daniel