Seleção de áreas do INDEX e identidade de referência
Documentação do HotXLS · Fidelidade de cálculo e conversão
A versão 2.384.101 estende o INDEX(source,row_num,column_num,area_num) para aceitar o quarto argumento em matrizes calculadas e para compor referências reais de várias áreas suportadas através de nomes definidos e LET; os seletores de linha, coluna e área podem difundir-se em conjunto
Uma matriz calculada ou várias áreas de referência
Uma constante ou matriz calculada é uma única área de origem, pelo que INDEX(SEQUENCE(2,2),2,2,1) devolve 4; omitir completamente o quarto argumento também seleciona a área 1, enquanto um quarto argumento explicitamente vazio é um seletor de área inválido
Uma união de referências pode conter várias áreas reais de folha de cálculo na mesma folha; o area_num seleciona a área pela ordem da união, e os números de linha e coluna aplicam-se dentro dessa área selecionada
Nos exemplos abaixo, Source!A1:B2 contém {1,2;3,4} e Source!D1:E2 contém {10,20;30,40}; Other!A1:B2 contém {100,200;300,400}
| Fórmula | Resultado |
|---|---|
INDEX((Source!A1:B2,Source!D1:E2),2,2,2) | 40, mantendo um resultado de referência escalar |
SUM(INDEX((Source!A1:B2,Source!D1:E2),0,0,2)) | 100, somando a segunda área completa |
INDEX(SEQUENCE(2,2),0,0,1) | {1,2;3,4}, uma matriz de valores calculados |
INDEX(SEQUENCE(2,2),2,2,2) | #REF!, porque uma matriz calculada não tem segunda área |
Nomes definidos, LET e CHOOSE
Um nome definido local suportado cuja expressão é (Source!$A$1:$B$2,Source!$D$1:$E$2) mantém ambas as áreas; os nomes aninhados mantêm essa identidade, e AREAS(NamedAreas) devolve 2
O INDEX(NamedAreas,2,2,2) devolve 40, enquanto ISREF(INDEX(NamedAreas,0,0,2)) devolve TRUE; ROW, COLUMN, ROWS, COLUMNS e os consumidores agregadores continuam a usar as coordenadas de referência selecionadas
Os nomes de referências relativas resolvem-se em cada posição de consumo, e um nome local da folha de cálculo tem precedência sobre um nome de âmbito de livro com a mesma grafia; preservar a identidade de referência não congela um nome relativo na primeira posição de avaliação
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)))
Estas expressões devolvem 40 e TRUE respetivamente; um binding a SEQUENCE(2,2) mantém-se como matriz de valores calculados e não adquire identidade de referência
Um CHOOSE escalar que seleciona uma referência real mantém essa referência selecionada, incluindo uma escolha noutra folha: INDEX(CHOOSE(2,Source!A1:B2,Other!A1:B2),2,2) devolve 400 e o resultado de referência escalar correspondente passa no ISREF
Um CHOOSE com seletor de matriz combina valores pela orientação do seletor em vez de construir uma união de áreas de referência; CHOOSE({1,2},Source!A1:B2,Source!D1:E2) devolve {1,20;3,40}, e um seletor de área adicional de 2 no INDEX continua a devolver #REF!
Três matrizes de seletores
Os seletores de linha, coluna e área aceitam valores escalares ou matrizes; as dimensões singleton difundem-se, orientações opostas de linha e coluna formam um produto cruzado, e orientações iguais emparelham posições; as posições sem par em formas desiguais contêm erros #N/A individuais
INDEX((Source!A1:B2,Source!D1:E2),{1;2},2,{1,2})
INDEX((Source!A1:B2,Source!D1:E2),2,2,{2;1})
A primeira expressão devolve {2,20;4,40} e a segunda devolve {40;4}; os valores selecionados mantêm as representações de cadeia, Boolean, numérica e de erro com tipo
Se algum seletor for uma matriz, o resultado é uma matriz de valores em vez de uma referência; uma linha ou coluna zero, ou um seletor de linha ou coluna omitido, seleciona o primeiro membro desse eixo em cada posição do resultado
Isto difere da extração apenas escalar: dois zeros escalares de linha e coluna devolvem a área selecionada inteira, mas INDEX((Source!A1:B2,Source!D1:E2),0,0,{1,2}) devolve {1,10}, e não duas matrizes de duas por duas aninhadas; a soma é 11
Coerção de áreas e erros
Os seletores de área truncam valores numéricos fracionários em direção a zero e aceitam texto numérico e valores Boolean; 1.9, "1" e TRUE selecionam a área 1
A área zero, FALSE, um quarto argumento explicitamente vazio, valores negativos e frações que truncam para zero devolvem #VALUE!; texto não numérico também devolve #VALUE!, enquanto uma área positiva além da contagem de áreas disponíveis devolve #REF!
Os erros de seletores com tipo propagam-se com os respetivos códigos de erro existentes; num seletor de matriz, uma área inválida produz um erro apenas na posição de resultado correspondente, pelo que INDEX(SEQUENCE(2,2),2,2,{1,2}) devolve {4,#REF!}
Os erros existentes não são substituídos por verificações de limites posteriores: INDEX(#N/A,1,1,2) devolve #N/A, e INDEX(SEQUENCE(2,2),#N/A,1,#DIV/0!) mantém o #N/A do seletor de linha
Uma referência inválida qualificada por uma folha de cálculo local existente mantém-se #REF!, incluindo Source!#REF! e 'Plan! O''Brien'!#REF!; um nome definido que contenha esse erro de referência local também mantém #REF! quando passado ao INDEX ou ao ISFORMULA
O token de erro local pode ser usado com operadores de percentagem ou de interseção implícita, e espaço em branco após o separador de folha é aceite; espaço em branco entre o nome da folha de cálculo e o respetivo separador fica fora da sintaxe aceite
Cadeias de fórmulas entre aspas como "Source!#REF!" mantêm-se texto; um token de referência qualificado por folha de cálculo dentro de uma constante de matriz fica fora da gramática de origens suportada
Os seletores de linha e coluna mantêm as respetivas regras existentes de extração zero e de validação de valores negativos; a área zero nunca significa extração da origem inteira
Armazenamento, dependências e limites
O cálculo automático de spill em XLSX pode crescer ou encolher resultados de seletores de matriz e liberta as seguidoras obsoletas detidas pela âncora; as expressões suportadas também avaliam dentro de um destino CSE explícito fixo e sobrevivem à gravação e reabertura em XLSX
Um seletor nomeado pode exigir armazenamento dinâmico conservador mesmo quando o resultado avaliado é escalar; um marcador dinâmico de uma célula não muda o valor nem a identidade de um resultado de referência suportado
As referências de origem selecionadas e os nomes aninhados participam no rastreio de dependências, pelo que edições posteriores da origem são observadas após o recálculo; o percurso de seletores e os payloads de matrizes gerados consomem os orçamentos existentes de passos de avaliação e de memória de matrizes
Limites
Uma união direta cujas áreas pertencem a folhas diferentes devolve #VALUE!, mesmo quando o número de área pedido selecionaria apenas uma delas; um CHOOSE escalar que seleciona uma referência mantém-se como a alternativa entre folhas suportada
Uma união de matrizes calculadas, constantes ou expressões de valores não é uma referência real de várias áreas; as uniões de matrizes calculadas vinculadas por LET devolvem #VALUE!, e a sintaxe direta de união de matriz de matrizes não é aceite como forma de origem
Este contrato cobre as formas testadas de referências locais e de matrizes calculadas; não implica suporte para todos os grafos de referências externas, todas as funções que produzem referências ou contentores arbitrários de matrizes aninhadas
Um qualificador de folha de cálculo desconhecido não é normalizado como erro de referência local conhecido; o Excel pode criar um grafo de ligações externas para uma fórmula como NoSuchSheet!#REF!, e reproduzir esse grafo fica fora deste contrato de cálculo local