INDEX-områdesval och referensidentitet
HotXLS-dokumentation · Beräknings- och konverteringstrohet
Version 2.384.101 utökar INDEX(source,row_num,column_num,area_num) så att det fjärde argumentet accepteras för beräknade matriser och så att stödda verkliga referenser med flera områden byggs via definierade namn och LET; rad-, kolumn- och områdesväljare kan broadcastas tillsammans
En beräknad matris eller flera referensområden
En konstant eller beräknad matris är ett källområde, så INDEX(SEQUENCE(2,2),2,2,1) returnerar 4; att utelämna det fjärde argumentet helt väljer också område 1, medan ett uttryckligt tomt fjärde argument är en ogiltig områdesväljare
En referensförening kan innehålla flera verkliga kalkylbladsområden på samma blad; area_num väljer området i föreningsordning, och rad- och kolumnnummer tillämpas inom det valda området
I exemplen nedan innehåller Source!A1:B2 {1,2;3,4} och Source!D1:E2 innehåller {10,20;30,40}; Other!A1:B2 innehåller {100,200;300,400}
| Formel | Resultat |
|---|---|
INDEX((Source!A1:B2,Source!D1:E2),2,2,2) | 40, med ett skalärt referensresultat bevarat |
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2)) | 100, summan av hela det andra området |
INDEX(SEQUENCE(2,2),0,0,1) | {1,2;3,4}, en beräknad värdesmatris |
INDEX(SEQUENCE(2,2),2,2,2) | #REF!, eftersom en beräknad matris inte har något andra område |
Definierade namn, LET och CHOOSE
Ett stödd lokalt definierat namn vars uttryck är (Source!$A$1:$B$2,Source!$D$1:$E$2) behåller båda områdena; nästlade namn behåller den identiteten, och AREAS(NamedAreas) returnerar 2
INDEX(NamedAreas,2,2,2) returnerar 40, medan ISREF(INDEX(NamedAreas,0,0,2)) returnerar TRUE; ROW, COLUMN, ROWS, COLUMNS och aggregerande konsumenter fortsätter att använda den valda referensens koordinater
Relativa referensnamn löses upp vid varje konsumentposition, och ett kalkylbladslokalt namn har företräde framför ett arbetsboksscopeat namn med samma stavning; att bevara referensidentiteten fryser inte ett relativt namn till sin första utvärderingsposition
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)))
De här uttrycken returnerar 40 respektive TRUE; en bindning till SEQUENCE(2,2) förblir en beräknad värdesmatris och förvärvar inte referensidentitet
En skalär CHOOSE som väljer en verklig referens behåller den valda referensen, även ett val på ett annat blad: INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) returnerar 400, och motsvarande skalära referensresultat klarar ISREF
CHOOSE med en matrisväljare kombinerar värden efter väljarens orientering i stället för att bygga en förening av referensområden; CHOOSE({1,2},Source!A1:B2,Source!D1:E2) returnerar {1,20;3,40}, och en ytterligare INDEX-områdesväljare på 2 returnerar fortfarande #REF!
Tre väljarmatriser
Rad-, kolumn- och områdesväljare accepterar skalära värden eller matriser; singleton-dimensioner broadcastas, motstridiga rad- och kolumnorienteringar bildar en korsprodukt, och matchande orienteringar parar positioner; omatchade positioner i olika former innehåller enskilda #N/A-fel
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örsta uttrycket returnerar {2,20;4,40} och det andra returnerar {40;4}; de valda värdena behåller sin sträng-, Boolean-, numeriska och typade felrepresentation
Om någon väljare är en matris blir resultatet en värdesmatris i stället för en referens; rad- eller kolumnnoll, eller en utelämnad rad- eller kolumnväljare, väljer det första elementet på den axeln vid varje resultats position
Det skiljer sig från rent skalär extraktion: två skalära rad- och kolumnnollor returnerar hela det valda området, men INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) returnerar {1,10}, inte två nästlade matriser på två gånger två; dess summa är 11
Områdeskonvertering och fel
Områdesväljare trunkerar decimala numeriska värden mot noll och accepterar numerisk text och Boolean-värden; 1.9, "1" och TRUE väljer område 1
Område noll, FALSE, ett uttryckligt tomt fjärde argument, negativa värden och decimaltal som trunkeras till noll returnerar #VALUE!; icke-numerisk text returnerar också #VALUE!, medan ett positivt område bortom antalet tillgängliga områden returnerar #REF!
Typade väljarfel propageras med sina befintliga felkoder; för en matrisväljare ger ett ogiltigt område fel endast vid motsvarande resultats position, så INDEX(SEQUENCE(2,2),2,2,{1,2}) returnerar {4,#REF!}
Befintliga fel ersätts inte av senare gränskontroller: INDEX(#N/A,1,1,2) returnerar #N/A, och INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) behåller radväljarens #N/A
En ogiltig referens kvalificerad av ett befintligt lokalt kalkylblad förblir #REF!, inklusive Source!#REF! och 'Plan! O''Brien'!#REF!; ett definierat namn som innehåller det lokala referensfelet behåller också #REF! när det skickas till INDEX eller ISFORMULA
Det lokala feltecknet kan användas med procent- eller implicit-skärningsoperatorer, och blanksteg efter bladseparatorn accepteras; blanksteg mellan kalkylbladsnamnet och dess separator ligger utanför den accepterade syntaxen
Citerade formelsträngar som "Source!#REF!" förblir text; ett bladkvalificerat referenstecken inuti en matriskonstant ligger utanför den stödda källgrammatiken
Rad- och kolumnväljare behåller sina befintliga regler för nollextraktion och validering av negativa värden; område noll betyder aldrig extraktion av hela källan
Lagring, beroenden och gränser
XLSX:s automatiska spillberäkning kan växa eller krympa väljarmatrisresultat och frigör föråldrade efterföljare som ägs av ankaret; stödda uttryck utvärderas också inuti ett uttryckligt fast CSE-mål och överlever XLSX-sparning och återöppning
En namngiven väljare kan kräva konservativ dynamisk lagring även när dess utvärderade resultat är skalärt; en encells dynamisk markör ändrar inte värdet eller ett stödd referensresults identitet
Utvalda källreferenser och nästlade namn deltar i beroendespårningen, så senare källändningar upptäcks efter omberäkningen; väljartraversering och genererade matrisnyttolaster förbrukar de befintliga budgeterna för utvärderingssteg och matrisminne
Avgränsningar
En direkt förening vars områden tillhör olika blad returnerar #VALUE!, även när det begärda områdesnumret bara skulle välja ett av dem; skalär CHOOSE som väljer en referens förblir det stödda alternativet över blad
En förening av beräknade matriser, konstanter eller värdeuttryck är ingen verklig referens med flera områden; LET-bundna föreningar av beräknade matriser returnerar #VALUE!, och direkt föreningssyntax för matriser av matriser accepteras inte som källform
Det här kontraktet täcker de testade lokala referens- och beräknade matrisformerna; det innebär inte stöd för varje extern referensgraf, varje referensproducerande funktion eller godtyckliga nästlade matriscontainrar
En okänd kalkylbladskvalificerare normaliseras inte som ett känt lokalt referensfel; Excel kan skapa en extern länkgraf för en formel som NoSuchSheet!#REF!, och att matcha den grafen ligger utanför det här lokala beräkningskontraktet