Perché il wrapping di una formula di array Excel in una somma non produce in questo caso la somma dei contenuti?
-
03-07-2019 - |
Domanda
Clever People,
In Excel, sembra che il wrapping di una formula di matrice in una SOMMA non produca la somma del contenuto della matrice in tutti i casi. (Cioè, mi sembra; chiaramente, potrei ben essere confuso.)
Ciò è emerso quando si è tentato di scrivere l'equivalente di un join interno in Excel. Per motivi che coinvolgono Excel per Mac, lo sto facendo senza usare Visual Basic o MS Query: solo formule di array e INDEX / MATCH. Penso di esserci riuscito, a parte questo bizzarro comportamento che non riesco a capire.
Attualmente sto usando un kludge, ma sarebbe bello non doverlo fare. Qualsiasi aiuto o consiglio sarebbe molto apprezzato.
Di seguito viene riprodotto il problema:
Tabella 1
key | fkey
----+------
a | x
a | y
b | x
b | y
Tabella 2
key | value
----+------
x | 1
y | 10
Il layout sopra dovrebbe rappresentare come appaiono queste due piccole tabelle nel foglio di calcolo: non sta succedendo nulla di intelligente. I quattro intervalli ovvi sono denominati table1.key
, table1.fkey
, table2.key
e table2.value
.
Quindi, quindi, il join interno. Vorrei quei valori della Tabella 2 che corrispondono a una chiave specifica nella Tabella 1, con il join su `table1.fkey = table2.key '. Immettere la formula:
{=("a"=table1.key)*INDEX(table2.value, MATCH(table1.fkey, table2.key, FALSE))}
in due celle verticali fornisce il risultato richiesto; vale a dire:
1 10
(Figo, o cosa?) Finora, tutto bene. Ma ora voglio davvero la somma dei due numeri sopra. Quindi ho semplicemente avvolto la formula sopra in una SOMMA e ho inserito il risultato in una singola cella:
{=SUM(("a"=table1.key)*INDEX(table2.value, MATCH(table1.fkey, table2.key, FALSE)))}
Risultato?
2
Qualcuno ha qualche idea cosa diavolo sta succedendo?
James
Soluzione
L'argomento row_num di INDEX non può essere un array se utilizzato in una formula di array a cella singola. La funzione INDICE ritorna sempre 1. Prova
=SUM(INDEX(table2.value,{2,1}))
Restituirà sempre 10, poiché INDICE accetterà solo il primo elemento dell'array. Non so perché funzionino diversamente per le formule di array di celle singole rispetto a multicell.