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

Berechnete Bezüge in Matrix-Formeln

Berechnete Bezüge in Matrix-Formeln
19.02.2019 00:33:38
Günther
Hallo,
ich möchte eine Frage ins Forum stellen, die ev. etwas theorielastig ist, obwohl das Beispiel aus einer Aufgabenstellung aus der Praxis kommt – allerdings gibt es dort funktionierende Alternativmöglichkeiten. Das heißt, ich wende mich also an jene Forum-Mitglieder, die auch einen Bezug zur Formel-Theorie von Excel haben.
Es geht um eine Matrix-Formel mit folgender Struktur:
{=Summe(ZählenWenn(Bezug1;Bezug2))}
Wenn man mit berechneten Bezügen (z.B. mittels Bereich.verschieben oder Indirekt) arbeitet, darf man nur für den Bezug1 aber nicht für den Bezug2 mit den Funktionen Zeile und Spalte arbeiten, ansonsten erhält man immer das Ergebnis 0.
Daraus ergeben sich zwei Fragen:
Warum ist das so?
Gibt es eine (von mir noch nicht entdeckte) funktionierende Möglichkeit, für die Berechnung des Bezug2 die Funktionen Zeile und Spalte zu verwenden?
Beispielmappe:
https://www.herber.de/bbs/user/127747.xlsb
Bin gespannt auf erkenntnisreiche Rückmeldungen …
Grüße Günther

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das ist ein Fehlschluss, ...
19.02.2019 03:07:07
Luc:-?
…Günther,
der dem grundsätzlich falschen Aufbau der nicht fktionierenden Fmln geschuldet ist, denn es ist im Prinzip genau umgekehrt → das/die HptArgument/e der ~WENNs-Fktt sind auf Bereichsbezüge eingeschränkt, während das/die für den Vgl benutzte/n Argument/e auch bereichslose Einzelwerte und ganze Datenfelder enthalten kann/können. Die folgende (richtige INDIREKT-)Variante kommt in keiner deiner Fmln vor: {=SUMME(ZÄHLENWENN(INDIREKT("Z1S1:Z18S1";0);INDIREKT("Z1S3:Z3S3";0)))}
Außerdem wäre INDEX statt INDIREKT ohnehin günstiger. Desweiteren kann man die Vglswerte auch als MatrixKonstante vorgeben, die Zellwerte aber nicht (schon eine Multiplikation derselben mit 1 in der Fml macht das unmöglich!), wodurch sogar die MatrixFml-Form entfallen würde: =SUMME(ZÄHLENWENN(INDIREKT("Z1S1:Z18S1";0);{1;4;7}))
Oder: =SUMME(ZÄHLENWENN(INDIREKT("Z1S1:Z18S1";0);{1.4.7}))
INDIREKT und BEREICH.VERSCHIEBEN können nur Bereiche (ObjektBezüge), sonst einen Fehlerwert liefern, sind aber volatil, INDEX (nicht volatil), falls möglich, ebenfalls, sonst ggf bereichslose Werte (bzw Datenfelder).
Morhn, Luc :-?
„Die Intelligenzmenge ist auf diesem Planeten eine Konstante, die Bevölkerung nimmt aber zu!“ Auch deshalb informieren mit …
Anzeige
Nachtrag zu ZEILE, SPALTE und INDIREKT
19.02.2019 19:20:57
Luc:-?
INDIREKT ist mit dem Einbau eines skalaren Tensors (1stufig, Array mit nur einem Element), der sich hier aus ZEILE(A3), sonst auch aus SPALTE(C1), ergibt, in einen von:bis-Bereich überfordert (das &""& ist ohnehin überflüssig!), auch bei symmetrischer Anlage in bei­den Komponenten. Hier gilt entweder ein normal angegebener Bereich oder ein Array in einer ZellAngabe, wodurch mehrere Einzel­Adres­sen erzeugt wdn, die INDIREKT nacheinander bearbeiten und ausgeben kann bzw in einer MatrixFml zu einem Array aus Arrays, also einem 2stufigen Tensor, verbindet, der keinem/r normalen Xl-Vektor/-Matrix entspricht und deshalb erst nach Umwandlung in eine/n solche/n weiterverarbeitet wdn kann; statt der normalen IntervallAngabe {=INDIREKT("Z1S3:Z3S3";0)} wäre also {=N(INDIREKT("Z"&ZEILE(1:3)&"S3";0))} erforderlich.
ZEILE und SPALTE liefern offensichtlich deshalb stets einen Tensor (Skalar, Vektor oder Kovektor), weil im Falle eines skalaren Ten­sors(0,0) als Ergebnis dieses nicht in einen skalaren Einzelwert umgewandelt wird. Die meisten Xl-Fktt haben damit kein Problem, weil die Pgmmierer das berücksichtigt hatten. Bei INDIREKT war das nicht möglich, weil sonst die o.g. IntervallBildung nicht fktionieren würde, die einzige reguläre Xl-Fml-Methode, Daten mehrerer Blätter per pluraler MatrixFml (dynamisch) zu sammeln.
Luc :-?
Anzeige
AW: Nachtrag zu ZEILE, SPALTE und INDIREKT
19.02.2019 20:50:46
Günther
Danke Luc für die beiden ausführlichen Antworten - super Info!
Du hast gesagt, dass Du INDEX günstiger findest als INDIREKT - das kann ich nachvollziehen.
Würdest Du INDEX auch BEREICH.VERSCHIEBEN vorziehen?
Grüße
Günther
Bitte sehr! ;-) Wenn INDEX möglich ist, JA! owT
19.02.2019 23:15:44
Luc:-?
:-?
AW: Nachtrag zu ZEILE, SPALTE und INDIREKT
20.02.2019 09:40:54
Daniel
wie Luc schon schrieb:
Indirekt und Bereich.Verschieben sind volatil, Index nicht.
"volatil" bedeutet, dass eine Formel, die eine dieser beiden Funktionen enthält, bei jeder Änderung eines Zellwertes in Excel neu berechnet, egal wo und in welcher Datei diese Wertänderung passiert.
Enthält die Formel keine volatile Funktion wird sie nur dann neu berechnet, wenn sich ein Wert einer Zelle ändert, die von der Formel verwendet wird.
das Problem ist, dass bei Indirekt und Bereich.Verschieben die verwendeten Zellen nicht direkt aus dem Formeltext ausgelesen werden können, sondern hierzu die Ergebnisse dieser Funktionen ermittelt werden müssten, also kann man die Formel auch gleich ganz berechnen.
bei Index wird der Zellbezug zwar auch berechnet, aber das Ergebnis ist immer eine Teilmenge des Zellbereichs des ersten Parameters und wenn man diesen verwendet, kann man auf die Volatilität verzichten.
Gruß Daniel
Anzeige
AW: Berechnete Bezüge in Matrix-Formeln
19.02.2019 09:39:21
Daniel
Hi
das Problem sind die Funktionen Zeile() und Spalte(), welche immer eine Matrix als Ergebnis zurückgeben, auch wenn du nur eine einzige Zelle damit auswertest und das Ergebnis eigentlich ein Einzelwert sein müsste.
das Ergebnis von Zeile(A3) ist also nicht die Zahl 3, sondern das Array {3}
den genauen Zusammenhang kann ich dir auch nicht erklären, auf jeden Fall stört dann diese Matrix deine gewünschte Matrix, die sich aus dem Zellbereich als 2. Parameter von ZählenWenn ergibt.
die Lösung wäre hier also, die Matrix in einen Einzelwert zu wandelen, dh {3} in 3
das geht am einfachsten, wenn man die Matrix in eine Auswertefunktion wie Summe oder Max einbettet, welche mehrere Werte zu einem Einzelwert verdichten:
{=SUMME(ZÄHLENWENN(INDIREKT("Z1S"&1&":Z31S"&1;0);INDIREKT("Z1S"&MAX(ZEILE(A3))&":Z3S"&3;0)))}
Gruß Daniel
Anzeige
AW: Berechnete Bezüge in Matrix-Formeln
19.02.2019 20:46:19
Günther
Hi Daniel,
Danke für Deine Antwort - das ist super auf den Punkt gebracht!
Ich hatte inzwischen auch schon erfolgreich die zusätzliche Summen-Funktion ergänzt und mir eine ähnliche logische Begründung zusammengereimt. Man lernt einfach nie aus ...
Grüße
Günther

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige