Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1520to1524
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

HalloWenn-Grusel

HalloWenn-Grusel
31.10.2016 20:44:46
Luc:-?
Hello, Folks on Halloween;
nein, das ist kein Schreibfehler im Betreff, sondern hat einen ganz bestimmten Grund und Zweck. Denn in der heutigen Grusel­Nacht geht's mir mal um eine der 3 am häufigsten benutzten Xl-Fktt — WENN. Wer meint, das wäre doch kalter Kaffee und völlig unin­ter­essant, muss sich ja das Folgende nicht antun — es wäre viell aber besser…!
Übrigens, die Xl-Versions­Angabe bezieht sich nur auf die Version, mit der ich das Folgende ermittelt und getestet habe.
Nun, ich habe nicht das ganze Internet nach Erläuterungen abgesucht, nur in der Xl-Hilfe, im hier oft verlinkten Online-Excel-Tutorium und darüber hinaus noch die anderen ersten 8 Einträge in der Google-Suche überflogen. Alle konzen­trieren sich auf den inhalt­lichen Aspekt, keiner befasst sich mit der erstaunlichen PgmTechnik dahinter. Nur in der Xl-Hilfe steht (bzw stand) irgendwo ganz lapidar und allgemein zu Fmln, dass diese durch Xl optimiert würden. Worauf sich das bezieht und wie sich das auswirkt, steht nirgendwo.
Nun ist aber Daniel E. (slowboarder) als wohl Erstem aufge­fallen, was im Falle von WENN in einer Fml tatsächlich geschieht → sogar die Berechnung der Argumente 2 und 3 hängt von Argument 1 ab, nicht nur ihre Auswahl. Das ist eine für eine Fkt nicht zu erwar­tende Ver­haltens­weise, denn dadurch wird Ein­fluss auf ihr über­gebene Argumente genommen bevor diese berechnet wurden! Das kann normalerweise keine Fkt und, wie im Folgenden gezeigt wird, auch WENN nicht! Das muss ein­fach dem Ein­fluss der myste­ri­ösen Fml-Optimierung geschul­det sein! Das kann dann auch nur die Xl-Steuerung durch­führen!
In einer ellenlangen Diskussion habe ich das Daniel ggüber betont und nach­ge­wiesen, dass dieses Ver­halten nur in Zell­Fmln auf­tritt, was er nicht glauben wollte. Aller­dings ist meine Fest­stellung logisch schlüssig, denn auch benannte Fmln reagieren anders als Zell­Fmln und Regel­Fmln der Bedingt­Forma­tierung eben­falls. Ein Indiz dafür ist ja schon, dass man Xl in einer Zell­Fml mit­teilen kann bzw muss, welche Werte/Ergeb­nisse tat­sächlich berech­net bzw zurück­ge­geben wdn sollen — bei Matrix­Fmln (nicht so in benannten Fmln, denn die berechnen alles!).
Aber seht euch mal das Folgende an und bildet euch eine eigene Meinung zu dieser Problematik. Ich hoffe, ihr habt eine und bringt sie hier ein.
WENN, eine normale Ersatz-UDF für WENN, specIf und eine UDF, die garantiert immer so reagiert wie WENN in einer Zell­Fml, simIf, im Vgl …
1. in ZellFmln:
 ABCD
1
TestdatenWENNspecIfsimIf11:= 11:= 11:= 1400032:= 83:= 82:= 8200053:= 155:= 153:= 15
2
3
4
5
6

2. in benannten Fmln:
 ABCD
1
TestdatenxlWENNspezWennsimWenn11:= 11:= 11:= 14FALSCHFALSCHFALSCH33:= 83:= 82:= 82FALSCHFALSCHFALSCH55:= 155:= 153:= 15
2
3
4
5
6

3. in BedingtFormat-Regeln:
 ABCD
1
TestdatenWENNspecIfsimWenn1   4   3   2   5   
2
3
4
5
6

Der bei den Nicht-0-Ergebnissen vor : gezeigte Zähler wird immer dann um 1 erhöht, wenn Argument2 der Fktt tatsächlich berechnet wird.
Ich muss jetzt unterbrechen und lade deshalb die TestDatei hierzu erst dann hoch, wenn ich auch die Zeit habe, dazu einige Erläute­rungen zu geben.
Fröhliches Gruseln! Die Diskussion ist hiermit eröffnet, was auch für HalloWien gilt… ;-)
Feedback nicht unerwünscht! 🙈 🙉 🙊
Gruß, Luc :-?
Besser informiert mit …

49
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: HalloWenn-Grusel
31.10.2016 22:03:42
Daniel
Hi Luc
na dann warten wir mal deine Beispieldateien ab.
Ich hatte dich ja in der ursprünglichen Diskussion ja schon mehrfach gebeten, deine Versuchsdateien mal nochzuladen, damit deine Schlussfolgerungen nachvollziehen kann, aber das hast du bisher nicht gemacht.
von daher hast du dort nichts nachgewiesen, sondern einfach nur etwas behauptet.
Aber schaun wir mal, hier möchtest du ja Dateien hochladen.
Solange die nicht vorliegen, macht eine Diskussion darüber auch keinen Sinn.
Gruß Daniel
Wieso? Immerhin wurde hier ein 'Phänomen' ...
01.11.2016 17:41:54
Luc:-?
…konstatiert, dass ich ursprünglich nur als erklärungsbedürftige Frage zur Diskussion stellen wollte, Daniel.
Nun bin ich aber doch darüber hinaus gegangen und habe eine mögliche Erklärung gleich „frei Haus“ geliefert. Viell ist ja das, neben Desinteresse (bzw Inkom­petenz) der anwe­senden und Nicht­Anwesen­heit der inter­essierten Cracks und pro­filier­ten Nutzer, der Grund für die „rege“ Nicht­Betei­ligung an dieser Klä­rungs­Dis­kuss­sion. (Möglicher­weise will sich aber auch niemand auf einen Streit mit dir oder mir ein­lassen.)
Jedenfalls war dieser BT nicht als Auf­takt zu einem erneuten Dialog nur zwischen uns beiden gedacht, denn ich gehe ohnehin nicht ernst­haft davon aus, dass du deine Hypo­these auf­geben würdest, auch, falls du keine Erklä­rung für deine Beob­ach­tungen hast bzw hättest.
Die TestDatei folgt später. Hier erst mal nur die Protokolle zu den gezeigten Ergebnissen.
1. Blatt Zellen:
      WENN                specIf                simIf
Zellen!B2: 1:= 1     Zellen!C2: 1:= 1     Zellen!A1: 0:= 1
Zellen!B4: 2:= 8     Zellen!C3: 2:= 5     Zellen!A1: 0:= 1
Zellen!B6: 3:= 15    Zellen!C4: 3:= 8     Zellen!D2: 1:= 1
Zellen!C5: 4:= 10    Zellen!A1: 1:= 8
Zellen!C6: 5:= 15	  Zellen!A1: 1:= 8
Zellen!D4: 2:= 8
Zellen!A1: 2:= 15
Zellen!A1: 2:= 15
Zellen!D6: 3:= 15
2. Blatt Namen:
     xlWENN             spezWenn              simWenn
Namen!B2: 1:= 1      Namen!C2: 1:= 1      Namen!A1: 0:= 1
Namen!B3: 2:= 5      Namen!C3: 2:= 5      Namen!A1: 0:= 1
Namen!B4: 3:= 8      Namen!C4: 3:= 8      Namen!D2: 1:= 1
Namen!B5: 4:= 10     Namen!C5: 4:= 10     Namen!A1: 1:= 8
Namen!B6: 5:= 15     Namen!C6: 5:= 15     Namen!A1: 1:= 8
Namen!D4: 2:= 8
Namen!A1: 2:= 15
Namen!A1: 2:= 15
Namen!D6: 3:= 15
3. Blatt Regeln:
      WENN               specIf               simWenn
Regeln!B2: 1:= 1     Regeln!C2: 1:= 1     Regeln!A1: 0:= 1
Regeln!B3: 2:= 5     Regeln!C3: 2:= 5     Regeln!A1: 0:= 1
Regeln!B4: 3:= 8     Regeln!C4: 3:= 8     Regeln!D2: 1:= 1
Regeln!B5: 4:= 10    Regeln!C5: 4:= 10    Regeln!A1: 1:= 8
Regeln!B6: 5:= 15    Regeln!C6: 5:= 15    Regeln!A1: 1:= 8
Regeln!D4: 2:= 8
Regeln!A1: 2:= 15
Regeln!A1: 2:= 15
Regeln!D6: 3:= 15
Die Fmln für B2:D2 in 1./2. lauten:
=WENN($A2=KKLEINSTE($A$2:$A$6;ZEILE($A1));TestVal(SUMME($A$2:$A2));)
=specIf($A2=KKLEINSTE($A$2:$A$6;ZEILE($A1));TestVal(SUMME($A$2:$A2);1);)
=simIf($A2=KKLEINSTE($A$2:$A$6;ZEILE($A1));"TestVal("&SUMME($A$2:$A2)&",2)";)
Das 2.Argument von TestVal ist bei 2. 3 (xlWenn), 4 (spezWenn), 5 (simWenn).
Die Regeln für die Geltungsbereiche B2:B6;C2:C6;D2:D6 lauten:
=--LINKS(WENN($A2=KKLEINSTE($A$2:$A$6;ZEILE($A1));TestVal(SUMME($A$2:$A2);6)))=3
=--LINKS(specIf($A2=KKLEINSTE($A$2:$A$6;ZEILE($A1));TestVal(SUMME($A$2:$A2);7)))=3
=--LINKS(simWenn)=3 *
* In der hier verwendeten simWenn-Variante ist das 2.Argument von TestVal 8.
Gruß, Luc :-?
Anzeige
AW: Wieso? Immerhin wurde hier ein 'Phänomen' ...
01.11.2016 20:32:12
Daniel
Hi Luc
naja, ohne die vollständige Datei zu kennen ist das ganze wertlos.
was bedeuten denn die Zahlenwerte, bzw was sagt:
Zellen!B4: 2:= 8
konkret aus und wie schließt du daraus, dass in der Bedingten Formatierung und bei Namen in der WENN-Funktion sowohl der WAHR- als auch der FALSCH-Teil in jedem Fall berechnet werden?
Gruß Daniel
Zellen!B4: 2:= 8 bedeutet Folgendes, ...
02.11.2016 00:50:49
Luc:-?
…Daniel:
Zellen!B4 ist Blatt und Zelle, was man aus Überschrift und HTML-Tab-Bsp erschließen kann.
2 ist der Stand des individuellen AufrufZählers (insgesamt 9, von 0…8, deren Index als 2.Argument der UDF TestVal übergeben wird.
8 ist das Ergebnis des übergebenen 1.Arguments, einer kumulativen Summe der Zellen in Spalte A. Kumulation, damit sicher jedes­mal, wenn das Dann-Argument der jeweiligen Wenn-Fkt berechnet wird, auch das 1.Argument dieser UDF berechnet und nicht bloß aus evtl Zwischen­Speicherung über­nommen wird.
Der Sonst-Teil muss nicht berechnet, sondern nur zurück­gegeben wdn, denn er ist eine Konstante. Es kommt hier allein auf den Dann-Teil an, der von WENN in einer Zell­Fml mal berechnet wird und mal nicht. Mit specIf ist das erwar­tungs­gemäß nicht so, mit simIf aber auf allen 3 Blättern, eben­falls erwar­tungs­gemäß, stets so, mit WENN aber nur auf dem ersten!
Daraus sollte jeder einigermaßen Fml- u/o VBA-Kundige eigentlich erschließen können, was hier passiert, denn es fehlen ja iW nur noch die Pgmm der 3 UDFs… ;->
Luc :-?
Anzeige
Kleine Beispieldatei zum Experimentieren
01.11.2016 12:20:26
Daniel
Hallo
die folgende Beispieldatei enthält eine Bedingte Formatierung mit einer WENN-Funktion als Regel.
diese WENN-Funktion enthält im WAHR-Teil eine kleine, selbstgeschriebene Funktion (UDF), welche immer dann, wenn sie berechnet wird, einen Ton erzeugt (BEEP)
bei eingeschaltetem Lautsprecher kann man also hören, wenn die UDF ausgeführt wird.
Über die Zelle A1 kann man steueren, ob die Bedinung erfüllt ist oder nicht.
die Formel der Regel referenziert auf alle Zellen, dh eine Eingabe in eine beliebige Zelle löst die Berechnung der Bedingten Formatierung aus.
Zum Ausprobieren also einfach:
- Ton einschalten
- in Beliebige Zellen irgendetwas eingeben
- über Zelle A1 steueren, ob die Bedinung der WENN-Funktion in der Bedingten Formatierung erfüllt ist oder nicht.
Da der Ton nicht erklingt, wenn die Bedinung nicht erfüllt ist, deutet das darauf hin, dass dann auch die Funktion im WAHR-Teil nicht berechnet wird, sondern nur die Funktion im FALSCH-Teil.
hier die Regel der Bedingten Formatierung in A1:
=WENN(A1="Ton ein";tuut($1:$1048576);keintuut($1:$1048576))
und hier die Codes für die UDFs "tuut" und "keintuut"
Function TuuT(rng As Range) As Boolean
Beep
TuuT = True
End Function
Function keinTuuT(rng As Range) As Boolean
keinTuuT = False
End Function
und natürlich noch die Datei zum Spielen:
https://www.herber.de/bbs/user/109130.xlsm
Gruß Daniel
Anzeige
Mein PC erzeugt keine Töne (Störung) und ...
01.11.2016 15:08:40
Luc:-?
…du hast immer noch nur eine (statistisch irrelevante) bedingt formatierte Zelle in deiner TestDatei, Daniel;
damit kannst du gar nichts beweisen, während mein TestErgebnis eindeutig ist, auch, weil ich mich bemüht habe, möglichst viele/alle Fehler­Quellen auszu­schließen. Ein derartiges Bemühen kann ich bei deinem Test nicht erkennen…
Erkläre doch mal aus deiner Sicht, wie es möglich wäre, dass eine Fkt Zugriff auf ihre Argumente nehmen kann, bevor diese überhaupt berechnet wurden…! ;-]
Gruß, Luc :-?
AW: Mein PC erzeugt keine Töne (Störung) und ...
01.11.2016 17:58:22
fcs
Hallo Luc,
dann spuck doch einfach mal deine Datei mit allen integrierten UDF aus, damit der Spuk ein Ende hat.
Schließlich ist Halloween auch schon vorbei.
Und dann schauen wir mal welche Überraschungen du eingebaut hast.
Es ist ja nichts neues, dass Excel integrierte (mal erwünschte/mal unerwünschte, optimierte?) Funktionen hat, die einen Anwender zur Weißglut/Verzweiflung bringen können.
z.B. die Behandlung von Datums und Zahlenwerten beim Daten-Import oder die
unterschiedliche Behandlung von Daten an der Benutzeroberfläche und unter VBA.
Bei einer einfachen Wertübernahme per Formel =A1 wird das Format der Ürsprungszelle in die Zelle mit der Formel übernommen. Das ist besonders Übel, wenn die Ursprungszelle als Text formatiert ist. Ändert man die Formel dann steht plötzlich die Formel in der Zelle statt des Ergebnisses.
Es wäre aber schon eine Überraschung, wenn in der WENN-Funktion der SONST-Ausdruck ausgewertet wird unabhäng davon ob Prüfung WAHR oder FALSCH ergibt.
LG
Franz
Anzeige
Ich habe auf ein Sonst-Argument als komplexer ...
01.11.2016 22:05:03
Luc:-?
…Ausdruck ganz verzichtet, Franz,
sondern stattdessen, wie man an den zwischen­zeitlich geposteten Fmln erkennen kann, nur ein Semikolon gesetzt, wodurch sich ein Sonst-Wert von 0 ergibt.
Üblicherweise wird in einer Fkt jeder als Argument übergebene (komplexe) Ausdruck erst berechnet, bevor er oder besser sein Ergebnis verwendet wdn kann. Das zeigt der Fml- bzw Fkts­Assistent auch so an, aber der hat ja sein eigenes Pgm. Das kann man aber auch bei jeder UDF in einer ZellFml fest­stellen! Das ist dann auch beim einfachen WENN-Nachbau specIf so, wie auch die Test­Ergeb­nisse zeigen! Daniel hat nun fest­gestellt, dass das bei der WENN-Fkt (in Zell­Fmln!) nicht so ist. Sie reagiert eher wie eine If…Then…Else…-Struktur als zB die vbFkt IIf, die sich wie eine normale Fkt verhält.
Ich behaupte nun, dass das allein der Fml-Optimierung durch die Xl-TabBlatt-Steuerung geschuldet ist und deshalb weder in benannten Fmln noch Bedingt­Format­Regeln so abläuft, was meine Test­Bspp und die nach­gelie­ferten Proto­kolle auch so zeigen. Daniel dagegen behauptet, dass WENN immer so reagieren würde und versucht das diesmal mit einer Beep-Variante seines nur auf eine Zelle bezogenen Test­Pgms zu beweisen.
Es geht mir also nicht darum, zu beweisen, wie WENN in ZellFmln reagiert, das ist inzwischen unstrittig, sondern es geht einer­seits um das Warum, also die eigent­liche Ursache dieses Ver­haltens, und anderer­seits darum, ob das generell so ist. Denn, wenn die Ursache in der TabBlatt-Berech­nungs­steuerung liegt, kann nicht auto­matisch erwartet wdn, dass das in benannten und Regel­Fmln auch so ist, denn die haben mit Sicher­heit ihre eigene Steuerung, was auch die Proto­kolle erkennen lassen.
Die Überraschung bestand für mich also eher darin, dass ein komplexes Dann- oder Sonst-Argument fkts­unty­pisch auch nicht berechnet wird, wenn das Argument Prüfung nur die Aus­wertung des jeweils anderen Argu­ments verlangt.
Aus meiner Sicht kann so etwas nur durch eine gezielte Über­wachung solcher Fmln erfolgen, aus der heraus dann die pgmmierte Ent­scheidung gefällt wird, was berechnet wdn muss und was entfallen kann. Und diese Über­wachung ist auf das Tab­Blatt beschränkt!
Gruß, Luc :-?
Anzeige
AW: Ich habe auf ein Sonst-Argument als komplexer ...
01.11.2016 23:50:48
Daniel
Luc schrieb:
Die Überraschung bestand für mich also eher darin, dass ein komplexes Dann- oder Sonst-Argument fkts­unty­pisch auch nicht berechnet wird, wenn das Argument Prüfung nur die Aus­wertung des jeweils anderen Argu­ments verlangt.
nun ich fände es eher überraschend, wenn in der Wenn-Funktion immer sowohl der Wahrteil als auch der Falschteil berechnet würden.
Wenn MS das für Formeln in Tabellenblättern hinbekommt, warum sollte das dann auch nicht in Bedingten Formatierungen und Namen funktioneren?
Zumal die vollständige Berechnung ja nur Nachteile (unnötiger Rechenaufwand, nicht zur Fehlervermeidung einsetzbar) hat und keine Vorteile bringt.
Es wäre also kompletter Unfug, es zu tun, wenn man die Möglichkeit hat es zu vermeiden.
Luc schrieb:
Und diese Über­wachung ist auf das Tab­Blatt beschränkt!
Warum? Woher hast du dieses Wissen?
Wie schon oben beschrieben, wenn man die WENN-Funktion auf dem Tabellenblatt so überwachen kann, warum sollte man es dann in der Bedingten Formatierung und bei Namen nicht tun.
Luc schrieb:
Daniel dagegen behauptet, dass WENN immer so reagieren würde und versucht das diesmal mit einer Beep-Variante seines nur auf eine Zelle bezogenen Test­Pgms zu beweisen.
natürlich, weil du behauptest, dass es immer so ist, reicht ein Gegenbeispiel aus um deine Behauptung zu widerlegen.
Außerdem ist eine Programmierung nicht zufallsabhängig, dh wenn es einmal so ist, dann ist es immer so.
Luc schrieb:
Das kann man aber auch bei jeder UDF in einer ZellFml fest­stellen!
das ist irrelevant, UDFs verhalten sich immer so, wie sie programmiert wurden, dh so wie der Programmierer sich das gewünscht hat (sofern er halbwegs was von seinem Fach versteht)
Gruß Daniel
Anzeige
Bei dem, was du nun behauptest, muss ich ...
02.11.2016 01:30:04
Luc:-?
…doch annehmen, Daniel,
dass du nicht soviel Ahnung von Pgmmierung hast, wie du vorgibst zu haben. Wenn du es schaffst, eine Ersatz-UDF für WENN (unter XL!) so zu pgmmieren, dass ihre kom­plexen(!) Argu­mente 2 bzw 3 nur dann berech­net wdn, wenn Argu­ment1 auf das ent­sprechende ver­weist, wie ich es mit einem eher unele­ganten Trick geschafft habe, ohne diesen Trick zu benutzen, kannst du mich zwar davon über­zeugen, dass das mach­bar wäre, aber nicht davon, dass der WENN-Pgmmie­rer das auch tat­säch­lich getan hat. Meine Ergeb­nisse weisen gerade nicht darauf hin! Es ist bei den meisten XlFktt sogar zu beob­achten, dass sich der Pgmmie­rer auf extern zV gestellte generelle Xl-Fktiona­li­täten ver­lassen hat!
Die Beschrän­kung auf das Tab­Blatt ergäbe sich aus dem von mir fest­gestellten Ver­halten von WENN in unter­schied­lichen Umge­bun­gen, der allge­meinen Bemer­kung von MS zur Fml-Opti­mierung und dem von mir aus dem allen gezo­genen logi­schen Schluss, dass es sich nur um einen externen Eing­riff in die Fml, kein internes Fea­ture von WENN han­deln kann. Das meine ich, auch bewie­sen zu haben. Hinzu käme, dass die Fml-Opti­mie­rung höchst­wahr­schein­lich von Anfang an vor­handen war, die Bedingt­For­ma­tierung aber erst später hin­zu­ge­fügt wurde.
Wer sagt dir denn, dass dein „Gegen­Bsp“ tat­säch­lich diese Bezeich­nung ver­dient?
Luc :-?
Anzeige
AW: Bei dem, was du nun behauptest, muss ich ...
02.11.2016 01:45:22
Daniel
Hi Luc
das sagst du mir, indem du dir mein Gegenbeispiel mal genauer anschaust und mir dann mitteilst, wo der Fehler in meiner Logik steckt.
aber dazu müsstest du mal über deinen Schatten springen und dir mein Beispiel auch mal genauer anschauen und den Ton einschalten.
Dein einziges Argument bisher ist, dass ich nur eine Wennfunktion in der Datei habe, aber das habe ich dir ja erklärt, warum das so ist und warum das auch als Gegenbeispiel ausreicht.
ansonsten warum muss ich die Wenn-Funktion erst nochmal neu programmieren, wenn ich nur herausfinden will, ob sie jetzt nun den Wahrteil berechnet, wenn die Prüfung falsch ergeben hat?
das ist nicht notwendig. Es ist wahrscheinlich auch gar nicht möglich, dass mit VBA exakt nachzuprogrammieren, da die Excelkernfunktionen wahrschienlich nicht in einer Anfängerprogrammiersprache wie Basic geschrieben wurden, sondern wahrscheinlich dann doch in einer etwas professionelleren Sprache.
ansonsten, eine Meinung zu deiner Untersuchung kann ich mir erst bilden, wenn sie vollständig vorliegt, dh erst dann, wenn du die Datei hochgeladen hast.
Ich vermute ja immer noch, dass du einen Fehler in deiner Zählmethode hast, aber das würde ich gerne überprüfen, bevor ich mich dazu konkret äußere, und dazu brauche ich halt die vollständige Datei.
Gruß Daniel
Anzeige
Na, da bin ich dann ja gespannt, was ich dazu ...
02.11.2016 02:03:21
Luc:-?
…morgen von dir lesen werde, Daniel… :-]
Übrigens habe ich eine solche UDF ja geschrieben, wenn auch mit Klimmzug, um die Xl-Steuerung nicht wirk­sam wdn zu lassen. Ähnliches habe ich bereits mehr­mals gemacht, so etwas aber noch bei keinem Anderen gesehen. Aber dazu viell im Laufe des Tages mehr…
Morrn, Luc :-?
Dann schalt die Töne mal an Luc,
01.11.2016 20:25:39
Daniel
HI Luc
hier wird doch keine Statistik benötigt.
Die Programmierung ist ja nicht zufallsabhängig, sondern liefert bei jeder Wiederholung das gleiche Ergebnis, daher reicht eine einmalige Überprüfung
Auch ich habe mich bemüht, möglichst viele Fehlerquellen auszuschließen, nur auf eine etwas andere Art und Weise als du.
Ich lasse einfach alles weg, was in irgendeiner Weise Fehler erzeugen oder das Beobachtungsergebnis verfälschen könnte und muss dann auch keine "Vermeidungsmaßnahmen" ergreifen.
Deswegen steht da in der Datei auch nur eine einzige Wenn-Funktion.
Damit ist sicher, dass alles was passiert, von dieser Wenn-Funktion ausgelöst wird.
In der Ausbildung bei uns damals hieß es: "wer viel misst misst Mist", daher versuche ich, den Versuchstaufbau auf das notwendige Minimum und die geringstmögliche Komplexität zu reduzieren.
Je größer die Komplexität, um so größer sind auch die Fehlermöglichkeiten.
Um deine Frage zu beantworten:
gar nicht, ist auch nicht notwendig, den die Wenn-Funktion nimmt keinen Zugriff auf ihre Argumente.
Ist ja auch nicht notwendig. Zuerst wird nur der erste Parmeter berechnet, und dann abhängig vom Ergebnis, der zweite oder dritte.
Und die Frage die du beantworten müsstest:
Wie ist es möglich, dass kein Ton erklingt wenn die Bedingung nicht erfüllt ist (eingeschaltete Lautsprecher vorausgesetzt), obwohl der Befehl Beep ausgeführt werden muss wenn die UDF berechnet wird.
Gruß Daniel
Anzeige
Vielleicht, weil die Steuerung der Bedingt-...
01.11.2016 22:08:16
Luc:-?
…Formatierung so etwas unterdrückt, Daniel… ;-]
Luc :-?
AW: Vielleicht, weil die Steuerung der Bedingt-...
01.11.2016 22:30:02
Daniel
Ja Luc, vielleicht.
vielleicht aber auch, weil die Funktion gar nicht berechnet wird.
Das halte ich für wahrscheinlicher, als eine Bedingte Formatierung, die gezielt bestimmte Befehle unterdrückt oder den Ton ganz kurz leise stellt.
Aber vielleicht bringt ja auch das Christkind die Geschenke.
Gruß Daniel
Keine Vorstellungskraft?! Es würde ja schon ...
02.11.2016 01:56:08
Luc:-?
…reichen, Daniel,
mal von den üblichen Rechen­ge­schwin­dig­keiten aus­zu­gehen. Mit einem Beep-Signal wird aber die Peri­ferie ange­steuert und das kostet Warte­zeit. Wird dieses Argument lt Prüfung nicht benötigt, kann es sein, dass die CPU schon weiter ist und diesen Extern­Befehl gar nicht mehr abschickt, sondern ihn ver­wirft.
Übrigens, bei uns in höheren Breiten bringt der Weihnachtsmann die Geschenke, was uns nicht daran hindert, gelegent­lich einen Trottel als „Weih­nachts­mann“ zu bezeichnen. Neben­bei, hinter dem Christ­kind ver­birgt sich der alt­iranisch-orien­tali­sche Kind­gott Mithras, des­sen Feier­tag ursprüng­lich der 25.12. war, und hinter dem Weih­nachts­mann, auch als „Knecht Ruprecht“, des­sen Name auf den in der Mitt­winter­nacht glän­zenden Rauh­reif zurück­geht (D'ad'a Moroz lässt grü­ßen!), bekannt, auf den Held der germa­ni­schen Winter­son­nen­wende, den (germa­ni­schen) Gott Wotan/Wodan/Odin.
Morrn, Luc :-?
Beep Beep Beep Habt euch lieb owT
02.11.2016 10:43:09
KlausF
Mehr hast du nicht beizusteuern...? :-| owT
02.11.2016 12:59:14
Luc:-?
:-?
AW: Mehr hast du nicht beizusteuern...? :-| owT
02.11.2016 17:52:27
KlausF
[ Mehr hast du nicht beizusteuern...? ]
Hatte lange daran überlegt Luc, aber das schien mir das Beste zu sein.
Nicht jeden Beep so ernst nehmen. Lebbe ist viel zu kurz. ,-)
Gruß
Klaus
Da haste nu ooch widda recht...! ;-) owT
03.11.2016 00:06:49
Luc:-?
:-?
AW: Du glaubst noch an den Weihnachtsmann..
02.11.2016 12:59:32
Daniel
... das erklärt natürlich einiges Luc.
den von dir beschriebenen Ablauf halte ich für unwahrscheinlich.
denn nach Abschicken des Beeps muss ja erst noch der Falsch-Teil und die Bedinugnsprüfung berechnet werden, dass ist dann wahrscheinlich viel zu spät, diesen Befehl noch zurückzurufen.
Die Erklärung, dass zuerst die Bedinungsprüfung berechnet wird und danach entschieden wird, ob Wahr- oder Falschteil zu berechnen sind, ist doch viel einfacher.
Aber wer noch an den Weihnachtsmann glaubt, der glaubt auch noch ganz andere Sachen.
Gruß Daniel
Ja, aber von 'Glauben' kann ja wohl eher bei ...
02.11.2016 13:57:27
'Glauben'
dir die Rede sein, Daniel; :->
denn mit deinem Bezug auf (andere, ggf „höhere“) Pgmmier­Sprachen hast du dich als „Fml-Mystiker“ geoutet. :-))
Was ist denn eine Fkt? Bspw das Ergebnis einer Summe doch wohl die Fkt ihrer Argu­mente! WENN ist nun aber keine der­artige Fkt, sondern eigentlich eine Ent­schei­dungs- bzw Ver­zwei­gungs­Struk­tur, kommt aber im Gewand einer Fkt daher. Also sollte sie auch so fktio­nieren. Falls nicht, muss das andere Ursachen haben, die hier auf höherer Ebene, nämlich in dem Pgm zu suchen sind, das Fmln inter­pre­tiert und so ihre Berech­nung erst mög­lich macht. Dabei ist Ver­schie­denes vor­stellbar, was mit einer UDF, die nicht auf gleiche Weise in dieses System inte­griert ist, norma­ler­weise nicht mach­bar ist. Das hat vorder­gründig nichts mit ihrer Pgmmier­Sprache, sondern eher mit der Nutz­bar­keit bestimmter Schnitt­stellen (inter­faces) zu tun.
BASIC mag als reine InterpretationsSprache meinet­halben eine „Anfänger­Sprache“ gewesen sein. Aber schon bald waren auf Grund ihrer Beliebt­heit diverse Dia­lekte ent­stan­den — QBasic und GWBasic, um nur 2 davon zu nennen. MS hatte davon VisualBasic (VB, die VBA-Varian­ten sind sub­sets davon) abge­leitet (ursprüng­lich zum Eigen­nutz), eine objekt­orien­tierte höhere Pgmmier­Sprache (schon BASIC galt als höhere, wenn auch einfache!).
Jede Prozedur, ob nun Function(-) oder SubProcedure genannt, erwartet norma­ler­weise Argu­mente/Para­meter, die ihr zu über­geben sind. Diese sollten als einfache Werte oder Werte­Felder vor­liegen. Tun sie das nicht, son­dern wdn statt­dessen Aus­drücke (expres­sions) über­geben, müssen diese erst in die erst­ge­nannten gewan­delt, d.h., idR berechnet wdn. Das könnte man einer Fkt ein­pgm­mieren, was aber unra­tio­nell wäre, wenn man ein ganzes System mit vielen ver­schie­denen sol­cher Fktt schaffen will. Trotz­dem mag das in Xl in gewisser, xl-ver­träg­licher Weise abundan gemacht worden sein, aber sicher nicht beim Fkts­Kern­Bestand, zu dem WENN nun­mal gehört! Folg­lich muss man zu mög­lichen Tricks greifen, wenn man das nach­ge­stalten will und keinen Zugriff auf die o.g. Schnitt­stellen hat — in welcher Pgmmier­Sprache auch immer.
Das dürfte das ganze „Geheimnis“ sein, was dahinter steckt.
Luc :-?
AW: Aber du erwartest ernsthaft,
02.11.2016 14:50:13
Daniel
dass ich sowas glaube:
. Wird dieses Argument lt Prüfung nicht benötigt, kann es sein, dass die CPU schon weiter ist und diesen Extern­Befehl gar nicht mehr abschickt, sondern ihn ver­wirft.
Gruß Daniel
Das bleibt dir und deinen EDV-Kenntnissen ...
02.11.2016 15:11:38
Luc:-?
…überlassen, Daniel;
von Periferie hast du aber schon mal was gehört…? :-]
Luc :-?
AW: Das bleibt dir und deinen EDV-Kenntnissen ...
02.11.2016 15:18:31
Daniel
Ich hab auch schon mal was vom Weihnachtmann gehört.
ein gewisser Luc glaubt auch daran, dass dieser die Geschenke bringt.
aber Spaß bei Seite.
du kannst ja mal versuchen, diese Programmierung nachzustellen.
dh einen von einem ersten Makro abgesetzen Beep-Befehl durch ein zweites, danach ausgeführtes makro zu verhindern.
Wenn dich der Beep nicht überzeugt, dann schau dir mal die Variante mit der Schleife an.
Ausgeführte Berechnungzeit lässt sich nicht zurücknehmen (außer man glaubt an den Weihnachtsmann und die Existenz von Zeitmaschinen)
Gruß Daniel
Die Zeitmaschinen sind wahrscheinlicher, ...
03.11.2016 00:04:40
Luc:-?
…aber das grenzt dann schon an Lems Drachen der Wahrscheinlichkeit, Daniel;
habe jetzt aber erst mal deine Zähler­Datei getestet (s.unten). Das erschien mir ein­orden­barer, aber das mag auch (m)ein Irr­tum gewesen sein…
Gruß, Luc :-?
AW:OK, dann mit Wartezeit statt Beep...
02.11.2016 13:50:51
Daniel
...denn Wartezeit kann kein Steuerung unterdrücken oder rückgängig machen und sie funktioniert auch bei Computern ohne Ton.
in der Beispieldatei kannst du in der Zelle A1 auswählen, ob der Wahrteil oder der Falschteil der Wennfunktion in der Bedingten Formatierung verwendet werden soll.
Im Wahr- und Falschteil steht jeweils die gleiche Funktion, mit dem Unterschied das in der Funktion für den Wahrteil noch eine Warteschleife mit einer deutlich spürbaren Wartezeit eingebaut ist.
Beide Funktionen referenzieren auf die Zelle B1, über die du dann auch das Ergebnis steueren kannst.
Da beide Funktionen auf die selbe Zelle referenzieren, müssten bei einer Änderung dieser Zelle auch beide Zellen neu berechnet werden.
in der Funktion mit der Wartezeit ist die Warteschleife integraler Bestandteil des Codes, dh es ist nicht möglich das Funktionsergebnis zu bekommen, ohne die Schleife auszuführen.
https://www.herber.de/bbs/user/109149.xlsm
wie gesagt, in Zelle A1 auswählen, ob Wahr- oder Falschteil verwendet werden soll und in Zelle B1 dann die Neuberechnung der Bedingten Formatierung auslösen.
wenn beide Formelteile berechnet werden, müsste die Wartezeit immer auftreten unabhängig davon was du in A1 eingestellt hast.
Wenn nur der Formelteil berechnet wird, der von der Bedinungsprüfung ermittelt wurde, tritt die Wartezeit nur dann auf, wenn WAHR in A1 steht, ansonsten nicht.
Gruß Daniel
AW: HalloWenn-Grusel
02.11.2016 00:31:55
Daniel
HI Luc
da du ja immer noch nicht in der Lage bist, deine Beispieldatei zu veröffentlichen (obwohl die ja vorliegen müsste du du ja die Ergebnisse hast), jetzt mal meine Überprüfung des Sachverhaltes mit Zählen mit statistischen Mengen und mit mehr als einer Wenn-Formel.
in der folgenden Beispieldatei enthalten alle Wenn-Funktionen zusätzliche Zähl-UDFs im Prüfungsteil, im Wahrteil und im Falschteil.
diese Zähl-UDFs erhöhen einen Zähler, immer wenn der jeweilige Funktionsteil berechnet wird.
gezählt werden Prüfung, Wahr- und Falschteil natürlich getrennt.
Es wird auch jede Zelle separat gezählt, so das Quereffekte ausgeschlossen sind.
Hierzu wird der jeweilige Zähler durch ein Dictionary-Objekt mit der Zelladresse als Key gebildet.
Die jeweilige WENN-Funktion befindet sich in Spalte B.
in Spalte A kannst du über die Eingabe von 1 oder 0 steueren, ob der Wahr(1)- oder Falschteil(0) der Wennfunktion ausgeführt werden soll.
Ändere also in mehreren Zellen (auch mehrfach für die gleiche Zelle) den Wert zwischen 1 und 0 hin und her.
Lasse dir dann das Zählerergebnis ausgeben, indem du auf den Button "Auswerten" klickst.
Dann wird dir für jede Zelle angezeigt, wie oft der Prüfungteil, der Wahrteil und der Falschteil jeweils ausgeführt wurden.
Wenn du recht hast und bei Namen und Bedingten Formatierungen der Wahrteil und der Falschteil immer berechnet werden, dann müsste im Ergebnis für alle drei Werte die gleiche Anzahl erscheinen.
Wenn ich recht habe und nur derjenige Teil, der dem Prüfungsergbnis entspricht berechnet wird, dann ist die Anzahl der Prüfungen gleich der Anzahl der Wahr- und Falschteile in Summe.
hier die Datei, kann jeder selbst ausprobieren.
https://www.herber.de/bbs/user/109141.xlsm
Wenn du dem Ergebnis nicht vertraust, bitte ich ich um eine ausführliche Begründung warum.
Die Codes liegen ja vor, du kannst sie gerne auf Fehler jeder Art überprüfen.
Gruß Daniel
Ich kann mich beim Ausprobieren des Verdachts ...
02.11.2016 02:22:44
Luc:-?
…nicht erwehren, Daniel,
dass deine Zähler nicht exakt arbeiten und deine UDFs ggf keine aus­sage­kräf­tigen Ergeb­nisse liefern, weil sie keine Argu­mente benö­tigen und evtl gerade des­halb über­gangen wdn könnten.
Aber sieh dir dann doch erst mal meine TestDatei an, die nun folgt…!
Morrn, Luc :-?
AW: Den Verdacht kann man überprüfen..
02.11.2016 08:56:25
Daniel
... in dem man den Funktionen noch einen Parameter hinzufügt.
viel Spaß beim Testen Luc.
https://www.herber.de/bbs/user/109144.xlsm
Gruß Daniel
Dir beim Test mit meiner Datei oder hat's dir ...
02.11.2016 12:06:17
Luc:-?
…die Sprache verschlagen, Daniel…! ;->
Luc :-?
AW: Dir beim Test mit meiner Datei oder hat's dir ...
02.11.2016 12:28:49
Daniel
Geduld Luc, Geduld
ich lass mir da mindestens so viel Zeit, wie du dir gelassen hast die Datei hochzuladen.
Gruß Daniel
An der Länge des Beschreibungstextes sieht ...
02.11.2016 12:57:41
Luc:-?
…man ja, dass das Gründe hatte, Daniel;
und dann hatte ich auch erst mal alle Reaktionen beantwortet…
Inzwischen habe ich aber noch etwas Anderes bemerkt (s.unten).
Gruß, Luc :-?
Die 2.Datei habe ich nicht benötigt, ...
02.11.2016 23:59:48
Luc:-?
…Daniel,
denn ich habe inzwischen noch mehr getan als du und deine Datei so verändert, dass die TestBedingungen sich etwas mehr den mei­nen annähern. Was bleibt, ist aber dein grund­sätzlich anderer Ansatz, der die Ursache für die ggtei­ligen Ergeb­nisse sein kann. Aber dadurch wurde dein Ergeb­nis eher noch stabi­lisiert und lie­fert nun bei un- und benann­ten Fmln kon­sequent nur binäre 5 und 6 im Wech­sel. Nur bei den Regeln sind die Zähler jetzt deut­lich höher, lau­fen aber aufs selbe hinaus.
Hattest du nicht geschrieben, dass du gelernt hättest „wer (zu)viel misst, misst Mist“? Du hast nun 3 Zähler in jeder Fml/Regel jeder Zeile, also 3×6×3=54 Zähler! Dagg nehmen sich ja meine 9 (mit WAHL jetzt 12) recht bescheiden aus. ;-]
Trotzdem kann ich keinen Denk- oder sonstigen Fehler in deinem Test­Aufbau finden. Da aber meiner sehr schlüs­sig ist und alle Ergeb­nisse gut zuein­ander passen (letzt­lich auch die von WAHL!), muss der Fehler woan­ders liegen, was der Kom­plexität des eigent­lich Geteste­ten geschul­det sein wird. Viell ent­hält dein Auf­bau ja etwas zuviel VBA. Mög­li­cher­weise ist daran auch das Dictio­nary, das anson­sten eine recht gute Idee zu sein scheint (bzw schien), nicht ganz unschul­dig. Somit hätten wir rein for­mal eine Patt-Situ­ation, was doch sehr unbe­frie­digend ist, denn sie lässt die Hpt­Fragen offen. Ich gehe jeden­falls bis auf Weite­res von meinen Annah­men und Ergeb­nissen aus, zumal ich die ver­schie­denen Ein­satz­Arten auch auf meh­rere Blätter ver­teilt hatte.
Aber evtl findest ja du (oder jemand anderes) den grund­legen­den Fehler in den ver­schie­denen Test­Ansätzen heraus…
Luc :-?
AW: Die 2.Datei habe ich nicht benötigt, ...
03.11.2016 01:04:33
Daniel
nun Luc, du hast mal wieder übersehen, das ich das mit dem vielen Messen geschrieben habe, als ich nur eine Einzige Wenn-Funktion in der Datei hatte, um deren Verhalten beobachen zu können, ohne irgenwelche Seiteneffekte beachten zu müssen (was nicht da ist, kann auch keine Fehler verursachen).
Aber es war ja dein Wunsch, hier auf eine höhere Anzahl zu gehen, was ich dann auch getan habe.
Trotzdem schien es mir notwendig, jede Zelle einzeln auszuwerten, weil eine Überlagerung der Ergebnisse diese ja wieder hätten verfälschen können.
Das ist auch der Fehler, den ich bei dir vermute, du hast ja auch 45 Zellen, die Ergebnisse produzieren, aber nur 9 Zähler, da muss es zwangsläufig zu überlagerungen kommen.
Desweiteren zähle ich ja nicht nur die DANN-Ereignisse, sondern auch die SONST-Ergeignisse und die Anzahl der Prüfungen. Denn nur im Vergleich diese drei Werte ist eine Aussage darüber möglich, ob DANN und SONST bei jeder Prüfung mit berechnet werden, oder ob nur der Relevante Teil berechnet wird.
Nur das Zählen des DANN-Teils reicht nicht aus um das zu bestimmen.
Das dürfte, neben deiner höcht komplexen und damit fehleranfälligen Programmierweise, der Hauptgrund für dein Falsches Ergebnis sein.
Du zählst zwar die Anzahl der DANN-Ereignisse, aber wenn du nicht geleichzeitig zählst, wie oft die WENN-Funktion tatsächlich berechnet wurde, dann kannst du aus dieser einen Zahl nichts ableiten.
Daher gehe ich nicht von einem Patt aus, sondern sehe es als bestätigt, dass in der Wenn-Funktion in Excel nur der jeweils relevante Teil berechnet wird und nicht beide.
Das deckt sich auch mit den Beobachtungen, die du mit der BEEP-Datei bzw deren Verbesserung mit der Warteschleife (für Computer ohne Ton) machen kannst.
Gruß Daniel
Du berücksichtigst mal wieder nicht, ...
03.11.2016 02:03:41
Luc:-?
…um mal deinen (in einer Fach­Dis­kussion unange­brachten) Ton­fall zu tref­fen, Daniel,
dass …
1. dann ja auch nur der Aufruf des Dann-Teils gezählt wird, alles andere ist schließ­lich ziem­lich uninter­es­sant, denn wenn dieser Teil akti­viert und über .ThisCell einer bestimmten Zelle zuge­ordnet wurde, wird nicht nur der Zähler (neu) initi­iert bzw erhöht, sondern auch ein Identi­fika­tions­Text in die zuständige Variable und einer in das VBE-Direkt­Fenster geschrie­ben. Da von Zeile zu Zeile weiter gezählt wird, wäre es schon ein Riesen­Zufall, wenn sich dabei 1× eine Folge von 1,2,3 mit 2 Lücken (Zellen) und je 1× (Namen/Regeln) eine lücken­lose Folge 1,2,3,4,5 ergäbe, wie das generell und auch erwartet bei specIf der Fall ist. Nur simIf verhält sich genauso, wie du (und hier­für auch ich) es von WENN erwartest — WAHL übrigens auch. Kannst du erklären, warum das so ist? Wo sind da die Über­lage­rungen…? Und komm' mir nicht wieder mit irgend­einem Mysti­zismus!
Anderen­falls müssten wir so etwas wie den Welle-Teil­chen-Dua­lismus anneh­men, wobei wg der Heisen­berg­schen Unschärfe-Rela­tion immer nur das nach­ge­wiesen wdn kann, was man gerade nach­weisen will, also entweder A oder B, nie­mals beides. Aber Quanten­Com­puter ver­wen­den wir ja wohl beide nicht… :-]
2. Meine „höchst komplexe Pgmmier­weise“ dient gerade der Ver­mei­dung von Fehlern und nicht ihrer Ver­ur­sachung! Falls du die nicht ver­stehst, ist das allein dein Problem! Wenn du stets mit relativ ein­fachen Scripts zurecht­kommen woll­test, müsstest du schon Klas­sen­Pgmmie­rung mit Pro­perty-Pro­ze­duren betrei­ben. Kannst du das…?!
3. Das Patt war eher ein aus der Fehler­Ursa­chen-Nach­weis­schwie­rig­keit gebo­renes freund­liches Ange­bot. Da du aber auf deiner Ansicht zu behar­ren gedenkst, musst du schon exakt nach­wei­sen, wo mein Fehler liegt oder wenig­stens (quali­fi­ziert!), wo er liegen könnte (nicht bloß vage Ver­mu­tun­gen, denn du hattest die meinen ja auch abge­lehnt).
Deine Beep-or-Wait-Dateien schienen mir übrigens zu wenig aus­sage­kräftig zu sein.
Gruß, Luc :-?
Es folgt nun die HalloWenn-Grusel-Testdatei
02.11.2016 04:33:21
Luc:-?
Es hat ja nun doch etwas gedauert, Folks,
aber ich hatte dieser Tage wenig Zeit und wollte auch die 1.Reaktionen abwarten. Leider hat sich ja außer Franz und Daniel nie­mand weiter hier zu Wort gemeldet (ich hoffe, dass sich das nun ändert), obwohl ich das für ein inter­essan­tes Thema halte, worüber man als Xl-Anwen­der bescheid wissen sollte, denn daraus ergäben sich gewisse Kon­quen­zen, vor allem, falls meine Annah­men sich als richtig erwei­sen sollten. Auch dazu darf und sollte hier dis­ku­tiert wdn.
Bevor ich die TestDatei hochlade, aber noch einige Hinweise und Erläute­rungen:
TestUmgebung: Xl14/2010 (32b) unter Win10
Generell für alle 3 Blätter:
Im Bas-Modul sind die 3 verwendeten UDFs TestVal, specIf, simIf und 9 globale Zähler sowie 9 globale Protokoll­Text-Variable enthalten. Die Zähler­Indizes beziehen sich in 3er-Gruppen auf die Blätter. Dabei hat jede BlattSpalte ihren eigenen, um Zähl­fehler aus­zu­schließen. Diese laufen von 1 (bzw 0) bis maximal 5 und wdn auf der 1. rele­vanten Zelle bzw bei Errei­chen des maxi­malen End­werts zurück­gesetzt. Dabei wird gleich­zeitig abge­sichert, dass die letzte Zeile nicht über­schritten wird und die durch die Evalu­ierung des 2.Argu­ments von simIf aus­ge­löste 2malige fall­weise Berech­nung des­selben die Zählung nicht ver­fälscht. Das wird alles von der UDF TestVal reali­siert, der auch ein (kom­plexes) Argu­ment mit­ge­geben wdn kann (hier eine kumu­la­tive Summe über Spalte A), so dass die beiden anderen wie eine normale Fkt agieren können. TestVal füllt nicht nur den jewei­ligen Zähler, sondern auch die Proto­koll­Var­iable mit Blatt­Namen, Zell­Adresse, Zäh­ler­stand und dem Ergeb­nis der Kumu­lation. Außer­dem wird zum Vgl noch ein Text über Debug.Print ins Direkt­Fenster des VBE aus­ge­geben, aus dem bei auto­mati­scher Berech­nung die Berech­nungs­Reihen­folge ersicht­lich ist (wird nicht gelöscht!).
Die UDF specIf soll das Verhalten einer normal kon­stru­ierten UDF (als WENN-Ersatz), die UDF simIf das einer am WENN-Ver­hal­ten in Zell­Fmln orien­tier­ten Fkt in der jewei­ligen Umge­bung demon­strieren.
Auf jedem Blatt befindet sich ein Protokoll­Bereich. Vor jedem neuen Test­Versuch sollte durch Doppel­Klick auf Proto­kolle sicher­ge­stellt wdn, dass die beiden Global­Variab­len leer sind (nur für das jewei­lige Blatt aus­ge­legt!). Mit Rechts­Klick wdn nach der wie üblich oder per Einzel­schritt ver­an­lassten Neu­Berech­nung die Proto­koll­Daten aus­ge­geben. Das steht zur Sicher­heit auch auf jedem Blatt. Falls alles richtig abge­lau­fen ist, sollten diese Texte den mar­kierten Bereich nicht über­schreiten.
In den Cls-Modulen der Blätter sind iW nur die beiden Ereignis­Proze­duren ent­halten, die das Löschen der Global­Variab­len und die Aus­gabe der Proto­kolle besorgen.
Blatt1 Zellen:
Hier wird das Verhalten der 3 Fktt in ZellFmln mit­ein­ander vgln. Zusätz­lich sind auf diesem Blatt noch 2 wei­tere Zeilen ent­halten, die aus ersicht­lichen Grün­den nicht in die Zäh­lung ein­be­zogen wdn und nur zeigen sollen, dass beide UDFs sich anson­sten genau wie WENN ver­halten (leeres Argu­ment 2 bzw 3 → 0, fehlendes Argu­ment3 → FALSCH).
Blatt2 Namen:
Diesem Blatt sind 3 Namen zugeordnet, die dieselben Fmln wie in Blatt1 enthalten, nur zei­gen hier die 2.Argu­mente der UDF TestVal die für dieses Blatt vor­gesehenen Zähler- und Proto­koll­Indizes. In den Zellen stehen dann natür­lich nur Ver­weise auf die Namen der benann­ten Fmln.
Blatt3 Regeln:
Diesem Blatt ist ein Name zugeordnet, der simWenn in Blatt2 gleich ist und auch die gleiche Fml reprä­sen­tiert, die aber als 2.Argu­ment von TestVal eine 8 enthält (der entsprd Zähler-/Proto­koll­Index). Ich habe hier sicher­heits­halber eine benannte Fml als Regel­Fml ver­wendet, um Xl wg der ent­hal­tenen Evalu­ierung nicht zu evtllem Absturz zu provo­zieren. Das dürfte das Ergeb­nis nicht ver­fäl­schen, da simIf ohne­hin nur dann das 2.Argu­ment berech­net, wenn das Rechen­Ergeb­nis von Argu­ment1 entsprd aus­fällt.
Die WENN- und die specIf-Fmln wurden dagg direkt in die Regel ein­ge­tragen. Alle Regeln wurden um einen Vgl der 1.Ergebnis­Ziffer mit 3 ergänzt. Ergibt das WAHR, wird die entsprd Zelle rot gefärbt.
Abschließende Bemerkung:
Es sollte sich auf allen Blättern das gleiche Bild ergeben, wie im Start-Thread gezeigt!
Beachtenswert an den Spalten D des Protokolls ist insbesondere, dass die Evalu­ierung 2× durch­ge­führt wird (hätte ich {Application.}Evaluate ver­wendet, würde sie sogar 4× durch­ge­führt, wenn man diver­sen INet-Berich­ten ver­trauen will). Dabei zeigt sich, dass dann stets Zelle A1 eines Blattes als Application.ThisCell ange­nommen wird. Da der Zähler in diesem Fall mit 0 beginnt, „hinkt“ er hier immer um 1 hin­ter­her. Das macht diese irre­levan­ten, aber nicht zu ver­meiden­den Texte zusätz­lich kenntlich.
In der Hoffnung auf etwas vielstimmigere Resonanz — viel Erfolg beim Ausprobieren der hier zu findenden Datei!
Morrn, Luc :-?
PS: Hoffentlich geht diese wichtige Datei nicht mal wieder auf dem Server verloren. Falls doch, dann bitte mir mitteilen!
Wichtiger Hinweis für Nachnutzer u.Anderes
02.11.2016 12:51:45
Luc:-?
Achtung! Die VBA-Prozeduren in der obigen Datei sind allein für die Testung der behan­del­ten Thematik bestimmt. Sie sind auf die Formate der einzelnen Datei­Blätter abge­stimmt und können deshalb idR nicht ander­weitig (außer als Anre­gung) nach­ge­nutzt wdn!
In den (benannten) Fmln der Blätter Namen und Regeln habe ich vergessen, das Semi­kolon für das 2.Argument nach­zu­tragen. Das ist aber beim Blatt Namen ohne­hin irre­levant und schadet beim Blatt Regeln nicht weiter, nur wird bei Auswahl dieses Argu­ments ein Fehler­wert statt FALSCH durch den Vgl mit 3 erzeugt.
Falls sich im Autokalkulations­Modus nicht die richtigen Zähler ein­stellen wollen, hilft Löschen der Global­Variablen, anschlie­ßende Aus­wahl jedes Spalten­Bereichs für sich und Edit-Klick in die aktive Zelle → also Test im Einzel­Schritt­Modus. Im Blatt Regeln reicht ggf das Anklicken einer Zelle oder einer Regel­Fml, ggf in jedem Spalten­Block extra.
Luc :-?
Der Grusel geht weiter - als 'HalloWahl'!
02.11.2016 13:10:48
Luc:-?
Hi, Folks;
inzwischen habe ich mal mit WAHL experimentiert, in Zell- und benannten Fmln. Und siehe da, wieder eine Über­raschung! Diese XlFkt scheint in beiden Fällen bei einfachem Argu­ment1 in beiden Fällen genau gleich zu fktionieren, und zwar so, wie es Daniel für WENN erwartet hatte!
Ich hätte ja eher vermutet, dass immer alle Auswahl­Argu­mente berechnet würden, weil es ja auch eine Matrix­Fml-Variante davon gibt, die mehrere oder unter bestimm­ten Bedin­gungen sogar alle zurückgeben kann. Aber mög­licher­weise erkennt und berück­sich­tigt die Xl-Steuerung das und ggf rück­wirkend auch in benannten Fmln.
Ganz schön verrückt…!
Gruß, Luc :-?
Jetzt wirds richtig gruselig
03.11.2016 13:44:15
Daniel
Nachdem ich jetzt etwas zeit hatte, mich mit deiner Datei zu beschäftigen und dazu erstmal:
- überflüssige Messreihen (du weißt ja, wer viel mißt mißt Mist)
- unnötige Funktionen (du hast ja gesagt, zu viel VBA ist nicht gut)
um die Datei auf die Kernfrage, - wie verhält sich WENN in der Bedingten Formatierung - , zu reduzieren und damit das wesentliche sichtbar zu machen, ist mir folgendes aufgefallen:
1. dein Zähler ist eigentlich unwichtig (daher werde ich ihn nicht weiter betrachten), die entscheidende Information liefert das Protokoll, welches Dokumentiert in welchen Zellen die Berechnung durchgeführt wurde
2. Deine Protokollmethode unterscheidet sich nicht von den Protokollmethoden, die ich bereits (auch in älteren Dateien zm Thema) verwendet habe:
- mitschreiben der Formelzelle in einer "globalen" Variable" und per Debug.Print
von daher gehe ich davon aus, dass deine Datei in bezug auf das Protokoll das richtige Ergebnis liefert (und was der Zähler macht ist daher egal)
Jetzt stellt sich natürlich die Frage, warum wir beide zu unterschiedlichen Ergebnissen kommen, obwohl wir beide im Prinzip die selbe Mess- und Dokumentationsmethode verwenden?
ein paar Experimenten mit deiner Datei ist mir dabei folgendes aufgefallen:
Im Prinzip haben wir beide Recht.
Excel berechnet in machen Fällen tatsächlich den DANN-Teil, auch wenn die Prüfung FALSCH ergeben hat und in machen Fällen wird der DANN-Teil nur berechnet, wenn die Prüfung WAHR ergeben hat.
Ausschlaggebend dafür wie gerechnet wird, scheint die Prüfung zu sein.
Du verwendest als Prüfung die Formel: $A2=KKLEINSTE($A$2:$A$6;ZEILE($A1))
in diesem Fall wird tatsächlich der DANN-Teil auch dann berechnet, wenn die Prüfung FALSCH ergeben hat.
Verwendet man jedoch eine etwas weniger komplexe Formel, wie z.B. ISTUNGERADE($a2) (welches in der von dir verwendeten Zahlenfolge das gleiche Ergebnis liefert wie deine KKleinste-Formel) oder lagert die Formel in eine Hilfsspalte aus und referenziert nur auf diese, dann wird der DANN-Teil nicht berechnet, wenn das Prüfungsergebnis FALSCH ist.
Hier die Beispieldatei mit den entsprechenden Veränderungen.
Nicht benötigte Bestandteile und Codes habe ich gelöscht.
die Codes für TestVal und die Protokollmakros sind unverändert.
Entscheidend ist das Protokollergebnis.
in den Zeilen 3 und 5 ist in allen Spalten das Ergebnis der Prüfung in der WENN-Funktion FALSCH
im Protokoll kommen die Zellen C3, D3, C5 und D5 nicht vor, dh in diesen Zellen wird der DANN-Teil nicht berechnet.
https://www.herber.de/bbs/user/109176.xlsm
(ich hoffe Luc, dass du dieses Ergebnis aktzeptierst, da ich ja deine Protokollmethode übernommen habe)
Gruß Daniel
Ja, natürlich, ...
04.11.2016 03:49:00
Luc:-?
…Daniel,
und es war eigentlich nur ein glücklicher Zufall, dass ich eine solche Prüf­Bedingung gewählt hatte, sonst wären wir beide von vorn­herein zum gleichen Ergebnis gekommen und hätten gar nicht bemerkt, was nun sichtbar geworden ist. Ich hatte ja mit solch sim­plen Kon­strukten begonnen, sie dann aber wg deines Einwands im Zusammen­hang mit BedFmt­Regeln im anderen Thread derart erweitert, um so heraus­zu­finden, wie tolerant Xl sich ggüber Bereichen (und Daten­feldern) trotz besagter Verbots­meldung verhält. In meiner neuen, hier jetzt gezeigten und hoch­ge­ladenen Test­Datei habe ich das dann ein­fach bei­be­halten.
Das erklärt auch das Ver­halten von WAHL, um die ich die Datei inzwi­schen erwei­tert hatte. In dessen Fml hatte ich nämlich eine ganz ein­fache Aus­wahl­Bedin­gung ver­wendet. Jetzt habe ich noch eine Variante mit kom­plexerer Bedin­gung hinzu­ge­fügt und siehe da, gleicher Fall wie bei WENN.
Letztlich ist eine Fml ja nur ein Text, der von Xl inter­pre­tiert wdn muss. Dabei kommt es bei Ver­zwei­gungs­Fktt offen­sichtlich auf deren Steue­rungs­Argu­ment an. Ist das kom­plex, wdn auch alle anderen Argu­mente berechnet. Ich habe auch schon eine Vor­stel­lung dazu ent­wickelt, zumal ich seit einiger Zeit an einem ähn­lichen Text­Inter­pre­ta­tions­System arbeite, das ich ursprüng­lich zu Halloween „ent­rätseln“ lassen wollte. Aber durch unsere Dis­kussion bin ich zu dem Schluss gelangt, die bereits vor­ge­sehenen Ent­schei­dungs­Ele­mente anders in die Gesamt­Struktur ein­zu­binden, um gleiche Effekte, wie ubU mit WENN bzw WAHL erreich­bar, zu erzielen.
Um das alles jetzt näher aus­zu­führen, ist es schon zu spät. Deshalb ver­schiebe ich meinen aus­führ­lichen Kom­men­tar auf später (könnte uU auch erst abends sein).
Jetzt nur soviel, es kann also weder Patt noch Matt kon­sta­tiert wdn und Xl ist immer für eine Über­ra­schung gut! ;-)
In diesem Sinne, GuNa bzw Morrn, Luc :-?
Weder Patt noch Matt
04.11.2016 07:53:13
Daniel
Luc schieb:
Ich hatte ja mit solch sim­plen Kon­strukten begonnen, sie dann aber wg deines Einwands im Zusammen­hang mit BedFmt­Regeln im anderen Thread derart erweitert, um so heraus­zu­finden, wie tolerant Xl sich ggüber Bereichen (und Daten­feldern) trotz besagter Verbots­meldung verhält.
und trotzdem ist dir nicht in den Sinn gekommen, dass die Formel der Prüfung für unsere unterschiedlichen Untersuchungsergebnisse verantwortlich sein könnte.
Ich verbuche das daher mal als Punktsieg für mich.
Gruß Daniel
Wieso? Dadurch sind wir ja erst auf die nun ...
04.11.2016 20:55:58
Luc:-?
…vorliegenden Erkenntnisse gestoßen, Daniel!
Daraus lassen sich Schlussfolgerungen ziehen, die deine Aussagen im anderen Thread bzgl WENN in BedFmtRegeln relativieren. Insofern könnte ich genausogut einen PktSieg verbuchen wollen, was ich aber nicht tue, denn wichtig ist hier nur die Erkenntnis, wie der Fml-Interpreter der Xl-Steuerung arbeitet, d.h., mit einfachen FmlStrukturen anders umgeht als mit komplexen.
Die unterschiedliche FmlForm war mir aber tatsächlich in den (Denk-)Hintergrund geraten, denn immerhin hattest du ja ein Immer für WENN beansprucht, dieses Verhalten also (nachlesbar!) an der Fkt WENN und ihrem Pgm festgemacht und nicht an einen Fml-Interpreter, also ein übergeordnetes Pgm (so wie ich), gedacht!
Ich habe mir dazu inzwischen eine Meinung gebildet — du auch…?!
Dazu später mehr.
Luc :-?
AW: Wieso? Dadurch sind wir ja erst auf die nun ...
07.11.2016 23:21:50
Daniel
Ich bin vor dir darauf gekommen, dass es von der Formel im ersten Parameter abhängt, ob alle Parameter oder nur der relevante berechnet werden, das werte ich mal als Punktsieg.
Hättest du dir mal meine Beobachtungen (und nicht meine Schlußfolgerung!) genauer angeschaut und überprüft anstatt sie einfach als "unsinn" abzutun, wäre es dir wahrscheinlich schon vor mir aufgefallen.
Um sich über das Verhalten von Excel in diesem Fall eine Meinung bilden zu können, ist die Datenlage noch zu dünn, da müsste man noch ein paar Versuchsreihen durchführen um genau abzugrenzen, in welchen Fällen alle Folgeparameter berechnet werden und in welchen nicht. (siehe hierzu auch meine Fortsetzung)
Aber um mir eine Meinung über dich bilden zu können, hast du einige Bausteine geliefert.
Gruß Daniel
Fazit des Verhaltens von WENN und WAHL
05.11.2016 04:11:38
WENN
Hallo, geneigte Mitleser und die wenigen (2!) Mitdiskutanten;
ich habe, wie bereits mitgeteilt, die hier abruf­bare Test­Datei um 2 Spalten pro Blatt für die XlFkt WAHL mit je einer ein­fachen und einer kom­plexen Auswahl­Bedin­gung erwei­tert. Für diese gelten sinn­gemäß die gleichen Hin­weise und Erläu­te­rungen wie für die 1.Test­Datei (nur mit WENN & Co)!
Letztlich ist eine Fml erstmal nur ein Text, der von Xl als Berech­nungs­Algo­rithmus erkannt und richtig inter­pre­tiert wdn muss, um danach berech­net wdn zu können. Zur Erken­nung dient das füh­rende Gleich­heits­zei­chen, das hier einem :=, also einem Ergibt-sich-aus-Zei­chen, entspricht. Die in einem Pgm erfor­der­liche Variable links davon ent­fällt bei XlFmln, weil hier immer die Zelle gemeint ist, in der die Fml notiert wurde. Diese zeigt dann auch das Fml­Ergeb­nis anstelle der Fml an.
Da die Fml eigentlich eine Rechen­Anwei­sung in Text­form ist, muss sie erst von Xl inter­pre­tiert wdn. Dazu ent­hält die Xl-Steue­rung einen Fml­Text-Inter­preter, der die ein­zel­nen Teile einer Fml in aus­führ­bare Befehle umsetzt. Dabei muss er idR Fol­gen­des unter­schei­den bzw erkennen:
1. Einfache Operationen mit Operanden, die per Operator mitein­ander ver­knüpft sind.
2. Einfache Operanden als Einzel­Zell­Bezug oder (ggf diskreter) Bereich, skalare Werte (ggf Kon­stan­ten) und Daten­felder (aus Aus­drücken, die als Matrix­Kon­stante oder Teil­Fml auf­treten kön­nen) und Fkts­Ope­randen, also XlFktt wie zB SUMME und benut­zer­de­fi­nierte Fktt (UDFs).
3. Dabei muss in der jeweils rich­tigen Reihen­folge, die ggf auch durch Klam­me­rung bestimmt wird, vor­ge­gangen wdn. Hat bspw eine Fkt in einer Fml Aus­drücke als Argu­mente, müs­sen idR erst diese berech­net wdn bevor die ganze Fkt berechnet wdn kann.

XlFktt wie WENN und WAHL spielen hierbei eine beson­dere Rolle, denn sie sind quasi Ver­teiler, die anhand ihres 1.Argu­ments eine Aus­wahl* unter ihren Folge­Argu­men­ten treffen. Sie ent­sprechen pgm­algo­rith­mi­schen Kon­struk­ten wie If…Then…Else… bzw Select Case … oder mathe­mati­schen Schreib­weisen, die hinter einer großen {-Klam­mer meh­rere Ergeb­nis-, Zuwei­sungs- oder Zustands­möglich­keiten auf­führen.
In der voranstehenden Unter­suchung wurde nun fest­ge­stellt, dass immer zuerst dieses beson­dere Argu­ment der genann­ten Fktt inter­pre­tiert und aus­ge­wertet wird, wobei es zu unter­schied­lichem Ver­halten des Inter­preters im Tab­Blatt und in benann­ten Fmln bzw Bedingt­Format-Regel­Fmln kommen kann, was wohl mit der gene­rell unter­schied­lichen Behand­lung von Zell- und allen anderen Fmln zusam­men­hängen wird.
So wdn benannte Fmln idR immer vollständig berech­net, was man sehr gut bei Matrix­Fmln erken­nen kann, da hier die Kenn­zeich­nung als solche ent­fällt. Welche ihrer mit­unter mehre­ren Ergeb­nisse dann weiter­ver­wen­det oder mit­unter auch berech­net (falls Varian­ten mög­lich sind) wdn, wird durch den Ein­satz­ort ihres Namens bestimmt. Eine Aus­nahme bilden hier­bei die geteste­ten Fktt, wenn ihr zuerst berech­netes Argu­ment keine Bereichs­bezüge oder Daten­felder ent­hält. Wdn diese aber hier ver­wendet, wdn alle anderen Argu­mente eben­falls berech­net, auch wenn das Ver­tei­ler-Argu­ment letztlich nur einen Wert liefert. Das mag vor allem damit zusam­men­hängen, dass der Inter­preter nicht sofort ent­scheiden kann, welches der Folge­Argu­mente benö­tigt wird und wg anzu­neh­men­der Paral­lel­Ver­ar­bei­tung aus Per­for­mance­Grün­den alles berech­net wird. Hinzu mag kommen, dass bei benann­ten und Regel­Fmln von einer Mehr­fach­Ver­wen­dung dieser (Teil-)Ergeb­nisse aus­gegan­gen wird.
Eine ZellFml wird dagg wohl als Solitär betrach­tet, womit das Abwarten der Berech­nung dieses Argu­ments eher von Vor­teil sein kann.
Folglich sollte man sich genau über­legen, ob und wie bzw wann man WENN, WAHL und mög­licher­weise ähn­lich rea­gie­rende Fktt in benann­ten und Regel­Fmln ein­setzt. Davon sind andere Fml­Teile nicht betrof­fen, so dass ein Ersatz in einer Fml mehr­fach benö­tigter Teil­Fmln durch benannte Fmln einen Vor­teil bzgl der Fml­Über­sicht­lich­keit bringen kann; einen Per­for­mance-Gewinn wird man aber eher nicht davon haben, da anzu­nehmen ist, dass der Fml-Inter­preter iden­tische Fml­Teile ohne­hin nur 1× zur Berech­nung über­stellt. Das müsste aller­dings noch nach­ge­wie­sen wdn.
Eine SonderRolle scheinen hierbei Bedingt­Format-Regel­Fmln zu spie­len. Die Test­Ergeb­nisse legen näm­lich nahe, dass sie viel öfter neu berech­net wdn, als zu ver­muten war. Es könnte aller­dings auch mit an der Ver­wen­dung immer der­selben Zähl- und Protokoll-UDF gelegen haben…
Eines ist aber ohnehin von Anfang an klar gewesen — eine UDF wird von Xl keiner der­artigen Son­der­Behand­lung unter­zogen, son­dern wie eine normale Fkt inter­pre­tiert, egal, ob sie eine WENN- oder WAHL-Fkt nach­bildet oder nicht. Wollte man mit einer UDF an jedem Ein­satz­ort und mit jeder Prüf­Bedin­gung ein dem Ver­halten von WENN in Zell­Fmln ana­loges Ergeb­nis erzie­len, müsste man den Fml-Inter­preter über­listen, zB so wie von simIf gezeigt, wobei ggf auch anderes mög­lich wäre.
Morrn, Luc :-?
______________
* Das Verhalten von XlFktt wie das neue WENNS oder die Phalanx der ~WENNs-Fktt wurde hier nicht unter­sucht. Xl-Fktt, die mit einem ähn­lich anmu­tenden Argu­ment keine Aus­wahl unter den eige­nen Argu­menten (zB TEILERGEBNIS u.AGGREGAT) treffen, dürften nicht hier­unter fallen.
Mitteilung an die Nachleser
07.11.2016 23:35:43
Luc:-?
…Daniel hat es vorgezogen, einen neuen Thread aufzumachen, weil man hier ja angeblich nicht mehr antworten kann, obwohl er (oder sein Doppelgänger) das letztens auch schon gemacht hatte. Der ist dann hier oder dort zu finden.
Luc :-?
AW: Mitteilung an die Nachleser
08.11.2016 00:18:07
Daniel
Nun ja Luc, dass ist ein kleiner Service von mir an die Menschen, die nur die Forumsliste nutzen und nicht die Beitragsliste.
Und ein paar mehr Mitdiskutierende würden dich doch auch erfreuen.
Worauf begründest du eigentlich deine Annahme, dass ich nicht wüsste, dass man im alten Thread noch antworten kann?
Nur weil ich einen neuen Thread aufgemacht habe?
Gruß Daniel
Nee, das habe ich dir ja nun gerade nicht ...
09.11.2016 19:02:16
Luc:-?
…unterstellt, Daniel,
und stammt aus einem anderen Thread (bei dem das sogar stimmte), mich aber gewundert, warum du hier nicht auch 'nen Link für Nachleser gesetzt hattest.
Im Vorgänger-Thread, in dem man ja nun tatsächlich auch nicht mehr antworten kann, konntest du dir ja auch nicht verkneifen, mir noch was zu unterstellen… :-]
Luc :-?
Korrektur zur Fortsetzung
14.11.2016 17:15:22
Luc:-?
…Der Thread wurde real nicht unter der o.g. Adresse (Doppel), sondern letztendlich hier fortgesetzt.
Luc :-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige