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

In welcher Reihenfolge berechnet Excel Formeln?

In welcher Reihenfolge berechnet Excel Formeln?
07.01.2017 04:33:33
Rainer
Hallo Excelfreunde,
Hier hatte ich geschrieben:
https://www.herber.de/cgi-bin/callthread.pl?index=1531199#1531199
Obwohl die Zelle "am Ende" der Matrix steht, wird sie dennoch zuerst berechnet. Also die Zelle  _
ist aktualisiert, aber der Rest der Berechnungnen nicht, wenn man während der Berechnung klickt und die Berechnung damit abbricht.
Kurios.
Das Problem wird noch kurioser, bzw. macht mich wahnsinnig.
Es gibt 2 Blätter, "Coil" und "Matrix". In Blatt 1 trage ich Positionswerte ein. In dem zweiten _ Blatt steht dann z.B. in C5

=INDIREKT("coil!"&$B5&C$4) 
, wobei B5 der Spaltenbuchstabe ist und C4 die Spaltennummer im ersten Tabellenblatt.
Anhand dieser Angabe finden in der Spalte C weitere Berechnungen und Vergleiche statt. Die Funktionen hier sind TEXT(), WENN(), UND(), ZÄHLENWENN(). Es gibt 4001 Zellen in dieser Spalte mit Berechnungen basierend auf der Positionsangabe in C5.
Starte ich nun die Berechnung des Tabellenblattes "Matrix", dann ist es so, dass die ganze restliche Spalte C schneller berechnet wird als die INDEX() Funktion in Zelle C5.
Ich denke nun, das ich die INDEX() Funktion in ein Makro stecke und ausführe bevor das Blatt "Matrix" neu berechnet wird.
Aber die eigentliche Frage ist eher theoretischer Natur: nach welchen Kriterien legt Excel fest, welche Zellen in einem Blatt zuerst berechnet werden? Nur nach der Rechenzeit der einzelnen Formeln, d.h. alle Berechnungen werden gleichzeitig angestoßen und wer zuerst fertig ist gewinnt?
Wie schon gesagt, für mich ist das sehr kurios.
Viele Grüße,
Rainer

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: In welcher Reihenfolge berechnet Excel Formeln?
07.01.2017 09:13:57
fcs
Hallo Rainer,
bei einer kompletten Neuberechnung arbeitet Excel meines Wissens die Formeln zeilenweise von links nach rechts und von oben nach unten ab.
Durch iterative Berechnungen des Tabellenblatts wird das Ergebnis ermittelt, wenn Zellen mit Formeln verschachtelt sind oder die Zellen mit Formeln nicht in dieser Reihenfolge stehen.
Bei Änderung einer einzelnen Zelle arbeitet sich Excel rückwärts durch alle Formeln die die Eingabezelle verwenden sowie alle von den Zellen mit den Formeln abhängigen Formeln.
Bei Matrix-Formeln und Formeln, die Zellbereiche als Parameter haben wird dann oft immer eine Lawine von Berechnungen angestoßen.
Wenn du innerhalb eines Makros Probleme mit der Performance hast, dann ist es meist erfolgteich,den Berechnungmodus vorübergehend auf manuell zu setzen
Application.Calculation = xlCalculationManual
Mit
Application.Calculate
kann man dann zum passenden Zeitpunkt eine komplette Neuberechnung durchführen.
Falls sinnvoll kann die Neuberechnung auch auf einen Zellbereich oder ein Tabellenblatt beschränkt werden.
Worksheets("Blattname").Calculate
bzw.
Worksheets("Blattname").Range("C1:C30").Calculate
Am Ende des Makros setzt man dann den Berechnungsmodus wieder auf den gewünschten wert.
LG
Franz
Anzeige
AW: In welcher Reihenfolge berechnet Excel Formeln?
07.01.2017 09:36:05
Rainer
Hallo Franz,
bei einer kompletten Neuberechnung arbeitet Excel meines Wissens die Formeln zeilenweise von links nach rechts und von oben nach unten ab.
Genau so dachte ich es mir ja auch! Aber ich habe "ganz rechts unten" in der Matrix die _ einfachste Berechnung stehen, nämlich

"=Coil!Z61"
. Das ist eine Zufallszahl, die VOR dem Berechnen der Matrix neu erzeugt wird. Gemäß der Logik sollte also die Zelle "ganz rechts unten" zuallerletzt gefüllt werden. Aber meine Erfahrung zeigt, dass sie stets zuerst verrechnet wird. Ich wollte damit kontrollieren, ob denn alles berechnet ist, aber so einfach ging es nicht.
 Application.Calculation = xlCalculationManual
Das habe ich schon so implementiert. Die Matrix ist elend groß, wenn das auf "Auto" rechnet wird man wahnsinnig.
Mit Hilfe von Werner habe ich eine Userform drübergebaut, dass auch während der Berechnung nichts verändert werden kann oder jemand die Berechnung abbricht.
Das klappt auch super, nur leider werden eben die INDEX() Formeln zuletzt verrechnet, so dass ich den Commandbutton "Berechne die Matrix" 2 mal drücken muss. Dann hat er vom vorherigen Durchlauf die richtigen Werte drinstehen.
Wie gesagt, ich werde die INDIREKT() Funktion noch mit ins Makro stecken.
Ich war nur neugierig auf die Abfolge mit der Excel sich durch meine Formeln kaut.
Der Fairness halber sei noch gesagt, dass das Tabellenblatt nur "Matrix" heißt, aber keine {Matrixformel} enthält. Nur die schon erwähnten TEXT(), WENN(), UND(), ZÄHLENWENN(), INDEX(), MIN(), MAX() und INDIREKT().
Gruß,
Rainer
Anzeige
AW: In welcher Reihenfolge berechnet Excel Formeln?
07.01.2017 11:22:16
fcs
Hallo Rainer,
die Funktion
ZÄHLENWENN(), INDEX(), MIN(), MAX()
haben jedoch Zellbereiche als Parameter und sind im Prinzip auch Matrixformeln - eben integrierte Matrixformeln.
Bei entsprechend "unglücklicher" Struktur der Formeln und Bereiche wird Excel dann bei der Berechnng narrisch.
"=Coil!Z61"
. Das ist eine Zufallszahl, die VOR dem Berechnen der Matrix neu erzeugt wird. ...

Hier ist dann die Frage wann die Zufallszahl berechnet wird und ob dann das Ergebnis in Coil!Z61 direkt in der Zelle mit der Formel berechnet wird. Excels Wege können schon verschlungen sein.
LG
Franz
Anzeige
Unterschiedl. XLVersionen mit versch. Reihenfolgen
08.01.2017 20:47:42
lupo1
... sind nachgewiesen!
xl2000 berechnete z.B. Tabellenblätter in alphabetischer Reihenfolge mit eigenen Bäumen!
Danach gab es nur einen Baum. Wie es jetzt ist, keine Ahnung!
Achtung: Mehrprozessor-Systeme in Verbindung mit dem richtigen Excel und Windows können u.U. Aufgaben aufteilen und damit eben auch die Reihenfolge ändern.
Abhilfe für ALLE Excelversionen gleichermaßen:
Lasse VBA alle Formeln in der Rechenreihenfolge in die Zellen schreiben!
AW: Unterschiedl. XLVersionen mit versch. Reihenfolgen
09.01.2017 06:19:04
Rainer

Das ist eine Zufallszahl, die VOR dem Berechnen der Matrix neu erzeugt wird. ...
Hier ist dann die Frage wann die Zufallszahl berechnet wird und ob dann das Ergebnis in Coil!Z61 direkt in der Zelle mit der Formel berechnet wird. Excels Wege können schon verschlungen sein.
Hallo Franz, die Zufahlszahl wird vom Comandbutton berechnet:
Range("z61") = Int((999 * Rnd) + 1)
Call update
"Update" startet dann die Berechnungen der Matrix.
Hallo Lupo1,
danke für den Hinweis. Also doch kurios und ohne erkenntliche Logik ala "Von oben links nach unten rechts". Ich werde es durch VBA auslösen lassen mit Franz Vorschlag:
 Worksheets("Blattname").Range("C1:C30").Calculate
So kann ich die verschiedenen Bereiche genau festlegen in ihrer Berechnungsreihenfolge. Ich gönne mir aber noch die Faulheit, die 1.2Mio Formeln in Schleifen zu verpacken und komplett in VBA zu schreiben. Das wäre mit Sicherheit die sauberste Lösung, aber es macht Modifikationen an den Berechnungsformeln aufwändiger für Nicht-VBA-Excel-Nutzer (so wie ich selbst vor wenigen Wochen...).
Vielen Dank und viele Grüße,
Rainer
Anzeige
Och, dann lohnt sich das ja so richtig ;)
09.01.2017 09:35:30
lupo1
Dann schreibe doch gleich in der richtigen Reihenfolge jeweils die Werte statt der Formeln in die Zellen. Spart viel Platz und sorgt für Schnelligkeit.
Du kannst am Ende dann alle diese Formeln auch löschen. Dann lädt die Tabelle wie ein Blitz - und speichert extrem klein. Allerdings muss das Makro dann einmal nach Öffnen laufen. Daher möglicherweise optional vorsehen.
"Ohne erkenntliche Logik": Das würde ich nicht so sagen. Aber was bitte darf ein Mehrprozessorsystem denn nun mal eigenmächtig machen? Doch wohl wenigstens feststellen, wo Dinge gleichzeitig gemacht werden dürfen, oder?
Anzeige
Schleifen? Nein ...
09.01.2017 09:43:03
lupo1
Range("B1:B999999") = "=RC[-1]^2"
macht es Dir auch ohne Schleife. Und so wird es bei ordentlichem Design überall gehen, mit viel kürzerem Code und - bitte! - ohne Einzelzuweisungen und ohne Kopieren.
Das ist übrigens die Knaller-Anwendung für die R1C1-Schreibweise schlechthin! Nicht nur international, sondern auch noch "vektoriell relativ" statt nur "statisch relativ".
AW: Schleifen? Nein ...
09.01.2017 10:11:11
Rainer
Hallo Lupo,
ist es schlimm wenn ich nicht mehr folgen kann? ;-)
Oder liegt es an dem fehlenden Wörtchen "nicht"?
Ich gönne mir aber noch die Faulheit, die 1.2Mio Formeln nicht in Schleifen zu verpacken und komplett in VBA zu schreiben.
Die Formeln werden am Ende übrigens auch gelöscht, darum gibt es ja ein seperates Blatt "matrix". Einmal durchrechnen, Ergebnisse zurück nach Blatt1 kopieren und weg mit der riesigen Formelsammlung.
"Ohne erkenntliche Logik" meinte eben für mich, dass ich als Nutzer nicht nachvollziehen konnte warum die INDIREKT() Formel "links oben" nicht berechnet wird, aber die =Coil!Z61 "ganz rechts unten" zuerst fertig ist, wo da doch "rein optisch" 1.2mio andere Formel zuerst dran sein wollen. :-)
Gruß,
Rainer
Anzeige
Ups ...
09.01.2017 13:03:35
lupo1
... habe das NICHT verpasst, da Schleifen in Excel-Formeln nicht so üblich sind (aber mit ZEILE() und SPALTE() möglich). Daher dachte ich spontan: Du möchtest die Formeln mit netten Schleifchen in nette Zellen packen ;)
Mein Fehler!
Gut, dass Du die Formeln plattmachst!
AW: Ups ...
10.01.2017 02:57:14
Rainer
Du hast das NICHT nicht verpasst, ich hatte das NICHT nicht geschrieben, da waren die Finger beim tippen schneller als die Textausgabe des Rechenzentrums.
:-D
AW: In welcher Reihenfolge berechnet Excel Formeln?
07.01.2017 11:42:59
Daniel
Hi
INDIREKT ist in komplexen Tabellen möglichst zu vermeiden, da es die unangenehme Eigenschaft hat voaltil zu sein, was bedeutet dass eine Formel mit Indirekt bei jeder Änderung in Excel neu berechnet wird und somit auch alle Formeln, die von dieser Formel abhängen.
(nicht volatile Formeln werden nur dann neu berechnet, wenn sich in dem von der Formel referenzierten Zellbereich eine Änderung ergeben hat).
in deinem Fall könntest du das Indirekt mit dem nichtvolatilen Index ersetzen:
ersetzte: =INDIREKT("coil!"&$B5&C$4)
durch: =INDEX(coil!$1:$1048576;$C$4;$B$5)
du müsstest aber dann in B5 nicht den Spaltenbuchstaben, sondern die Spaltennummer angeben (oder den Buchstaben in die Nummer umrechnen)
INDIREKT ist eigentlich nur dann erforderlich, wenn der Tabellenblattname berechnet wird oder wenn auf Namen referenziert werden soll.
Sobald dur Zeilen oder Spalten berechnet werden, ist INDEX die bessere Methode.
Gruß Daniel
Anzeige
AW: In welcher Reihenfolge berechnet Excel Formeln?
09.01.2017 07:20:42
Rainer
Hallo Daniel,
das "volatile Indirekt()" ist doch aber nicht volatil wenn das Arbeitsblatt auf

Worksheets("matrix").EnableCalculation = False
gesetzt ist?
Es steht dort, damit auch einfache Nutzer den Verweis kontrollieren können, wenn im ersten Blatt wieder mal jemand der Meinung war alles neu anordnen zu müssen. Da ist es dann auch erforderlich, den Spaltenbuchstaben direkt zu sehen ohne erst aufwändig "nachdenken" zu müssen. Aber genug gelästert...
Aber trotzdem habe ich es probiert und kann nun berichten, dass Excel zumindest INDEX() schneller ausführt als INDIREKT().
Um die Eingabefelder nicht ändern zu müssen habe ich es so geschrieben:
=INDEX(coil!$1:$1048576;C$4;CODE($B5)-64)
Gruß,
Rainer
Anzeige

14 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige