INDEX eindimensional - horizontal versus vertikal
#1
Hallo zusammen,

es lässt mir keine Ruhe.

=INDEX({3;4;5;6};1)
liefert als Rückgabewert das Array ={3}

=INDEX({3.4.5.6};1)
liefert kein Array sondern den einzelnen Wert =3

Das kann doch kein Feature sein?

Bitte um Eure geschätzte Meinung.
Antworten Top
#2
Hi Boris,

(21.01.2025, 19:56){Boris} schrieb: =INDEX({3.4.5.6};1)
liefert kein Array sondern den einzelnen Wert =3

korrekt wäre da ja
=INDEX({3.4.5.6};;1)

Gruß, Uwe

oder anders rum: Bei vollständiger(horizonaler und vertikaler) Angabe der Position ergibt es keine Matrix.
Antworten Top
#3
Hi,

wie schon die ganze Zeit:

mit ; erzeugst Du ein vertikales Array, mit . ein Horizontales. Ist schon ein alter Hut:

SUMMENPRODUKT(ZEILE(A1:A5)*{1;2;3;4}) erzeugt #NV, weil zwei unterschiedlich große Arrays vorliegen
SUMMENPRODUKT(ZEILE(A1:A5)*{1.2.3.4}) ergibt ein Ergebnis, weil (in diesem Fall) eine 5 x 4 Matrix erzeugt wird und jeder Zeilenwert mit jedem Spaltenwert multipliziert wird.

Das, was Anton schon ausführlich erläutert hat. Aus dem horizontalen Array erhältst Du einen Wert, aus dem Vertikalen nur ein Array, was z.B. in Deiner vorherigen Formel nicht zum schon vorhandenen passt.

=INDEX({3;4;5;6};1;1)  liefert wieder die Zahl 3, nämlich aus der einspaltigen Matrix den Wert aus Zeile 1.

Funktioniert:
=LET(x;DATUM(2025;1;SEQUENZ(31));WT;INDEX({3;4;5;6};1;1);y;ERWEITERN(x;ZEILEN(x)+WT;1;0);y)
=LET(x;DATUM(2025;1;SEQUENZ(31));WT;INDEX({3.4.5.6};1);y;ERWEITERN(x;ZEILEN(x)+WT;1;0);y)
=LET(x;DATUM(2025;1;SEQUENZ(31));WT;INDEX({3;4;5;6};1);y;ERWEITERN(x;ZEILEN(x)+@WT;1;0);y)
=LET(x;DATUM(2025;1;SEQUENZ(31));WT;INDEX({3;4;5;6};1;1);y;ERWEITERN(x;ZEILEN(x)+WT;1;0);y)

Ich kann es nicht so gut erklären wie Anton oder Onur, aber so ist es für mich logisch.
Gruß

Edgar

Meine Antworten sind freiwillig und ohne Gewähr!
Über Rückmeldungen würde ich mich freuen.
Antworten Top
#4
Hi Edgar, hi Uwe,


Zitat:mit ; erzeugst Du ein vertikales Array, mit . ein Horizontales. Ist schon ein alter Hut:

Das weiß ich natürlich - daher auch mein Betreff.

Zitat:korrekt wäre da ja
=INDEX({3.4.5.6};;1)

Nein, denn mit einem Nullparameter für Zeile oder Spalte erzeuge ich auf jeden Fall ein Array. Deine Formel liefert auch ={3}

Nochmal ganz kurz:

Für ein eindimensionales horizontales Array liefert
=INDEX({3.4.5.6};1)
den einzelnen Wert =3 und nicht ein Array (={3})

Für ein eindimensionales vertikales Array liefert
=INDEX({3;4;5;6};1)
aber ein Array ={3} und keinen einzelnen Wert (=3)

Und dieses unterschiedliche Verhalten bei den beiden Arrayausrichtungen (horizontal/vertikal) will mir nicht in den Kopf.

Aus der Hilfe:

Zitat:
    • Wenn Matrix nur eine Zeile oder Spalte enthält, ist das entsprechende Argument row_num oder column_num optional.

Demnach müsste es egal sein, ob ich  =INDEX({3;4;5;6};1) oder  =INDEX({3;4;5;6};1;1) schreibe - ist es aber nicht.

Mit einem Zellbezug anstatt einer Arraykonstanten funktioniert es hingegen wie erwartet: =INDEX(A1:A4;1) liefert den einzelnen Wert aus A1 und kein Array.

Für mich bleibt es immer noch fragwürdig.

Aber lassen wir das jetzt. Ich danke Euch für Eure Antworten!
Antworten Top
#5
Hallo Boris,

ich würde annehmen, das hat mit der Kompatibilität zu früheren Versionen zu tun. Denn sonst hätte MS ja für alle früheren Versionen ein Update machen müssen.
Im Bild, wie das im XML-Code aussieht, wenn ich mal INDEX mit und ohne zweites Argument in Excel 2010 und Excel 365 verwende. Ab Excel 365 scheint es so,
dass alles erstmal ein Array ist. Somit erscheint es wohl sinnvoll, ab Excel 365 generell auf optionale Argumente zu verzichten, sofern man bspw. explizit den Wert
ansprechen möchte. Oder eben halt den Operator @ verwenden.

   

Möglich, dass das für horizontale Arrays auch gilt. Habe ich mir aber allerdings nicht angeschaut bzw. geprüft.

Gruß
Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) :: 2011-2019 & 2020-2022 :: 10 Awards
https://de.excel-translator.de/translator :: Online Excel-Formel-Übersetzer :: Funktionen :: Fehlerwerte :: Argumente :: Tabellenbezeichner
Antworten Top
#6
Hi Mourad,


Zitat:ich würde annehmen, das hat mit der Kompatibilität zu früheren Versionen zu tun.

Damit kommen wir der Sache womöglich näher.

Zitat:Möglich, dass das für horizontale Arrays auch gilt. Habe ich mir aber allerdings nicht angeschaut bzw. geprüft.

Nach meinen Beobachtungen gilt das halt nicht für horizontale Arrays, denn dort wird auch in der aktuellen Version ein einzelner Wert (und kein Array) geliefert, was ich auch für logisch erachte.

Bleibt am Ende noch die Unterscheidung bei den vertikalen Arrays zwischen Matrix und Bezug, denn mit einem Bezug liefert =INDEX(vertikaler_Bezug;1) einen einzelnen Wert und kein Array, während =INDEX(vertikale_Matrix;1) ein Array zurückgibt.
Antworten Top
#7
Hi Boris,

(22.01.2025, 12:23){Boris} schrieb: Nein, denn mit einem Nullparameter für Zeile oder Spalte erzeuge ich auf jeden Fall ein Array. Deine Formel liefert auch ={3}

genau, das wollte ich damit auch sagen.

Dass bei der Spaltenversion nur mit dem Zeilenparameter ein Wert und kein Array erzeugt wird, finde ich bugy.

Gruß, Uwe
Antworten Top
#8
Hi Uwe,

Zitat:Dass bei der Spaltenversion nur mit dem Zeilenparameter ein Wert und kein Array erzeugt wird, finde ich bugy.

Ja, irgendwas ist hier halt "unlogisch".

Ich persönlich sehe es nur "andersherum" (hatte das im anderen Thread schon mal so geschrieben):

INDEX "sagt": Gib mir eine Matrix. Ist sie zweidimensional, brauche ich beide Parameter (Zeile und Spalte). Ist sie eindimensional, reicht mir ein Parameter (Zeile oder Spalte). Ich kann dann selbst zuordnen, ob es sich um Zeile oder Spalte handelt.

Das ist zumindest meine Erwartungshaltung, die auch zutrifft, wenn es sich um eindimensionale Bezüge (und keine Arrays) handelt. Der Klassiker ist ja INDEX in Kombination mit VERGLEICH. Niemand gibt bei eindimensionalen Bezügen beide Parameter (Zeile und Spalte) an:

=INDEX(A:A;VERGLEICH(Suchkriterum;B:B;0))
bzw.
=INDEX(1:1;VERGLEICH(Suchkriterium;2:2;0))

In beiden Fällen wird ein einzelner Wert (und kein Array) geliefert. Aber halt nur bei Bezügen (und nicht bei Arrays - bzw. nur bei einem horizontalen Array).
Antworten Top
#9
Für Interessierte hier die finale Antwort von MS:

Index has different logic when dealing with horizontal and vertical array constants, but I have not found relevant documentation to explain this.

Akzeptiert, aber nicht final geklärt.

Thema für mich damit erledigt.
Antworten Top
#10
Microsoft sagt: " but I have not found relevant documentation to explain this " ? Ernsthaft?
Das ist doch irgendwie ein Armutszeugnis - oder?
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste