HotXLS-documentatie

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}

FormuleResultaat
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