Definizione del problema:ROW() funzione comporta in modo diverso all'interno SUM() e SUMPRODUCT()
inserire qualsiasi numero nella cella A1
. Ora prova le seguenti formule ovunque sulla prima riga.
=SUM(INDIRECT("A"&ROW()))
e
=SUMPRODUCT(INDIRECT("A"&ROW()))
La prima formula valuta, il secondo dà un errore #valore. Ciò è causato dalla funzione ROW()
che si comporta diversamente all'interno di SUMPRODUCT()
.
Nella prima formula, ROW()
restituisce 1
. Nella seconda formula, la riga restituisce {1}
(array di una lunghezza), anche se la formula non è stata inserita come formula CSE.
Perché succede?
Sfondo
Ho bisogno di valutare una formula del tipo
=SUMPRODUCT(INDIRECT(*range formed by concatenation and using ROW()*)>1)
Ciò sta funzionando ad un errore. Per ovviare a questo problema, ora calcolo ROW()
in un'altra cella (nella stessa riga, ovviamente) e concatenato all'interno del mio INDIRECT()
. In alternativa, ho anche provato a incapsularlo all'interno di una funzione di somma, come SUM(ROW())
, e anche questo funziona.
Apprezzerei sicuramente se qualcuno potesse spiegare (o indicarmi una risorsa che possa spiegare) perché ROW()
restituisce un array all'interno di SUMPRODUCT()
senza essere inserito CSE.
+1 bella ricerca! –
+1 Questo è esattamente ciò di cui avevo bisogno. La capacità di "dereferenziazione" delle funzioni ''() 'e' '()' 'mi sorprende. Infatti, nella formula '= SUMPRODUCT (N (INDIRECT (" A "& ROW())))', la funzione 'N()' risolve in realtà un errore #VALORE (come visto nella Formula di valutazione, Excel 2003). Questo è estremamente buono da sapere. Anche le informazioni sui tipi di argomenti R/U e P/Q sembrano essere una buona spiegazione. La gestione degli elementi 'xlTypeNil' per i tipi P/Q sembra corrispondere al comportamento di' SUMPRODUCT() '. Grazie per una risposta brillante. Non avrei mai saputo per cosa cosa Google. Merita un +10 !! – playercharlie
Sono contento che questo sia stato d'aiuto - Laurent Longre ha inizialmente capito questo comportamento e ha mostrato come è possibile utilizzare la funzione CALL con riferimento a xlcall.h per le funzioni del foglio di lavoro: http://www.cpearson.com/excel/Call.htm. In VBA questo è ancora accessibile tramite: 'ExecuteExcel4Macro'. –