INDEX-gebiedsselectie en referentie-identiteit
HotXLS-documentatie · Berekenings- en conversiegetrouwheid
Versie 2.384.101 breidt INDEX(source,row_num,column_num,area_num) uit zodat het vierde argument ook voor berekende arrays wordt geaccepteerd en ondersteunde echte referenties met meerdere gebieden via gedefinieerde namen en LET kunnen worden samengesteld; rij-, kolom- en gebiedsselectors kunnen samen verspreiden
Eén berekende array of meerdere referentiegebieden
Een constante of berekende array is één brongebied, dus INDEX(SEQUENCE(2,2),2,2,1) geeft 4 terug; het vierde argument volledig weglaten selecteert ook gebied 1, terwijl een expliciet leeg vierde argument een ongeldige gebiedsselector is
Een referentie-unie kan meerdere echte werkbladgebieden op hetzelfde blad bevatten; area_num kiest het gebied in unievolgorde, en rij- en kolomnummers werken binnen dat gekozen gebied
Voor de voorbeelden hieronder bevat Source!A1:B2 {1,2;3,4} en Source!D1:E2 bevat {10,20;30,40}; Other!A1:B2 bevat {100,200;300,400}
| Formule | Resultaat |
|---|---|
INDEX((Source!A1:B2,Source!D1:E2),2,2,2) | 40, met behoud van een scalaire referentie als resultaat |
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2)) | 100, als som van het volledige tweede gebied |
INDEX(SEQUENCE(2,2),0,0,1) | {1,2;3,4}, een berekende waardearray |
INDEX(SEQUENCE(2,2),2,2,2) | #REF!, omdat een berekende array geen tweede gebied heeft |
Gedefinieerde namen, LET en CHOOSE
Een ondersteunde lokale gedefinieerde naam waarvan de expressie (Source!$A$1:$B$2,Source!$D$1:$E$2) is, behoudt beide gebieden; geneste namen behouden die identiteit, en AREAS(NamedAreas) geeft 2 terug
INDEX(NamedAreas,2,2,2) geeft 40 terug, terwijl ISREF(INDEX(NamedAreas,0,0,2)) TRUE oplevert; ROW, COLUMN, ROWS, COLUMNS en aggregaatconsumenten blijven de coördinaten van de gekozen verwijzing gebruiken
Relatieve referentienamen worden op elke consumentenpositie opnieuw opgelost, en een werkbladlokale naam gaat vóór een werkmapbrede naam met dezelfde spelling; referentie-identiteit behouden betekent niet dat een relatieve naam wordt vastgepind op zijn eerste evaluatiepositie
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)))
Deze expressies geven respectievelijk 40 en TRUE terug; een binding aan SEQUENCE(2,2) blijft een berekende waardearray en verkrijgt geen referentie-identiteit
Een scalaire CHOOSE die een echte verwijzing kiest, behoudt die gekozen verwijzing, ook een keuze op een ander blad: INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) geeft 400 terug en het bijbehorende scalaire referentieresultaat doorstaat ISREF
CHOOSE met een array-selector combineert waarden op basis van de selectororiëntatie in plaats van een unie van referentiegebieden te bouwen; CHOOSE({1,2},Source!A1:B2,Source!D1:E2) geeft {1,20;3,40} terug, en een extra INDEX-gebiedsselector van 2 geeft alsnog #REF!
Drie selectorarrays
Rij-, kolom- en gebiedsselectors accepteren scalaire waarden of arrays; singleton-dimensies verspreiden mee, tegenovergestelde rij- en kolomoriëntaties vormen een kruisproduct, en gelijke oriëntaties koppelen posities; niet-matchende posities bij ongelijke vormen bevatten individuele #N/A-fouten
INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})
De eerste expressie geeft {2,20;4,40} terug en de tweede {40;4}; de gekozen waarden behouden hun tekenreeks-, Boolean-, numerieke en getypeerde foutrepresentatie
Als een van de selectors een array is, is het resultaat een waardearray en geen verwijzing; een rij of kolom nul, of een weggelaten rij- of kolomselector, kiest het eerste lid van die as op elke resultaatpositie
Dit verschilt van puur scalaire extractie: twee scalaire rij- en kolomnullen geven het hele gekozen gebied terug, maar INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) geeft {1,10} terug en niet twee geneste arrays van twee bij twee; de som daarvan is 11
Gebiedsconversie en fouten
Gebiedsselectors kappen gebroken numerieke waarden af richting nul en accepteren numerieke tekst en Boolean-waarden; 1.9, "1" en TRUE kiezen gebied 1
Gebied nul, FALSE, een expliciet leeg vierde argument, negatieve waarden en gebroken waarden die naar nul afkappen geven #VALUE!; niet-numerieke tekst geeft ook #VALUE!, terwijl een positief gebied voorbij het aantal beschikbare gebieden #REF! oplevert
Getypeerde selectorfouten propageren met hun bestaande foutcodes; bij een array-selector produceert een ongeldig gebied alleen op de bijbehorende resultaatpositie een fout, dus INDEX(SEQUENCE(2,2),2,2,{1,2}) geeft {4,#REF!} terug
Bestaande fouten worden niet vervangen door latere grenscontroles: INDEX(#N/A,1,1,2) geeft #N/A terug, en INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) behoudt de #N/A van de rijselector
Een ongeldige verwijzing met een bestaand lokaal werkblad blijft #REF!, inclusief Source!#REF! en 'Plan! O''Brien'!#REF!; een gedefinieerde naam die die lokale referentiefout bevat behoudt eveneens #REF! wanneer deze aan INDEX of ISFORMULA wordt doorgegeven
Het lokale-fout-token kan samen met de percent- of impliciete-intersectie-operator worden gebruikt, en witruimte na de bladscheider wordt geaccepteerd; witruimte tussen de werkbladnaam en zijn scheider valt buiten de geaccepteerde syntaxis
Gequote formulestrings zoals "Source!#REF!" blijven tekst; een werkbladgekwalificeerd verwijzingstoken binnen een arrayconstante valt buiten de ondersteunde brongrammatica
Rij- en kolomselectors houden hun bestaande nulextractieregels en validatie van negatieve waarden aan; gebied nul betekent nooit extractie van de volledige bron
Opslag, afhankelijkheden en limieten
Automatische XLSX-spill-berekening kan selectorarray-resultaten laten groeien of krimpen en geeft verouderde volgcellen vrij die het anker bezat; ondersteunde expressies evalueren ook binnen een expliciete vaste CSE-bestemming en overleven XLSX-opslag en heropenen
Een benoemde selector kan conservatieve dynamische opslag vereisen, ook wanneer zijn geëvalueerde resultaat scalair is; een marker met één dynamische cel verandert niet de waarde of de identiteit van een ondersteund referentieresultaat
Gekozen bronverwijzingen en geneste namen doen mee aan afhankelijkheidstracking, dus latere bronwijzigingen worden na herberekening waargenomen; het doorkruisen van selectors en gegenereerde matrixpayloads verbruiken de bestaande budgets voor evaluatiestappen en array-geheugen
Grenzen
Een directe unie waarvan de gebieden op verschillende bladen liggen geeft #VALUE!, zelfs wanneer het opgevraagde gebiedsnummer er maar één zou kiezen; scalaire CHOOSE die één verwijzing kiest blijft het ondersteunde alternatief over bladen heen
Een unie van berekende arrays, constanten of waarde-expressies is geen echte referentie met meerdere gebieden; LET-gebonden unies van berekende arrays geven #VALUE! terug, en directe array-van-arrays-uniesyntaxis wordt niet als bronvorm geaccepteerd
Dit contract dekt de geteste lokale referentie- en berekende-array-vormen; het impliceert geen ondersteuning voor elke externe referentiegrafiek, elke referentie-producerende functie of willekeurige geneste arraycontainers
Een onbekende werkbladkwalificatie wordt niet genormaliseerd naar een bekende lokale referentiefout; Excel kan voor een formule zoals NoSuchSheet!#REF! een externe-koppelinggrafiek aanmaken, en die grafiek matchen valt buiten dit lokale berekeningscontract