INDEX-områdevalg og referenceidentitet
HotXLS-dokumentation · Beregnings- og konverteringstrofasthed
Version 2.384.101 udvider INDEX(source,row_num,column_num,area_num) til at acceptere det fjerde argument for beregnede arrays og til at komponere understøttede faktiske multiområdesreferencer gennem definerede navne og LET; række-, kolonne- og områdeselektorer kan broadcastes sammen
Ét beregnet array eller flere referenceområder
En konstant eller et beregnet array er ét kildeområde, så INDEX(SEQUENCE(2,2),2,2,1) returnerer 4; udelades det fjerde argument helt, vælges også område 1, mens et eksplicit tomt fjerde argument er en ugyldig områdeselektor
En referenceunion kan indeholde flere faktiske regnearksområder på samme ark; area_num vælger området i unionsrækkefølgen, og række- og kolonnetal gælder inden for det valgte område
For eksemplerne nedenfor indeholder Source!A1:B2 {1,2;3,4}, og Source!D1:E2 indeholder {10,20;30,40}; Other!A1:B2 indeholder {100,200;300,400}
| Formel | Resultat |
|---|---|
INDEX((Source!A1:B2,Source!D1:E2),2,2,2) | 40, som bevarer et skalars referenceresultat |
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2)) | 100, som summerer hele det andet område |
INDEX(SEQUENCE(2,2),0,0,1) | {1,2;3,4}, et beregnet værdiarray |
INDEX(SEQUENCE(2,2),2,2,2) | #REF!, fordi et beregnet array ikke har noget andet område |
Definerede navne, LET og CHOOSE
Et understøttet lokalt defineret navn, hvis udtryk er (Source!$A$1:$B$2,Source!$D$1:$E$2), beholder begge områder; indlejrede navne beholder den identitet, og AREAS(NamedAreas) returnerer 2
INDEX(NamedAreas,2,2,2) returnerer 40, mens ISREF(INDEX(NamedAreas,0,0,2)) returnerer TRUE; ROW, COLUMN, ROWS, COLUMNS og aggregatforbrugere fortsætter med at bruge den valgte references koordinater
Relative referencenavne opløses ved hver forbrugerposition, og et regnearkslokalnavn har forrang over et projektmappescopet navn med samme stavning; bevaring af referenceidentiteten fryser ikke et relativt navn til sin første evalueringsposition
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)))
Disse udtryk returnerer henholdsvis 40 og TRUE; en binding til SEQUENCE(2,2) forbliver et beregnet værdiarray og opnår ikke referenceidentitet
En skalar CHOOSE, der vælger en faktisk reference, beholder den valgte reference, inklusive et valg på et andet ark: INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) returnerer 400, og det tilsvarende skalare referenceresultat består ISREF
CHOOSE med en arrayselektor kombinerer værdier efter selektorens orientering i stedet for at bygge en union af referenceområder; CHOOSE({1,2},Source!A1:B2,Source!D1:E2) returnerer {1,20;3,40}, og en yderligere INDEX-områdeselektor på 2 returnerer stadig #REF!
Tre selektorarrays
Række-, kolonne- og områdeselektorer accepterer skalare værdier eller arrays; singleton-dimensioner broadcastes, modstående række- og kolonneorienteringer danner et krydsprodukt, og ens orienteringer parer positioner; uparrede positioner i ulige former indeholder enkelte #N/A-fejl
INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})
Det første udtryk returnerer {2,20;4,40}, og det andet returnerer {40;4}; de valgte værdier beholder deres streng-, booleske, numeriske og typede fejlrepræsentationer
Er en af selektorerne et array, bliver resultatet et værdiarray frem for en reference; nul som række eller kolonne eller en udeladt række- eller kolonneselektor vælger det første medlem af den akse ved hver resultatposition
Dette adskiller sig fra ren skalar-ekstraktion: to skalare række- og kolonnenuller returnerer hele det valgte område, men INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) returnerer {1,10}, ikke to indlejrede to-gange-to-arrays; dets sum er 11
Områdetvang og fejl
Områdeselktorer trunkerer fraktionerede numeriske værdier mod nul og accepterer numerisk tekst og booleske værdier; 1.9, "1" og TRUE vælger område 1
Område nul, FALSE, et eksplicit tomt fjerde argument, negative værdier og fraktioner der trunkeres til nul returnerer #VALUE!; ikke-numerisk tekst returnerer også #VALUE!, mens et positivt område ud over det tilgængelige områdental returnerer #REF!
Typede selektorfejl propageres med deres eksisterende fejlkoder; for en arrayselektor giver et ugyldigt område kun en fejl ved sin tilsvarende resultatposition, så INDEX(SEQUENCE(2,2),2,2,{1,2}) returnerer {4,#REF!}
Eksisterende fejl erstattes ikke af senere grænsetjek: INDEX(#N/A,1,1,2) returnerer #N/A, og INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) beholder rækkeselatorens #N/A
En ugyldig reference kvalificeret af et eksisterende lokalt regneark forbliver #REF!, inklusive Source!#REF! og 'Plan! O''Brien'!#REF!; et defineret navn med den lokale referencefejl beholder også #REF!, når det sendes til INDEX eller ISFORMULA
Det lokale fejl-token kan bruges med procent- eller implicit-intersection-operatorer, og mellemrum efter arkseparatoren accepteres; mellemrum mellem regnearksnavnet og dets separator ligger uden for den accepterede syntaks
Citerede formelstrenge som "Source!#REF!" forbliver tekst; et regnearkskvalificeret referencetoken inde i en arraykonstant ligger uden for den understøttede kildegrammatik
Række- og kolonneselektorer beholder deres eksisterende nul-ekstraktionsregler og negativ værdi-validering; område nul betyder aldrig ekstraktion af hele kilden
Lagring, afhængigheder og grænser
XLSX automatisk spill-beregning kan udvide eller formindskede selektorarray-resultater og frigiver forældede efterfølgere ejet af ankeret; understøttede udtryk evalueres også inde i en eksplicit fast CSE-destination og overlever XLSX-gemning og genåbning
En navngivet selektor kan kræve konservativ dynamisk lagring, selv når dens evaluerede resultat er skalar; en enkeltcellet dynamisk markør ændrer ikke værdien eller et understøttet referenceresultats identitet
Valgte kildereferencer og indlejrede navne deltager i afhængighedssporing, så efterfølgende kildeændringer observeres efter genberegning; selektorgennemløb og genererede matrixpayloads forbruger de eksisterende evalueringsstep- og arrayhukommelsesbudgetter
Grænser
En direkte union, hvis områder tilhører forskellige ark, returnerer #VALUE!, selv når det anmodede områdenummer kun ville vælge ét af dem; skalar CHOOSE, der vælger én reference, forbliver det understøttede kryds-ark-alternativ
En union af beregnede arrays, konstanter eller værdiudtryk er ikke en faktisk multiområdesreference; LET-bundne beregnede array-unioner returnerer #VALUE!, og direkte array-af-arrays-unionssyntaks accepteres ikke som kildeform
Denne kontrakt dækker de testede lokale reference- og beregnede array-former; den indebærer ikke understøttelse af hver ekstern referencegraf, hver referenceproducerende funktion eller vilkårlige indlejrede array-containere
En ukendt regnearkskvalifikator normaliseres ikke som en kendt lokal referencefejl; Excel kan oprette en ekstern link-graf for en formel som NoSuchSheet!#REF!, og at matche den graf ligger uden for denne lokale beregningskontrakt