Anzeige
Archiv - Navigation
976to980
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
976to980
976to980
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Wie rechnet Excel?

Wie rechnet Excel?
15.05.2008 21:36:01
Jenny
Hallo Ihr Lieben!
Ich habe eine recht rechenintensive Matrixformel, bzw. eine ganze Menge davon.
Wenn ich jetzt folgende Formel verwende
=WENN(A1="";"";Matrixformel)
wird dann im Falle einer leeren Zelle A1 trotzdem die Matrixformel durchgerechnet, oder läuft das excelintern eher wie bei einem VBA-Code mit If-Then-Else, wo im Else-Fall der Then-Teil gar nicht durchlaufen wird?
Ich danke Euch im Voraus!
Grüße von Jenny im Excel-Land

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Wie rechnet Excel?
15.05.2008 21:59:30
Gerd
Hallo Jenny,
aus der ExcelHile zu WENN :
Sobald die beiden Argumente Dann_Wert und Sonst_Wert ausgewertet sind, liefert WENN den Wert, den diese Anweisungen zurückgeben.
Ist eines der an eine WENN-Funktion übergebenen Argumente eine Matrix, wird bei der Ausführung dieser WENN-Anweisung jedes Element dieser Matrix ausgewertet.
Wenn 's stimmt, was da steht.
Gruß Gerd

AW: Wie rechnet Excel?
15.05.2008 22:12:55
Jenny
Danke Gerd!
Ja, das klingt (leider) recht eindeutig, wenn's stimmt, was da steht.
Wenn dem tatsächlich so sein sollte, dann gibt es wahrscheinlich auch keine andere Möglichkeit, eine aufwändige Funktion nur bei Bedarf errechnen zu lassen, oder?
(Also ohne VBA bitte)
Grüße von Jenny im Excel-Land

Anzeige
Ja, Gerd hat recht! Das ist nicht wie bei...
15.05.2008 22:33:00
Luc:-?
...If...Then...Else, Jenny,
sondern wie bei der vbFkt IIf (duales If, WENN vglbar), nur das erstere noch unangenehmer auf Fehler reagiert (nämlich auch, wenn sie im nicht relevanten Teil auftreten!). Ohne VBA würdest du um Hilfszellen wohl nicht herumkommen, aber das ist ja auch sinnlos, denn dann wird die Fml auf jeden Fall berechnet. Auch bei Definition eines Namens für die Fml sehe ich keine Chance - es wird dann halt nur an anderer Stelle berechnet (nämlich vorweg - Namen haben eine höhere Priorität!).
Fazit: Ohne VBA keine Chance!
Vielleicht kannst du aber alles doch ganz anders organisieren?!
Gruß Luc :-?

Anzeige
AW: Ja, Gerd hat recht! Das ist nicht wie bei...
15.05.2008 22:42:37
Jenny
Danke Luc!
Schade eigentlich, aber dann ist eben nichts zu machen!
Mal sehen, ob ich das anders für unsere "Anfänger" hinbekomme.
Aber ein "Aktualisieren"-Button, der GROOOOOSS genug ist, müsste es dann auch tun. :))
Dank für Eure Hilfe!
Grüße von Jenny im Excel-Land

Na dann viel Erfolg! ;-) - Gruß owT
15.05.2008 22:53:26
Luc:-?
:-?

AW: Ja, Gerd hat recht! Das ist nicht wie bei...
15.05.2008 22:57:00
fcs
Hallöchen,
ich hab mal die folgende Formel in Zelle A2 runterkopiert bis Zeile 20 in einem Blatt probiert.
=WENN(A1="";"";SUMMENPRODUKT((B2:Z$20000=1)*1))


Ob in A1 ein Wert steht oder nicht macht sich bei mir (Excel97, Notebook BJ 2000) extrem bemerbar.
Wenn man eine Vielzahl von Matrix-Formeln im Blatt hat, dann weiß ich nicht, ob man deren Verknüpfungen dann so einrichten kann, das keine Zwischenberechnungen erfolgen.
Aber ob man jetzt zum Aktualiseren in Zelle A1 einen Wert einträgt oder einmal die F9 Taste drückt bei abgeschalteter Automatik-Berechnung.
Gruß
Franz

Anzeige
STIMMT!!!
16.05.2008 00:38:11
Jenny
Danke Franz!
Genau das habe ich folgendermaßen nachvollzogen:
A1: =ZUFALLSZAHL() runterkopieren bis A10000
B1: =WENN(G$1<0,5;"";"X") runterkopieren bis B200
C1: =WENN(B1="";"X";SUMMENPRODUKT((B1<>"")*(A1:A$10000>0,1)*(A1:A$10000<0,3))) runterkopieren bis C200
G1: =ZUFALLSZAHL()
Je nachdem, ob G1 größer oder kleiner 1/2 ist, verändert sich die Rechenzeit dramatisch!!!
(Das ist ein Beispiel auf meiner alten Gurke, wohlgemerkt! User mit Dual-Core-Quad-Extreme-undichweißnichtwas sollten da größere Bereiche benutzen!)
Denke ich nun falsch, oder ist die Excel-Hilfe (mal wieder) dahingerotzt?
Grüße von Jenny im Excel-Land
PS: Gerade noch rechtzeitig erreichte mich die Nachricht von Udo, aber auch die klärt die Arbeitsweise von Excel leider nicht!
Grüße von Jenny im Excel-Land

Anzeige
AW: STIMMT!!!
16.05.2008 01:44:00
fcs
Hallo Jenny,
generell gilt: Jede Zell-Änderung löst in den Zellen eine Berechnung aus, in denen die geänderte Zelle als Eingabewert in den Zellbereichen enthalten ist. Davon abhängig kann dann eine Lawine von Folgeberechnungen ausgelöst werden.
Bei der WENN-Funktion ist es scheinbar so, dass "nur" die Bedingung ausgewertet wird, und Folgeberechnungen dann abhängig von dem Ergebnis ausgeführt werden.
Meine Erfahrung ist bei komlexen Tabellen, dass man die Berechnungen/Formel konsequent von links nach recht und von oben nach unten aufbauen muss, wenn es schnell gehen soll. EInen Wert in Spalte 8 berechnen und dann in Spalte 2 das Ergebnis verwenden, kann ggf. etliche zusätzliche Iterationen erfordern bis Excel alle Zellen durchgerechnet hat. Gleiches gilt für Zeilen, Ergebnisse aus hohen Zeilennummern möglichst nicht in Formeln in niedrigen Zeilennummern verwenden. Bei Hilfspalten ist dann oft günstiger, diese auszublenden statt sie aus optischen Gründen rechts neben den "wichtigen" Daten anzuordnen.
Gruß
Franz
Gruß
Franz

Anzeige
Ja, genau so ist es! Das bemerkt man...
16.05.2008 12:42:00
Luc:-?
...sofort, wenn auf manuell gestellt wird und die Formeln dann im Block (evtl mit Makro) gerechnet wdn. Sobald eine Formel Daten aus einer noch nicht berechneten Quelle benötigt, entstehen Fehler.
Leider erfordern bestimmte traditionell übliche TabAufbauten oft eine andere Reihenfolge, die XL aber nur durch Berechnungswiederholung bei automatischer Einstellung realisieren kann. Bei manueller Einstellung käme es dann auf die richtige Reihenfolge der Berechnungsbereichsauswahl an.
Was WENN betrifft, liegt doch deine Betonung auf scheinbar, Franz... Oder...?
Bei IIf ist es jedenfalls garantiert so (wie auch in der VBE-Hilfe beschrieben!). Der Unterschied zu WENN bestünde dann nur darin, dass WENN nach abschließender Bedingungsauswertung auch Fehler ignorieren kann, wenn sie im verworfenen Berechnungszweig auftreten. Anderenfalls hätte die Bedingungsauswertung das Primat und man würde sich doch unwillkürlich fragen, warum das bei IIf nicht auch so ist! Es ließe sich doch auch so pgmieren! Allerdings tat sich da MS auch bei allen später hinzugekommenen xlFktt schwer. Viele verarbeiten nur Zellbereichsbezüge (Ranges, oft auch keine Mehrfachauswahlen) und keine Feldbezüge (aus Ausdrücken, Arrays).
Da ist wohl in der (späten) MS-Ära von XL ein gut Stück "Genialität" zugunsten von "'schnell' auf den Markt" auf der Strecke geblieben... ;-)
Aus einem Gutteil Unverständnis der Hilfemacher (mal abgesehen von Übersetzungsschnitzern) für die ursprgl Intentionen mögen auch gewisse "Ungenauigkeiten" der xlHilfe herrühren.
Gruß Luc :-?

Anzeige
AW: STIMMT!!!
16.05.2008 03:21:14
ingUR
Hallo, Jenny,
in Deinem Beispiel wird ein großer Teil der Zeit auch für das Setzen der Zufallszahlen beansprucht werden.
Dennoch läßt die Funktionalität der Formelüberwachung mit schrittweiser Auswertung einer Formel die Vermutung zu (hier mit EXCEL 2003 den Versuch durchgeführt), dass die WENN-DANN-SONST-Struktur den SONST-Teil nicht ausführt, wenn der Wahrheitswert der Bedingung WAHR ist. Das deckt sich mit den Beobachtungen von Dir und Franz.
Um diesen Sachverhalt etwas genauer zu prüfen, setze ich eine für den Beispielfall geschriebenen VBA-Prozedur ein, die bei abgeschalteter "Automatischen Berechnung" und Bildschirmaktuallisierung in mehreren Durchläufen (nLoops) mehrmals hintereinander (nTests) die Berechnung auslöst (analog zu F9), so dass die reinen gemittelte Rechenzeiten für die Berechnung des Tabellenblattes, sowohl für die ungefüllte als auch für die gefüllte Steuerungszelle $A$1 gegenübergestellt werden können.
 ABCD
1150155,831542125,53942224

Formeln der Tabelle
ZelleFormel
B1=WENN($A$1="";"";SUMMENPRODUKT((C1:C$20000>5)*(D1:D$20000<5)))


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Die Formel in Zelle B1 habe ich bis zur Zeile 20 in der gleichen Spalte gezogen. Die Zellen C1 bis D20000 enthalten die Werte, die durch eine mit 10 multiplizierte Zufallszahlzahl je Zelle als statischen Wert enthalten.
Der Programmcode der Prozedur:

Sub TestWennDannSonst()
Dim t0 As Double, t1 As Double, t2 As Double, tt As Double
Dim sumt0 As Double, sumt1 As Double, sumt2 As Double
Dim i As Long, l As Integer
Dim nTests As Long, nLoops As Long
nTests = 1000
nLoops = 100
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
For l = 1 To nLoops
t0 = Now()
For i = 1 To nTests
Next
tt = Now()
sumt0 = sumt0 + (tt - t0)
Cells(1, 1) = ""
t1 = Now()
For i = 1 To nTests
Application.Calculate
Next
tt = Now()
sumt1 = sumt1 + (tt - t1)
Cells(1, 1) = 1
t2 = Now()
For i = 1 To nTests
Application.Calculate
Next
tt = Now()
sumt2 = sumt2 + (tt - t2)
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "t0mittel (Leerschleife)   = " & 24 * 60 * sumt0 / nLoops / nTests & vbLf & _
"t1mittel (Zelle A1 leer)     = " & 24 * 60 * (sumt1 - sumt0) / nLoops / nTests &  _
vbLf & _
"t2mittel (Zelle A1 gefüllt) = " & 24 * 60 * (sumt2 - sumt0) / nLoops / nTests &  _
vbLf & _
"Faktor =" & Format((sumt2 - sumt0) / (sumt1 - sumt0) - 1, "0.00%")
End Sub


t0mittel ist die Zeit, die für die "Hülle" um die FOR-Schleife für die wiederholte Berechnungsanforderung benötigt wird.
t1mittel ist die gemittelte Zeit einer Tabellenblattberechnung bei nTests Experimenten, wenn die "Steuerungszelle" A1 leer ist und somit keine SUMMENPRODUKT-Bildung erforderlich ist.
t2mittel ist die gemittelte Zeit einer Tabellenblattberechnung bei nTests Experimenten, wenn die "Steuerungszelle" A1 nicht leer ist und somit eine SUMMENPRODUKT-Bildung erforderlich ist.
Während t0mittel vernachlässigbar gering ist, lassen die immerwiederkehrenden unterschiedlichen Größe von t1mittel und t2mittel (t2mittel >> t1mittel) eigentlich nur den Schluß zu, dass der SONST-Ausdruck nicht mehr ausgewertet wird, wenn die If-Bedingung den Wahrheitwert WAHR einnimmt.
Unterschiedliche Werte für t1mittel und t2mittel in verschieden Experimenten, sind durch die Verwendung der NOW()-Funktion und durch unterschiedliche Zuteilung der Rechenzeiten an die Prozedur zu erklären. Durch die Teilung der Durchläufe in nTests und nLoops wurde jedoch für den ersten Ansatz gesichert, dass beide Prozedurteile annähernd gleichermaßen von den möglichen Verzögerungen betroffen werden.
Zum Testen an der Kopie des konkrete Tabellenblatts, wäre eigentlich nur die Prozedur in ein Standarsmodulordner des VBA-Projekts ([Alt][F11]) einzufügen und ggf. die "Steuerungszelle" (Cells(1,1) :=Zelle A1) und ihr Inhalt anzupassen. Je nach Anzahl der Matrixbereiche sollten die Werte nTests und nLoops nur vorsichtig erhöht werden, wenn es sinnvoll erscheint.
Gruß,
Uwe

Anzeige
Wenn das wirklich so ist,...
16.05.2008 12:51:00
Luc:-?
...Uwe,
und es sieht ja ganz danach aus, haben sich die MS-Hilfemacher wohl an dem orientiert, was MS selbst pgmiert hat. Und das hat (oft) weniger Komfort... ;-|
Vielleicht sollte man daraufhin mal das WENN in MS Works überprüfen...
Gruß Luc :-?

AW: Recht hat dann die xl-Hilfe, Luc o.T.
15.05.2008 22:56:00
Gerd
Gruß Gerd

Oller Erbsenzähler! ;-) Aber...
15.05.2008 23:04:00
Luc:-?
...Berechnung manuell (fcs) hilft auch nur punktuell wie er ja festgestellt hat. Wäre aber u.U. akzeptabel.
Meine Testdateien sind auch immer auf manuell gestellt, sonst käme es zur Katastrophe... ;-)
Gruß Luc :-?

AW: Oller Erbsenzähler! ;-) Aber...
15.05.2008 23:33:00
Gerd
Nun denn, meinetwegen. Wollte nur dem Eindruck vorbeugen, dass ich von Formeln
eine größere Ahnung hätte :-)
P.S.: Die Aussage von Franz habe ich ganz anderst aufgenommen.
Evtl. stimmt die xl-Hilfe so denn doch nicht, was nicht das erste Mal so wäre ?
Gute Nacht Luc !
Gerd

Anzeige
AW: Oller Erbsenzähler! ;-) Aber...
16.05.2008 00:46:00
Jenny
Erbsen lassen sich einfach zählen:
=ZÄHLENWENN(Bereich;"Erbsen")
Aber meine Frage war anders!
Jenny

AW: Wie rechnet Excel?
16.05.2008 00:28:34
Uduuh
Hallo,
arbeite mit Hilfsspalten anstatt Matrix. Selbst mehrere Spalten werden schneller ausgewertet als die entsprechende Matrix.
Gruß aus’m Pott
Udo

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige