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

Verständnisfrage Matrxiformeln

Verständnisfrage Matrxiformeln
13.12.2020 18:54:46
Michael
Hallo zusammen,
ich habe eine tiefergehende Frage zum Thema Matrixformeln: Wann wird ein Array bzw. ein Bereich in einem Array schleifenartig durchlaufen und wann nicht.
Beispiel: {=KGRÖSSTE(B15:B26;ZEILE(1:5))}
Hier werden ja die Werte von 1 bis 5 schleifenartig durchlaufen, der Bereich B15 bis B26 als Ganzes gesehen.
Beim S-Verweis mit 2 Kriterien wird ja anscheinend auch wieder jede Zeile einzeln betrachtet (also wenn z. B. in C3 "Michael" steht, dann wird als Matrix ja auch nur der Bereich B3 bis D3 genommen und nicht B3 bis D5, korrekt?)
=SVERWEIS("Hamburg";WENN(C3:C5="Michael";B3:D5;““);3)
(Demo-Datei: https://www.herber.de/bbs/user/142292.xlsx)
Falls jemand meine Verwirrung verstehen kann und eine gute Erklärung parat hat, würde ich mich sehr freuen.
Beste Grüße und vielen Dank im Voraus
Michael

41
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verständnisfrage Matrxiformeln
13.12.2020 19:29:00
onur
"der Bereich B15 bis B26 als Ganzes gesehen. " - nicht, wenn du es so schreibst, wie du es tust.
Wenn du die 5 grössten auflisten willst (DAFÜR ist die erste Formel da), musst du schon mit absoluten Bezügen arbeiten - zumindest bei den Zeilennummern - und die Formel 4 Zeilen herunterkopieren.
=[KGRÖSSTE($B$15:$B$26;ZEILE(1:5))}
AW: Verständnisfrage Matrxiformeln
13.12.2020 19:39:39
Michael
Hmm funktioniert bei mir auch ohne die $-Zeichen für die absoluten Bezüge. Markieren ja alle 5 Zellen auf einmal bei der Eingabe der Matrixformel. Aber trotzdem Danke!
Hast du noch Input für meine eigentliche Frage?
Beste Grüße
AW: Verständnisfrage Matrxiformeln
13.12.2020 19:44:07
onur
Das ist Blödsinn bzw nur dann der Fall, wenn die Zahlen zufällig aufsteigend sortiert waren.
Anzeige
AW: Verständnisfrage Matrxiformeln
13.12.2020 19:48:31
Michael
Ich kann dir gerne die Arbeitsmappe schicken vor der ich sitze, und in welcher die Zahlen NICHT aufsteigend sortiert sind.
Aber ist ja auch egal, ging ja um ein anderes Thema. Hast du dazu Input ohne nicht? Sonst wirkt das von deiner Seite wieder wie einer dieser Klugscheißer-/Pöbel-Kommentare wie beim letzten Mal und einigen anderen Fragen hier ;)
AW: Verständnisfrage Matrxiformeln
13.12.2020 19:53:28
onur
Nee, du bekommst von mir nix, denn du weisst ja offenbar schon alles . :))
Abgesehen davon: Wer WIRKLICH "EXCEL gut" ist, braucht keine Hilfe von einem Forum, und wer wirklich Hilfe braucht, sollte statt Arroganz mehr Bescheidenheit und Demut üben und NICHT AUCH NOCH SICH ALS ASOZIAL OUTEN, IN DEM ER HELFER BELEIDIGT !!!
Anzeige
AW: Verständnisfrage Matrxiformeln
13.12.2020 19:58:45
Michael
1. Habe ich nie behauptet, ganz im Gegenteil: Ich möchte lernen, aber halt nicht angepöbelt werden (machst du ja oft)
2. Die Logik kann ich immer noch nicht nachvollziehen. Die andere Möglichkeit wäre die Angabe "Excel-Basiskenntnisse", über diese bin ich einfach hinaus. Mit Basiskenntnissen könnte ich nicht einmal die Frage stellen, die ich gestellt habe.
3. Was ist asozial daran sich dagegen zu wehren, dass man grundlos angepöbelt wird? Außerdem: Du bist ja gar kein Helfer (könntest aber wohl einer sein, auskennen tust du dich ja denke ich mal)
4. Warum machst du das eigentlich alles? Muss man sich so gegenüber anderen verhalten, nur weil man mehr weiß?
Anzeige
AW: Verständnisfrage Matrxiformeln
13.12.2020 20:04:14
Michael
Danke, war bei mir aber trotzdem nicht absteigend sortiert, aber jetzt weiß ich was du meinst. Könnte man aber wie gesagt auch anders kommunizieren ;)
AW: Verständnisfrage Matrxiformeln
13.12.2020 20:10:24
Michael
PS: Wobei, doch nicht klar, wie schreiben wohl aneinander vorbei. Ich hatte ja geschrieben, dass ich die Formel NICHT runterziehe, sondern direkt auf alle 5 Zellen anwende, daher steht bei mir auch in allen 5 Zellen ...ZEILE(1:5)...
AW: Verständnisfrage Matrxiformeln
13.12.2020 20:17:53
onur
Dann haben wir wohl die ganze Zeit aneinander vorbeigeredet.
Nix für Ungut, aber gewöhne dir trotzdem ab, HELFER zu beleidigen, bloss weil sie dich KRITISIEREN.
"Das ist Blödsinn" war vielleicht übertrieben, aber keine Bleidigung, aber KLUGSCHEISSER ist es schon!
Anzeige
AW: Verständnisfrage Matrxiformeln
13.12.2020 20:21:19
Michael
Ok, darauf können wir uns einigen. Dann sage ich: tut mir Leid! aber wie du ja schon selbst erkannt hast: dein Ton war auch sehr unangemessen.
AW: Verständnisfrage Matrxiformeln
13.12.2020 20:26:02
Michael
PS: Habe dich übrigens nie als Klugscheißer bezeichnet, das habe ich nochmal nachgeschaut. Aber, dass von dir Klugscheißer-Kommentare kommen hatte ich tatsächlich geschrieben. Aber wie gesagt: Lass uns das Kriegsbeil begraben. Bringt ja nichts ;)
ZEILE(1:5) ist Quatsch
13.12.2020 19:54:24
WF
=KGRÖSSTE(B$15:B$26;ZEILE(X1))
das ist auch keine Arrayformel, sondern ein Normalo.
WF
AW: ZEILE(1:5) ist Quatsch
13.12.2020 20:00:18
Michael
Hallo WF,
ich möchte ja aber die höchsten 5 Werte zurückgegeben habe ;)
runterkopieren natürlich
13.12.2020 20:16:42
WF
und zu Deiner Ursprungsfrage
Da nimmt man INDEX und Doppel-VERGLEICH als Arrayformel
{=INDEX(D:D;VERGLEICH("Michael"&B2;C:C&B:B;0))}
WF
Anzeige
AW: runterkopieren natürlich
13.12.2020 20:19:11
Michael
Hallo WF, danke für deine Antwort.
Der doppelte S-Verweis funktioniert ja wunderbar ;) Ich verstehe ja nur nicht die genaue Funktionsweise, bzw. wieso diese sich ständig zu unterscheiden scheint. Weisst du was ich meine ;)
AW: ZEILE(1:5) ist Quatsch
14.12.2020 20:21:14
Daniel
Wenn man die größten 5 Werte haben will, kann man entweder 5 normale Formeln, die jeweils ein Ergebnis ausgeben, verwenden, oder man verwendet eine Matrixformel, die 5 Ergebnisse ausgibt.
Beides funktioniert.
Die Normalo-Variante erzeugt etwas mehr Rechenaufwand, da es eben 5 einzelne unabhängige Formeln sind.
Daher kommt die Matrixvariante auch ohne absolute Zellbezüge aus, weil nicht die Formel in die restlichen 4 Zellen kopiert wird, sondern die 4 weiteren Zellen nur für die Ergebnisausgabe der einen Formel verwendet werden.
Bei großen Tabellen kann man daher die Performance der Datei etwas verbessern, wenn man für Massenbetechnungen eine Matrixformel anstelle vieler Einzelformen verwendet.
Außerdem hat man einen gewissen Schutz vor versehentlichen Überschreiben von einzelnen Zellen, weil man zum Ändern erst alle Zellen die zur Formel gehören markieren muss.
Gruß Daniel
Anzeige
wobei, hast recht
14.12.2020 21:06:08
Daniel
ich hab grad nochmal nachgetestet.
obwohl es nur eine Formel ist, braucht das Matrixkonstrukt doppelt so lange die die entsprechende Anzahl einzelner Formeln.
Bleibt also nur die Vorteil des rudimentären überschreibschutzes für die Matrixformel.
(getestet mit Excel 2016, wobei nicht auszuschließen ist, dass in anderen Excelversionen und anderen Formeln das Ergebnis anders ausfällt.
Gruß Daniel
AW: ZEILE(1:5) ist Quatsch
14.12.2020 21:06:28
Michael
Vielen Dank für deine sehr interessanten Infos Daniel! Der Vorteil war mir nicht bekannt!
AW: ZEILE(1:5) ist Quatsch
14.12.2020 21:31:44
Daniel
siehe bitte meinen Nachtrag zur Performance.
ich hatte das eigentlich anders erwartet.
Anzeige
AW: ZEILE(1:5) ist Quatsch
14.12.2020 21:34:06
Michael
Alles klar, vielen Dank, dass du nochmal geschrieben hast!
Das ist so nicht ganz richtig:
13.12.2020 20:32:12
lupo1
Verwende ich statt einer herunterzukopierenden Arrayformel
C1: {=KGRÖSSTE(B$1:B$30;ZEILE())}
ein Formelarray
C1:C5: {=KGRÖSSTE(B1:B30;ZEILE(B1:B5))}
kommt die Formel ohne $ aus. Das Formelarray wird auf den 5 Zellen zusammen abgeschlossen. Übe das mal!
AW: Das ist so nicht ganz richtig:
13.12.2020 20:36:26
Michael
Hallo lupo,
ein Formelarray hatte ich bereits genutzt. Habe hier wohl das falsche Wording gewählt ;)
Danke dir!
Hast du noch einen Antwort auf meine ursprüngliche Frage? Würde mich mega freuen :)
Anzeige
Du meinst SVERWEIS?
13.12.2020 20:47:13
lupo1
Da ist bei Dir was schiefgelaufen.
Ein WENN für den Suchbereich muss anstelle von "" ein anderes SONST bieten.
WF hat außerdem die angebrachte Alternative mit VERGLEICH gebracht. SVERWEIS kann nicht mit zwei Suchfeldern. Außerdem verschweigt es den Fundort, so dass Du zu dem keinen Offset starten kannst.
Von daher ist SVERWEIS eher selten Deine Wahl.
AW: Du meinst SVERWEIS?
13.12.2020 21:28:40
Michael
"Ein WENN für den Suchbereich muss anstelle von "" ein anderes SONST bieten."
Aber die Formel funktioniert doch oder sehe ich das falsch? Mir geht es garnicht darum eine Alternative kennenzulernen, ich möchte ja meine aktuelle Formel verstehen ;)
Aber du hast natürlich Recht: Diese Formel des doppelten-S-Verweises habe ich auch eher selten gesehen, oft wurd nocht WAHL verwendet.
Anzeige
Also Deine Formel funktioniert so nicht
13.12.2020 22:54:18
lupo1
... denn wenn noch ein Hamburg später folgt, wird der kombinierte Hamburg-Michael nicht gefunden.
Mit =SVERWEIS("Hamburg";WENN(C3:C9="Michael";B3:D9;"");3;) klappt es dann (ob Du den Unterschied findest?).
Du darfst hier bitte nie eine Formel mit typographischen Anführungszeichen posten! Immer nur die, die Du in meiner Formel siehst.
AW: Das ist so nicht ganz richtig:
13.12.2020 20:47:08
Michael
Hallo Lupo,
genau dieses Formelarray habe ich auch genutzt, das nächste Mal nehme ich gleich das richtige Wording. Danke dir!
Hast du zufällig eine Antwort für meine Ausgangsfrage parat? Wäre mega :)
Bitte immer zuerst in d. Beitragsliste nachschauen
13.12.2020 20:49:48
lupo1
... bevor Du einen Beitrag nochmal sendest (weil Du etwa z.B. an Dir selbst zweifelst, ob Du den ersten abgeschickt hattest).
Da steht der erste Beitrag eigentlich immer drin. Und manchmal braucht es ein paar Minuten bis ins Forum.
AW: Bitte immer zuerst in d. Beitragsliste nachschauen
13.12.2020 21:29:16
Michael
ok, nehme ich mir zu Herzen ;)
Leider warst du zu schnell auf der Palme, ...
14.12.2020 03:53:27
Luc:?
…Onur,
und hast so die Bodenhaftung verloren. Was Michael hier zeigt, ist eine plurale MatrixFml, der eigentliche und ursprüngliche Zweck von MatrixFmln, der mit der verstärkten und hier zumeist zelebrierten Nutzung singularer MatrixFmln, die ja ebenfalls möglich, aber als Ersatz pluraler MatrixFmln unökonomisch sind, in Vergessenheit geraten zu sein scheint.
Bei einer pluralen (oder dualen) MatrixFml wählt man zuerst einen für die Ergebnisse genügend großen Bereich, trägt dann in dessen 1.Zelle die Fml ein und schließt wie bekannt ab. In allen Zellen steht dann dieselbe Fml, aber natürlich mit den entsprd richtigen Ergebnissen. Lt deinem Bsp dann so (hier als MatrixKonstante notiert): F15:F19: {825;120;55;33;25}
Die zugehörige plurale MatrixFml sieht dann so aus: F15:F19: {=KGRÖSSTE(B15:B26;ZEILE(1:5))}
Morhn, Luc :-?
Noch jemand der WIRKLICH helfen kann
13.12.2020 20:13:34
Michael
Würde mich freuen, wenn hier noch jemand ist, der wirklich helfen kann.
Btw gib es eigentlich eine Möglichkeit ein Mitglied zu blockieren, dass kein Interesse hat zu helfen und beleidigend/persönlich wird. Onur hat sich leider als sehr "schwierige" Person erwiesen.
Hier kann niemand blockiert wdn, ...
14.12.2020 05:17:42
Luc:?
…Michael,
weil das der Hausherr, der ein Anhänger des Freien Internets ist und davon ausgeht, dass hier Erwachsene verkehren, nicht vorgesehen hat. Nachsätze zu Antworten in der Art einer Aufführung der Leute, deren Beiträge der Antworter nicht liest u/o beantwortet, sind von HWH ebenfalls nicht erwünscht.
Zu den bisherigen Antworten:
Vorausgeschickt sei, dass das Gros der AWer Probleme lösen möchte und idR keine Erklärungen dazu liefert. Die bekommst du ohne speziellen Bemerk oft von Daniel (E.), selten auch von mir und dem Einen oder Anderen. Also musst du danach fragen. Das hast du zwar gleich zu Beginn getan, wurde aber weitgehend ignoriert.
• Onur habe ich ja schon geantwortet und ihn auf seinen Fehler hingewiesen. Er ist übrigens besser in VBA-Pgmmierung.
• WF liefert hier eine Fml-Alternative, nach der du aber nicht gefragt hattest. Insofern ist sein harscher Betreff mal wieder unangebracht. Außerdem ist er ein reiner Fml-Problemlöser, nicht unbedingt auch ein Erklärer. So etwas leistet hier idR neopa (auf Nachfrage), der jetzt aber schon 'ne Weile nicht mehr geantwortet hat (hoffentlich ist er nicht erkrankt) und natürlich auch bereits Erwähnte.
• Lupo hat das gezeigt, was du ohnehin gemacht hattest, aber nicht die gewünschte Erklärung geliefert. Bzgl SVERWEIS meint er zwar das Richtige (dass Werte unsortiert vorliegen, muss SVERWEIS per bei dir fehlendem 4.Argument mitgeteilt wdn → 0 bzw FALSCH, es reicht auch schon das einleitende ; → wird zu 0 ergänzt, aber bei Aufruf des Fktsassi auch gern automatisch entfernt!), hier liefern aber alle Varianten das Gleiche, auch bei weiteren, nachfolgenden Hamburgs oder Michaels. Nur eine 2.Kombi aus Hamburg u.Michael würde nicht gefunden, da S/W/VERWEIS und VERGLEICH stets nur den 1.Treffer liefern. (Die Argumente 1 sollten aber auch einheitlich Zeile 2:5 umfassen!)
Hier von mir jetzt nur Folgendes: Es gibt mindestens 3 verschiedene Arten von MatrixFmln. WENN verlangt idR stets eine, wenn es um ganze Bereiche oder Datenfelder geht. Seit Xl14/2010 versuchen immer mehr AWer, singulare MatrixFmln mit Hilfe von AGGREGAT zu vermeiden. Zuvor war das auch schon mit einigen Fktt möglich (über das Angebot von AGGREGAT hinaus zB mit SUMMENPRODUKT). Das dann aber auch auf plurale MatrixFmln auszudehnen, führt zu einem unökonomischen Berechnungsmehraufwand.
Deine SVERWEIS-Fml liefert ohnehin nur einen Wert, ist also (wg WENN) eine singulare MatrixFml. WENN bildet ein bereichsgroßes Datenfeld aus Werten und LeerTexten (""), das SVERWEIS dann durchsucht, mit dem GesamtBereich in Beziehung setzt und den Wert aus der per Durchnummerierung relativ angegebenen Spalte wählt. Es vereint somit auch die entsprd Fktionalitäten von INDEX und VERGLEICH in sich (weshalb es auch durch diese ersetzt wdn kann) und wählt zur ermittelten Zeile die per Nr angegebene Spalte. Bei WVERWEIS sind dann Zeilen- und SpaltenVerwendung vertauscht.
Nähere Infos ggf auf Nachfrage heute Nachmittag bzw abends.
Morhn, Luc :-?
„Die universelle Befähigung zur Unfähigkeit macht jede menschliche Leistung zu einem unglaublichen Wunder.“ Stapps ironisches Paradoxon
AW: Hier kann niemand blockiert wdn, ...
14.12.2020 21:24:22
Michael
Hallo Luc :-?,
vielen Dank für deinen ausführlichen Beitrag. Nach den vielen negativen Erfahrungen hier mit herablassenden "Helfern" und Menschen, die nicht richtig lesen können und dann motzen, finde ich deine Nachricht besonders angenehm. Ich wünschte es würde hier mehr Menschen wie dich geben.
Dein Angebot zur Nachfrage würde ich gerne annehmen. Aufgrund deiner Ausführung verstehe ich den Matrix-"S-Verweis" nun so:
1. Der Abgleich B2:B2 = "Hamburg" gibt
FALSCH
WAHR
FALSCH
WAHR
zurück (so zumindest die Formelauswertung)
2. Dadurch habe ich quasi(Das ist der Part wo ich mir noch unsicher bin=):
(FALSCH;C2:D2;"")
(WAHR;D3:D3;"")
(FALSCH;C4:D4;"")
(WAHR;D5:D5;"")
was zu 3. führt:
"","";"Tina",2000;"","";"Michael",3000
Das ist dann die Matrix für meinen S-Verweis. Michael kommt hier nur einmal vor und es wird 3000 zurückgegeben.
Sehe ich das so richtig?
Ja, das siehst du richtig, ...
16.12.2020 03:51:09
Luc:?
…Michael;
du hast so den Bereich nach B="Hamburg" gefiltert, allerdings ohne dass in ihm echte Lücken entstanden sind, was man zB mit einer VBA-basierten UDF (zB NoErrRange) erreichen könnte, was hier aber nicht zweckmäßig wäre. Und auf diesen gefilterten Bereich, der jetzt als WerteDatenfeld ohne ZellBezug erscheint, setzt SVERWEIS jetzt auf. Demggüber können viele neuere xl-Fktt das nicht und verlangen stets Bereichsbezüge und auch die erwähnte UDF nutzt hier oft nicht, denn sie erzeugt idR diskontinuierliche Bereichsbezüge, die etliche dieser Fktt ebenfalls nicht akzeptieren.
Du hast mit 3. also ein neues 2.Argument für SVERWEIS erzeugt, das aus nur noch 2 Spalten, aber immer noch 4 Zeilen besteht. Das sieht dann tatsächlich so aus, wie du es in US-Notation gezeigt hast; als MatrixKonstante in lokal-deutscher Notation dann so (so auch im Fktsassi* zu sehen):
{""."";"Tina".2000;""."";"Michael".3000}
Und dann ist ja nur noch ein Michael übrig und in dessen Zeile steht in der 2.Spalte der DatenfeldMatrix, deren Bestandteile man nun tatsächlich nicht mehr als Zellen, sondern als Elemente bezeichnen sollte, 3000.
* Dort siehst du idR auch dann das richtige Ergebnis, wenn du die Fml nicht als MatrixFml abgeschlossen hast, ein Zeichen dafür, dass Xl hier zwar alle Werte berechnet, aber ohne diesen Abschluss die WENN-Filterung ignoriert. In den neuesten Xl-Versionen hat µS das nun umgekehrt und man muss kennzeichnen, wenn man dies nicht will.
Aber das ist hier natürlich relativ trivial und man kann eine singulare MatrixFml für jeden Namen bilden. Singular ist hier aber nur das Ergebnis, das 2.Argument wird bei MxFml-Abschluss plural berechnet und weiterverwendet!
Und da wären wir auch schon bei einem HauptKlassifizierungselement von MatrixFmln → nach ihrem Ergebnis: 1 Wert → singular, mehrere Werte → plural
Aber das ist noch nicht alles. Daneben kann man auch noch nach der Art der QuellDaten(-Kennzeichnung) differenzieren. Die können derart sein, dass Xl eben nicht alle sich aus ihnen ergebenden ZwischenDaten berechnet, ohne dass wenigstens 2 Zellen ausgewählt wurden. Das trifft idR singulare MxFmln, die auf nur einer FmlZelle ein falsches, auf 2en aber ein richtiges Ergebnis liefern, nur eben doppelt, weil Xl EinzelErgebnisse stets auf alle markierten Zellen ausdehnt. Sie sind als duale MxFmln* also eine Unterklasse der singularen.
* Wäre interessant, ob Xls neue dynamische Arrays das nun ohne 2.Zelle richtig berechnen können. Übrigens mag es das auch bei pluralen MxFmln geben, nur fällt es da nicht auf, dafür aber anderes (vgl Nachfolgendes).
Es gibt aber noch einen 3.Klassifizierungsaspekt, der direkt mit der Berechnungsregie von Xl zusammenhängt. In VBA kann man die meisten Xl-Fktt ebenfalls direkt benutzen. Sie sind dort in der WorksheetFunction-Klasse zusammengefasst. Nicht darin enthalten sind einfache Text- (LINKS, RECHTS), Zähl- (ZEILE, SPALTE) und LogikFktt (UND, ODER), für die VBA eigene Fktt bzw Operatoren enthält. Wählt man daraus eine Fkt, die in manchen ihrer Argumente EinzelWerte erwartet, fktioniert sie nicht wie auf dem Xl-Blatt, wenn man ihr stattdessen ein Array übergibt. Dessen einzelwertweise Abarbeitung muss man dann selbst pgmmieren. In Xl macht das der FmlText-Interpreter. Damit wären wir bei dem von dir anfangs postulierten Durchlauf angekommen, den für solche Argumente der Interpreter verantwortet, der der Fkt dann nacheinander die verlangten EinzelWerte aus dem angegebenen Array zV stellt. Viele Ur-Xl-Fktt verlassen sich darauf, andere (neuere) bringen ihre eigene Regie mit, die man auch bei einer UDF benötigt, also vorsehen muss, ob ein Argument auch als Array daherkommen kann.
Damit erklärt sich auch die von Daniel (E.) festgestellte LaufZeitDiskrepanz: Eine NormalFml liefert stets nur ein Ergebnis, selbst dann, wenn es eigentlich deren 2 gibt wie bei WURZEL(4)=-2 und +2. Das ist bspw bei KKLEINSTE schnell ermittelt, wenn als letztes Argument ein EinzelWert angegeben wird. Der Interpreter übergibt dann nur die Argumente (ggf aus einem Ausdruck als TeilFml ermittelt). Verlangt ein Argument einen EinzelWert und es liegt aber ein Array vor, muss die Fkt mehrfach mit immer einem anderen dieser Werte aufgerufen wdn. Da kann das schon per FmlEintrag auf dem Blatt entsprd variierte Fml-Bündel schon mal schneller sein. Was aber sicher nicht schneller ist, ist, wenn man zig mal eine ganze ErgebnisMatrix berechnen lässt, um dann anschließend standortabhängig bloß jeweils einen dieser Werte auszuwählen, nur um keinen „zusammenklebenden“ ErgebnisBlock zu erhalten.
Und damit komme ich zum ggf überraschenden Schluss; es gibt auch plurale MatrixFmln, die stets 2mal berechnet wdn, 1× schnell mit Ausgabe aller abbildbaren ErgebnisWerte und dann nochmals jede Zelle im Block einzeln und in beliebiger Reihenfolge. Das kostet natürlich auch mehr Zeit, aber damit sind speziell in Xl Berechnungen möglich, die sonst (und anderswo so) nicht erreichbar wären.
Falls dich diese Thematik näher interessiert, hier noch ein Link zu einem meiner letzten Beiträge, der auch weitere Links enthält (Link-Sammlung unter 'Zwischenbilanz'):
https://www.herber.de/forum/archiv/1788to1792/1789720_VorabHalloween_Was_ist_hier_los.html#1789720
Morhn, Luc :-?
AW: Ja, das siehst du richtig, ...
17.12.2020 23:30:19
Michael
Hallo luc :-?,
vielen Dank, dass du dir nochmal so viel Zeit für eine so ausführliche Antwort genommen hast. Ich muss zugeben, ich habe es noch nicht geschafft alles zu verstehen, aber ein paar Rückfragen hätte ich bereits:
Mit Bezug auf meinen Ausgangspost:
Wenn ich folgende Formel nutze {=SUMME(KGRÖSSTE(J3:J7;ZEILE(1:3)))} (wie im Ausgangspost nur diesmal als singuläre(?) Matrixformel.) verstehe ich es so, dass J3 bis J7 als gesamter Bereich genommen wird, allerdings die Werte 1 bis 3 einzeln. Also erst wird der höchste Wert im kompletten Bereich gesucht (J3 bis J7), dann der zweithöchste usw. Das macht natürlich auch in diesem Zusammenhang Sinn.
Die Frage, die ich mir nur stelle: Wann kommt es zu diesem schleifenartigen Durchlaufen und wann nicht?
In meinem SVERWEIS-Beispiel galt ja:
(FALSCH;C2:D2;"")
(WAHR;C3:D3;"")
(FALSCH;C4:D4;"")
(WAHR;C5:D5;"")
Wodurch das von dir angesprochene Datenfeld entstanden ist. Es wurde als (korrigiere mich wenn ich falsch liege), das erste Element der ersten Matrix (FALSCH) auf das erste Element der zweiten Matrix (C2:D2) bezogen. Das zweite der ersten Matrix (WAHR) auf das zweite der zweiten Matrix (C3:D3) usw.
Hier wurde der Bereich also nicht als Ganzes gesehen (also nicht C2:D5) sondern die einzelnen Elemente genutzt.
Hier hört mein Verständnis auf. Ich sehe was passiert, warum es passiert verstehe ich nicht. Das macht es dann schwierig selbst Lösungen zu entwickeln.
Ja, so ist das im Wesentlichen, ...
19.12.2020 04:43:43
Luc:?
…Michael;
eine Fml ist zuerst nur ein Text, der als Rechenvorschrift erkannt und interpretiert wdn muss. Dafür ist der FmlTextInterpreter zuständig, der auch dafür sorgt, dass die jeweilige Fkt auch mit der Art und Zahl von Argument(Variation)en versorgt wird, die sie erwartet. Das sähe dann so aus:
• KGRÖSSTE verlangt im 1.Argument eine Matrix* als ZellBereich oder Datenfeld, das sich aus der stets zuerst vorgenommenen Auswertung bzw Berechnung eines Arguments als Ausdruck (MatrixKonstante oder TeilFml) ergibt. Im 2.Argument erwartet es einen Einzelwert. Das sieht man, wenn man die Fkt im Fktsassi(stenten) betrachtet → das 1.Argument wird wertemäßig als MatrixKonstante, das 2. als Einzelwert (stets der 1. einer ggf angegebenen Matrix) wiedergegeben. Genauso fktioniert diese Fkt auch in VBA als WorksheetFunction. Wird das 2.Argument aber ebenfalls als Matrix angegeben, sorgt der Interpreter dafür, dass die Fkt diese Werte einzeln erhält. Der WerteDurchlauf für dieses Argument findet hierbei also schon im Interpreter statt und erfordert automatische Rekursion des Fktsaufrufs. Die Berechnung kann dann auch etwas länger dauern als die von lauter einzelnen NormalFmln mit schon angepasstem 2.Argument als Einzelwert.
* In Xl ist alles, was mehr als eine Zelle bzw einen Wert umfasst, eine Matrix, auch Vektoren (Spalte) und Kovektoren (Zeile). Aber auch Einzelwerte können mitunter als 1elementige Matrizen [auch als skalare Tensoren bzw Tensor(0,0) bezeichnet] auftreten, denn in Xl hat jede Zelle 2 Koordinaten, Zeile & Spalte (mehr können vorkommen, aber nicht oW abgebildet wdn).
• SUMME* kann in jedem ihrer Argumente eine Matrix oder einen Einzelwert enthalten. Bereichsbezugsmatrizen können dabei auch irregulär sein, d.h., der angegebene Bereich darf diskontinuierlich sein, denn es wird ja nur addiert, wobei nur echte Zahlen (keine TextZahlen!) in die Summe eingehen und Fehlerwerte dazu führen, dass die Fkt den 1.Fehlerwert als Ergebnis liefert. Allerdings veranlasst die Fkt nicht, dass eine andere Fkt, die ihr quasi direkt zuliefert, ein Datenfeld erzeugt, wenn sie dazu nicht durch den Nutzer oder die neue Automatik aufgefordert wird. Der Fktsassi nimmt das aber von sich aus an und zeigt das entsprd Ergebnis, das dann uU gar nicht auf dem Blatt erscheint, was stets ein Hinweis darauf ist, dass hier MatrixFml-Form vonnöten ist. Der Fktsassi ist folglich ein wichtiges Hilfsmittel, das man besser nicht ignorieren sollte!
* Im Ggsatz zu SUMME erkennt SUMMENPRODUKT meist, dass eigentlich ein Datenfeld geliefert wdn sollte und verwendet es dann auch, zB bei deiner Fml.
• SVERWEIS verlangt demggüber ebenfalls nur im 2.Argument eine Matrix, alle anderen Argumente sollen Einzelwerte sein. Folglich wird genau dann, wenn das eine oder andere eine Matrix ist, wieder der Interpreter aktiv und rekursiert die Fkt über die Einzelwerte. Allerdings kommt hier noch das letzte Argument ins Spiel, das die Fkt veranlassen kann, im Sortiert-Fall eine rationellere SuchMethode einzusetzen. Damit hat der Interpreter dann eher nichts zu tun.
Falls noch erforderlich, schreibe ich später eine AW-Fortsetzung zur unteren Hälfte deiner Ausführungen.
Morhn, Luc :-?
AW: Ja, so ist das im Wesentlichen, ...
19.12.2020 23:22:07
Michael
Hallo Luc :-?,
vielen Dank noch einmal für deine ausführliche Antwort. Ein paar Rückfragen habe ich noch. Bei KRGÖSSTE schriebst du:"...Genauso fuktioniert diese Fkt auch in VBA als WorksheetFunction..."
Dann so in VBA?

Sub tester()
Dim i As Long
Dim j As Long
i = WorksheetFunction.CountA(Sheets("tabelle1").Range("B1:B5"))
For j = 1 To i
MsgBox WorksheetFunction.Large(Sheets("tabelle1").Range("B1:B5"), L)
Next
End Sub
Könntest du das bitte noch einmal erläutern? Habe es auch nach mehrmaligem Lesen nicht verstanden:
Allerdings veranlasst die Fkt nicht, dass eine andere Fkt, die ihr quasi direkt zuliefert, ein Datenfeld erzeugt, wenn sie dazu nicht durch den Nutzer oder die neue Automatik aufgefordert wird. Der Fktsassi nimmt das aber von sich aus an und zeigt das entsprd Ergebnis, das dann uU gar nicht auf dem Blatt erscheint, was stets ein Hinweis darauf ist, dass hier MatrixFml-Form vonnöten ist. 
Wäre eine Matrxiformel wie {SUMME(B1:B6*C1:C6) Quasi so in VBA darstellbar?: (Frage, weil du ja meintest, dass das Anschauen, wie es programmiert wird dein Verständnis für die Funktionen erhöht hat - ist im COde natürlich kein Zellbezug, aber denke vom Prinzip her könnte es das sein)
Sub test()
Dim Liste1 As Variant
Dim Liste2 As Variant
Dim Zahl As Integer
Dim i As Integer
Liste1 = Array(2, 3, 5, 7, 11, 13)
Liste2 = Array(0, 1, 2, 3, 4, 5)
For i = 0 To 5
Zahl = Zahl + Liste1(i) * Liste2(i)
Next
End Sub

Könntest du das noch einmal kurz erläutern?:
  • Folglich wird genau dann, wenn das eine oder andere eine Matrix ist, wieder der Interpreter aktiv und rekursiert die Fkt über die Einzelwerte. Allerdings kommt hier noch das letzte Argument ins Spiel, das die Fkt veranlassen kann, im Sortiert-Fall eine rationellere SuchMethode einzusetzen.

  • Was meinst du mit "das eine oder andere eine Matrix ist"?
    Ich danke dir noch einmal vielmals im Voraus und verspreche, dass es meine letzten Fragen gewesen sind ;)
    Beste Grüße
    Michael
    So, nun zum 2.Teil und deinen neuen Fragen, ...
    22.12.2020 22:10:10
    Luc:-?
    …Michael,
    aber zuvor noch der Link zu deinem letzten Beitrag im nun verborgenen Forumsteil, damit du hier weiter antworten kannst und keinen neuen Thread aufmachen musst:
    https://www.herber.de/forum/messages/1800900.html
    Du hast jetzt noch ca 5 Tage ab dem Tag deiner Anfrage Zeit, um mit dem Link das verborgene Forum zu erreichen. Wenn du stattdessen das HTML-Blatt meiner AW, das ich jetzt natürlich noch nicht kenne, benutzt, kannst du direkt auf meine AW bis inkl 26.12. antworten.
    Noch mal zum 2.Teil deiner vorletzten Frage:
    Arrays wdn idR elementweise miteinander verknüpft, weshalb sie auch alle gleichviel Elemente in gleicher Ausrichtung (Zeilen/Spalten) enthalten müssen. Es gibt in der Algebra zwar noch andere Methoden, wie zB bei MMULT u.a., die aber in Xl besondere Aktionen erfordern (nachlesbar unter meinem zuvor angegebenen Link). Das ist bei allen einfachen Verknüpfungen wie hier in WENN, ansonsten INDEX, SUMMENPRODUKT, PRODUKT u.ä. der Fall. SUMME selbst ist das egal, weil alles nur summiert wird. Die jeweilige Xl-Fkt erledigt das für die ihrer Argumente, die als mögliche Matrizen (Arrays oder ZellBereiche) ausgewiesen sind, selbst, für verlangte Einzelwerte übernimmt die Variation der Interpreter, also Xl selbst. Aber das hatte ich ja bereits geschrieben.
    Zu den neuen Fragen:
    • WorksheetFunction.Large
    Genauso, nur hast du dich wohl etwas vertan und statt j L geschrieben, was ja gar nicht vorkommt.
    • SUMME und MatrixFml-Form →
    Nur, weil ein Ausdruck (TeilFml) als Argument dieser Fkt normalerweise ein Datenfeld (Array) ergeben sollte bzw kann, wird das vom FmlText-Interpreter nicht unbedingt auch so der Fkt SUMME bereitgestellt. Dazu war bisher stets die MatrixFml-Form erforderlich, da zB aus Ergebnissen von WENN sonst nur der 1.Wert verwendet wurde. Das kann in neuesten Xl-Versionen mit Expansionsautomatik dynamischer Arrays nun anders sein. Im Gegensatz dazu geht SUMMENPRODUKT zwar vom Vorliegen eines Datenfelds aus, hat aber meist ein Problem mit WENN in einem seiner Argumente, was der Arbeitsweise von WENN geschuldet ist. WENN ist nämlich keine reine Fkt, sondern eher ein Zwitter zwischen Fkt und Anweisungskonstrukt (in VBA also eher If…Then…Else… als der vbFkt IIf vglbar). Ein Zeichen dafür, dass das ebenfalls vom Interpreter gesteuert wdn könnte (aber nicht unbedingt muss).
    Deine nachfolgende Fml nebst VBA-Bsp wäre im Prinzip mit der Wirkungsweise der Xl-Fkt SUMMENPRODUKT (WorksheetFunction.SumProduct) identisch, denn lt Definition des algebraischen Skalarprodukts handelt es sich hierbei um die Summe der elementweisen Produkte 2er (in Xl auch mehr!) Matrizen. Dadurch ergibt sich stets ein skalares Ergebnis, wenn alle FaktorMatrizen gleichlang und -breit sind.
    • Letzte Frage (SVERWEIS-Bezug):
    Die Fkt SVERWEIS sieht nur ihr 2.Argument als Matrix vor. Man kann aber auch ihr 1. u/o 3. als Matrix angeben. In diesen Fällen wird der Interpreter insofern zusätzlich aktiv, indem er aus diesen Matrizen die Einzelwerte (ggf in allen Kombinationen) abgreift und die Fkt immer wieder mit Argumenten 1-Einzelwert, 2-Matrix, 3-Einzelwert, 4-Einzelwert aufruft (bei 4 ist eine Matrix ohnehin unsinnig), bis alle sich daraus ergebenden Werte ermittelt sind, falls das Ganze auch als (plurale) MatrixFml angegeben wurde. So können mehrere Werte (Arg1) in der 1.Spalte von Arg2 gesucht und auch mehrere Werte (aus mehreren Spalten) derselben Zeile ausgegeben wdn.
    Ich hoffe mal, dass nun alles klar ist. Der Rest ist natürlich ausprobieren. Mit der Zeit wirst du bei deinem Interesse wohl auch noch kompliziertere Zusammenhänge verstehen und meistern, wie sie sich bspw aus INDEX-Nutzung ergeben. Dazu kannst du auch die Links nutzen, die im zuvor verlinkten ArchivBeitrag zu finden sind. Da gibt's noch einiges zu entdecken, was nicht in der Hilfe steht… ;-)
    Ansonsten wünsche ich dir schon mal FroWeihn & GuRu und natürlich ein besseres Jahr als das zuende gehende! Luc :-?
    AW: Ja, das siehst du richtig, ...
    17.12.2020 23:32:42
    Michael
    PS: Wenn es okay ist, würde ich am Wochenende noch ein paar Fragen zu anderen Punkten aus deinem Text formulieren. Eine Frage vorneweg: Gibt es eine gute Quelle dazu? Wie hast du das alles gelernt? Ich habe zwar einen guten Link zur Erklärung der Matrxiformeln gefunden, allerdings wird dort nicht wirklich auf die verschiedenen Arten von Matrixformeln eingegangen (z. B. auf die dualen)
    Dazu vorab nur/noch eine kurze Antwort, ...
    18.12.2020 04:11:23
    Luc:?
    …Michael,
    weil ich momentan nur wenig Zeit habe, weshalb längere AWen (die anderen folgen noch!) auch länger brauchen.
    Ich habe das Meiste nicht aus Quellen gelernt, sondern mir selbst erschlossen. Da ich in der Lage bin, Fml- mit PgmmierKenntnissen zu verbinden, kann ich mir auch ungefähr vorstellen, was die Fktsprogrammierer gemacht haben könnten. Natürlich ging das dann nicht alles in offizielle Beschreibungen von µS ein (Xl-Hilfe) und MatrixFmln wurden auch nicht näher klassifiziert (bis auf die Unterscheidung von MxFmln für nur 1 Ergebniswert - singular* - bzw eben mehrere - plural von mir genannt), das ist meine Arbeit mit eigenen Begriffen. Deshalb findest du dazu auch nichts im Web (aber im hiesigen Forumsarchiv). Etliche Fml-Cracks kennen sich nicht mit Pgmmierung aus und die Pgmmierer interessieren sich idR nicht für Xl-Fktt und alles, was mit Fmln zusammenhängt. Dabei ist das ein hochinteressantes Gebiet, denn es verlangt beides, PgmmierKenntnisse und Kenntnisse der Wirkungsweise von Fmln und Xl-Fktt, die letztlich soweit universell sein müss(t)en, dass sie mit allen möglichen Xl-Gegebenheiten zurecht kommen (was beileibe nicht alle Xl-Fktt tun).
    Ansonsten frag ruhig. Wir können das auch dann noch hier fortsetzen, wenn der Thread nicht mehr im Forum angezeigt wird (ab Beginn des 7.Tages - ab Tagesanfang deines StartBeitrags gezählt).
    * Fml-Cracks konzentrieren sich oft auf diese und wollen plurale gern in EinzelFmln auflösen, weil unter Änderungsaspekt nutzerfreundlicher/flexibler, d.h., nutzerbequemer. Deshalb kehrt µS das Ganze nun um, zumal Xl idR ohnehin alles so berechnet, wie lt NutzerAngaben möglich.
    Luc :-?

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige