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

Wartet VBA auf Berechnung einer Excel-Formel?

Wartet VBA auf Berechnung einer Excel-Formel?
15.03.2024 17:03:12
Florian
Hallo

ist die Formelberechnung in einem Excelblatt schneller als vba? Ich brauche das zur Nullstellenbestimmung einer Funktion, die als Formel in einer Zelle vorliegt und nicht in vba programmiert werden soll.

Diese Frage stellt sich, wenn ich einen Zellenwert auslesen will, nachdem in einer anderen Zelle ein Wert eingegeben wurde. Wartet das Makro auf die Berechnung? Oder kann es sein, dass das Makro das Ergebnis früher abfrägt, als es berechnet wird? Wie das Ergebnis mit der Eingabe zusammenhängt, soll dem Makro nicht bekannt bzw. egal sein. Das ist rein Sache des Anwenders.

Hier ein Beispiel, das zeigt, dass das Makro im nächsten Schritt das Formelergebnis bereits vorfindet. Nur, ist das prinzipiell immer so oder gibt es Formeln, die etwas länger dauern?

Das Makro in einem leeren Blatt starten. Erst wird eine Formel eingetragen, dann eine Wertetabelle mit 100 Werten angelegt, dann wird die Bezugszelle der Formel mit diesen Werten gefüttert und im nächsten Makroschritt bereits das Formelergebnis ausgelesen. Es funktioniert. Alle 100 Berechnungen sind richtig.


Sub Geschwindigkeit()
Dim i As Long
Dim Wertetabelle()

'Vorbereitung Leeres Tabellenblatt
Range("b3").Formula2 = "=SIN(B2)+53" 'In Zelle b3 steht eine Formel, die von b2 abhängig ist.
ReDim Wertetabelle(1 To 100, 1 To 2) 'Eine Wertetabelle mit Werten in der ersten Spalte wird erstellt.
For i = 1 To 100
Wertetabelle(i, 1) = 0.2 + i / 100
Next i

'Und jetzt der Test
For i = 1 To 100
Range("b2") = Wertetabelle(i, 1) 'Argument in Zelle eintragen
Wertetabelle(i, 2) = Range("b3") 'Formelergebnis auslesen, das in der Formel in b3 errechnet wurde.
Debug.Assert Sin(Wertetabelle(i, 1)) + 53 = Wertetabelle(i, 2) 'Ergebnis prüfen
Next i

'Ergebnistabelle ins Blatt schreiben, nur so als Nachweis
Range("e2").Resize(100, 2) = Wertetabelle
End Sub


LG, Florian

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wartet VBA auf Berechnung einer Excel-Formel?
15.03.2024 17:31:57
Onur
Wieso erstaunt dich das?
"In der Regel werden Formeln von einer Arbeitsmappe automatisch neu berechnet, wenn sich ein Wert in einer Zelle ändert, von dem die Formel abhängt" (Microsoft)
Dabei ist es völlig egal, ob die Änderung durch einen User oder VBA-Code erfolgte.
AW: Wartet VBA auf Berechnung einer Excel-Formel?
18.03.2024 14:22:24
Florian
OK, das ist mir schon klar.
Ob für diese Berechnung das Makro angehalten wird oder weiterläuft, geht daraus nicht hervor. Darauf zielt meine Frage ab.
Mein Makroversuch schließt es nicht aus.
Nur, kann man sich darauf verlassen?
AW: Wartet VBA auf Berechnung einer Excel-Formel?
18.03.2024 14:38:28
Onur
Abgesehen davon: "ist die Formelberechnung in einem Excelblatt schneller als vba?" Klar, denn Excel kann alle Prozessorkerne (Multicore bzw Multithread) benutzen, VBA nur einen.
d.H. : Der Code muss nicht mal angehalten werden.
Anzeige
AW: Wartet VBA auf Berechnung einer Excel-Formel?
18.03.2024 14:46:35
daniel
Hi
Wenn Formeln neu berechnet werden müssen, wartet VBA, bis diese berechnet wurden, außer man hat mit Application.Calculation = xlcalculationmanual explitzt die Anweisung erteilt, Formeln nicht neu zu berechnen.
Gruß Daniel
AW: Wartet VBA auf Berechnung einer Excel-Formel?
19.03.2024 14:31:48
Florian
OK, danke. Dann gehe ich davon aus, dass der nächste Makroschritt nach Abschluss aller Berechnungen ausgeführt wird.

Dann sollte mein Funktionslöser nach Sekantenmehthode funktionieren (Was es bis jetzt auch tut).

Falls es wen interessiert:
Mit diesem Makro wird eine Funktion, die nur durch Eingabezelle (hier xZelle genannt) und Ausgabezelle (hier ZielZelle genannt) definiert ist. Sie ist genauer als die Zielwertsuche.
Achtung: Funktioniert nicht immer. Aber für meine Verhältnisse reicht es. Voraussetzung: Es gibt eine Lösung im Suchbereich. Gerechnet wird mit den Differenzenquotienten aus Startwert und Startwert *1,001. Dies muss gegebenenfalls händisch eingestellt werden. Genauigkeit der Fundstelle 1e-5, kann händisch eingestellt werden.

Private Sub Testaufruf_ZielStelle()

Debug.Print ZielStelle(Range("e195"), 0.94, Range("d195"), 0.02)
Debug.Print ZielStelle(Range("l13"), 10, Range("m11"), 2000)
End Sub

Function ZielStelle(ZielZelle As Range, Zielwert As Double, xZelle As Range, Optional Startwert As Double) As Double
'Sekantenverfahren: Findet den Zielwert einer Funktion [ZielZelle]=f([xZelle])
'ZielZelle: Zelle mit Funktionsergebnis als Formel
'xZelle: Zelle mit variablem Wert
'Startwert: =xZelle * 1.001 (falls nicht angegeben)
Dim P1, P2
Dim Epsilon As Double
Dim x3 As Double

Epsilon = 0.000001 'beliebig änderbar
ReDim P1(1), P2(1)
P1(0) = IIf(Startwert, Startwert, xZelle)
P2(0) = P1(0) * 1.001
P1(1) = TabellenFunktion(xZelle, ZielZelle, P1(0))
Do
P2(1) = TabellenFunktion(xZelle, ZielZelle, P2(0))
x3 = P2(0) - (P2(0) - P1(0)) / (P2(1) - P1(1)) * (P2(1) - Zielwert) 'Sekante trifft x-Achse
P1 = P2
P2(0) = x3
Debug.Print P2(0), P2(1) 'Näherung ins Direktfenster schreiben (kann man auskommentieren)
Loop Until Abs(P2(0) - P1(0)) Epsilon 'Abbruch, wenn Fundstelle genau genug
ZielStelle = P2(0)
End Function
Function TabellenFunktion(xZelle As Range, ZielZelle As Range, ByVal Wert As Double)
xZelle = Wert
TabellenFunktion = ZielZelle
End Function


Habe keine Makro dieser Art gefunden, nur solche, wo eine Funktion explizit ins Makro geschrieben wird. Da ich (in meinem Fall) eine solche nicht kenne oder nur mühsam (und die Ableitung noch mühsamer) ergründbar ist, nutze ich lediglich meine Function TabellenFunktion, die Eingabe- und Ausgabzelle nutzt. Ob das anders einfacher geht? Wäre interessant zu wissen.

Würde mich über Hinweise auf Seiten mit Makros dieser Art freuen.
LG, Florian
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige