Herbers Excel-Forum - das Archiv

Formeln werden über Makro seh langsam eingetragen

Bild

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

Bild

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
Bild

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
Bild

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
Bild

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
Bild

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
Bild

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
 Bild
Excel-Beispiele zum Thema "Formeln werden über Makro seh langsam eingetragen"
Anzeigen von Werten und Formeln Zeile einfügen und Formeln und Werte übernehmen
Formeln mit Zelladressen speichern Zeilen mit leeren Formeln beim Druck unterdrücken
Alle Formeln und Links in Werte wandeln Namen löschen ohne Formeln zu zerstören
Alle Formeln und Zahlen löschen Spielpaarungen von Vorrunde bis Finale durch Formeln ermitteln
Markierung von Formeln über bedingte Formatierung Zellschutz nur für Formeln