HotXLS-Dokumentation

INDEX-Bereichsauswahl und Referenzidentität

HotXLS-Dokumentation · Berechnungs- und Konvertierungstreue

Version 2.384.101 erweitert INDEX(source,row_num,column_num,area_num) so, dass das vierte Argument für berechnete Arrays akzeptiert wird und dass unterstützte echte Multi-Area-Referenzen über definierte Namen und LET kombiniert werden können; Zeilen-, Spalten- und Bereichsselektoren können zusammen broadcasten

Ein berechnetes Array oder mehrere Referenzbereiche

Eine Konstante oder ein berechnetes Array ist ein einziger Quellbereich, daher liefert INDEX(SEQUENCE(2,2),2,2,1) den Wert 4; das vollständige Weglassen des vierten Arguments wählt ebenfalls Bereich 1, während ein explizit leeres viertes Argument ein ungültiger Bereichsselektor ist

Eine Referenzvereinigung kann mehrere echte Arbeitsblattbereiche auf demselben Blatt enthalten; area_num wählt den Bereich in Vereinigungsreihenfolge, und Zeilen- und Spaltennummern gelten innerhalb dieses gewählten Bereichs

Für die Beispiele unten enthält Source!A1:B2 den Wert {1,2;3,4} und Source!D1:E2 den Wert {10,20;30,40}; Other!A1:B2 enthält {100,200;300,400}

FormelErgebnis
INDEX((Source!A1:B2,Source!D1:E2),2,2,2)40, mit erhaltenem skalarem Referenzergebnis
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2))100, als Summe über den kompletten zweiten Bereich
INDEX(SEQUENCE(2,2),0,0,1){1,2;3,4}, ein berechnetes Wertearray
INDEX(SEQUENCE(2,2),2,2,2)#REF!, da ein berechnetes Array keinen zweiten Bereich hat

Definierte Namen, LET und CHOOSE

Ein unterstützter lokaler definierter Name, dessen Ausdruck (Source!$A$1:$B$2,Source!$D$1:$E$2) lautet, behält beide Bereiche; verschachtelte Namen behalten diese Identität, und AREAS(NamedAreas) liefert 2

INDEX(NamedAreas,2,2,2) liefert 40, während ISREF(INDEX(NamedAreas,0,0,2)) den Wert TRUE liefert; ROW, COLUMN, ROWS, COLUMNS und Aggregatverbraucher verwenden weiterhin die Koordinaten der gewählten Referenz

Relative Referenznamen werden an jeder Verbraucherposition aufgelöst, und ein arbeitsblattlokaler Name hat Vorrang vor einem arbeitsmappenweiten Namen mit derselben Schreibweise; das Erhalten der Referenzidentität friert einen relativen Namen nicht an seiner ersten Auswertungsposition ein

LET(areas,(Source!A1:B2,Source!D1:E2),INDEX(areas,2,2,2))
LET(areas,(Source!A1:B2,Source!D1:E2),ISREF(INDEX(areas,0,0,2)))

Diese Ausdrücke liefern 40 bzw. TRUE; eine Bindung an SEQUENCE(2,2) bleibt ein berechnetes Wertearray und erwirbt keine Referenzidentität

Ein skalares CHOOSE, das eine echte Referenz wählt, behält diese gewählte Referenz, einschließlich einer Wahl auf einem anderen Blatt: INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) liefert 400, und das entsprechende skalare Referenzergebnis besteht ISREF

CHOOSE mit einem Array-Selektor kombiniert Werte nach Selektororientierung, statt eine Vereinigung von Referenzbereichen zu bauen; CHOOSE({1,2},Source!A1:B2,Source!D1:E2) liefert {1,20;3,40}, und ein zusätzlicher INDEX-Bereichsselektor von 2 liefert weiterhin #REF!

Drei Selektor-Arrays

Zeilen-, Spalten- und Bereichsselektoren akzeptieren Skalarwerte oder Arrays; Singleton-Dimensionen broadcasten, entgegengesetzte Zeilen- und Spaltenorientierungen bilden ein Kreuzprodukt, und übereinstimmende Orientierungen paaren Positionen; unpassende Positionen in ungleichen Formen enthalten einzelne #N/A-Fehler

INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})

Der erste Ausdruck liefert {2,20;4,40} und der zweite {40;4}; die gewählten Werte behalten ihre String-, Boolean-, numerischen und typisierten Fehlerrepräsentationen

Wenn ein Selektor ein Array ist, ist das Ergebnis ein Wertearray statt einer Referenz; eine Zeile oder Spalte null bzw. ein weggelassener Zeilen- oder Spaltenselektor wählt das erste Mitglied dieser Achse an jeder Ergebnisposition

Das unterscheidet sich von rein skalarer Extraktion: zwei skalare Zeilen- und Spaltennullen liefern den ganzen gewählten Bereich, aber INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) liefert {1,10}, nicht zwei verschachtelte Zweimal-zwei-Arrays; seine Summe ist 11

Bereichskoercion und Fehler

Bereichsselektoren truncieren fraktionale numerische Werte Richtung null und akzeptieren numerischen Text sowie Boolean-Werte; 1.9, "1" und TRUE wählen Bereich 1

Bereich null, FALSE, ein explizit leeres viertes Argument, negative Werte und Fraktionen, die zu null truncieren, liefern #VALUE!; nichtnumerischer Text liefert ebenfalls #VALUE!, während ein positiver Bereich jenseits der verfügbaren Bereichsanzahl #REF! liefert

Typisierte Selektorfehler propagieren mit ihren bestehenden Fehlercodes; bei einem Array-Selektor erzeugt ein ungültiger Bereich nur an seiner entsprechenden Ergebnisposition einen Fehler, daher liefert INDEX(SEQUENCE(2,2),2,2,{1,2}) den Wert {4,#REF!}

Vorhandene Fehler werden nicht durch spätere Grenzprüfungen ersetzt: INDEX(#N/A,1,1,2) liefert #N/A, und INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) behält das #N/A des Zeilenselektors

Eine ungültige Referenz, qualifiziert durch ein vorhandenes lokales Arbeitsblatt, bleibt #REF!, einschließlich Source!#REF! und 'Plan! O''Brien'!#REF!; ein definierter Name, der diesen lokalen Referenzfehler enthält, behält ebenfalls #REF!, wenn er an INDEX oder ISFORMULA übergeben wird

Das lokale Fehlertoken lässt sich mit Prozent- oder Implizite-Schnittmenge-Operatoren verwenden, und Leerraum nach dem Blatttrenner wird akzeptiert; Leerraum zwischen Arbeitsblattname und Trenner liegt außerhalb der akzeptierten Syntax

Gequotete Formelstrings wie "Source!#REF!" bleiben Text; ein arbeitsblattqualifiziertes Referenztoken innerhalb einer Array-Konstante liegt außerhalb der unterstützten Quellgrammatik

Zeilen- und Spaltenselektoren behalten ihre bestehenden Null-Extraktionsregeln und die Validierung negativer Werte; Bereichsnull bedeutet nie die Extraktion der gesamten Quelle

Speicherung, Abhängigkeiten und Limits

Die XLSX-Automatic-Spill-Berechnung kann Selektor-Array-Ergebnisse vergrößern oder verkleinern und gibt veraltete Nachfolgezellen frei, die dem Anker gehören; unterstützte Ausdrücke werden auch innerhalb eines expliziten festen CSE-Ziels ausgewertet und überstehen XLSX-Speichern und Neuöffnen

Ein benannter Selektor kann konservative dynamische Speicherung erfordern, selbst wenn sein ausgewertetes Ergebnis skalar ist; ein Ein-Zellen-dynamischer Marker ändert weder den Wert noch die Identität eines unterstützten Referenzergebnisses

Gewählte Quellreferenzen und verschachtelte Namen nehmen an der Abhängigkeitsverfolgung teil, sodass nachfolgende Quelländerungen nach der Neuberechnung beobachtet werden; Selektordurchlauf und erzeugte Matrix-Payloads verbrauchen die bestehenden Auswertungsschritt- und Array-Speicherbudgets

Grenzen

Eine direkte Vereinigung, deren Bereiche zu verschiedenen Blättern gehören, liefert #VALUE!, selbst wenn die angeforderte Bereichsnummer nur einen von ihnen wählen würde; skalares CHOOSE, das eine einzelne Referenz wählt, bleibt die unterstützte blattübergreifende Alternative

Eine Vereinigung aus berechneten Arrays, Konstanten oder Werteausdrücken ist keine echte Multi-Area-Referenz; an LET gebundene Vereinigungen berechneter Arrays liefern #VALUE!, und direkte Array-von-Arrays-Vereinigungssyntax wird als Quellform nicht akzeptiert

Dieser Kontrakt deckt die getesteten lokalen Referenz- und berechneten Array-Formen ab; er impliziert keine Unterstützung für jeden externen Referenzgraphen, jede Referenz-produzierende Funktion oder beliebige verschachtelte Array-Container

Ein unbekannter Arbeitsblattqualifikator wird nicht als bekannter lokaler Referenzfehler normalisiert; Excel kann für eine Formel wie NoSuchSheet!#REF! einen externen Link-Graphen anlegen, und dessen Abbild liegt außerhalb dieses lokalen Berechnungskontrakts