Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Gianni, eccomi finalmente per completare il mio pensiero. Non ho analizzato in dettaglio il tuo foglio di lavoro, causa troppe celle, ma ho chiaramente individuato il problema.
Volendo fare un altro esempio semplicissimo, è come determinare il reddito imponibile, che è al netto delle imposte, sapendo che le imposte sono calcolate sul reddito imponibile stesso.
Messa giù in questi termini la frase, di per sé genera proprio un … riferimento circolare. Passando al foglio di lavoro, l’impostazione più ovvia e immediata, potrebbe essere questa:
A1=1000 (reddito lordo)
A2=A3*27% (imposta calcolata al 27%)
A3=A1-A2 (reddito imponibile)
da ciò scaturisce un riferimento circolare, che, in questo caso posso risolvere agevolmente con la seguente:
A2= A1/1,27*27%
Dando per scontato che il riferimento circolare, secondo me, è nella maggior parte dei casi da evitare, il mio dubbio – retorico se vuoi – tendeva a scoprire se, consapevole del fatto che generavi a priori l’errore non ti fossi posto la questione se vi era una possibile alternativa per evitarlo.
A ogni buon conto, se riteniamo che il riferimento circolare sia corretto e legittimo si può configurare excel affinché lo risolva per mezzo del calcolo iterativo, che può essere abilitato da pulsante
Office/opzioni di excel/formule
e spuntando Attiva calcolo iterativo.
Quest’operazione, secondo me, ha almeno un paio di aspetti negativi:
- essendo un’impostazione globale, vale per tutti i fogli di lavoro;
- in secondo luogo, rallenta il calcolo dei fogli di lavoro.
Mentre il secondo problema è irrisolvibile, al primo possiamo porre rimedio utilizzando qualche riga di codice VBA che sfrutta gli eventi Open e BeforeClose del Workbook, inserendo secondo le necessità:
Application.Iteration = True / False.
Mi ripeto e finisco dicendo che, sempre a mio modesto parere, un approccio di questo tipo, nella maggior parte dei casi è pericoloso e va usato con attenzione e sapendo ciò che si sta facendo, perché impedisce di individuare quei riferimenti circolari accidentali che producono, al contrario, risultati non validi.
Nelle situazioni più complicate, suggerisco l’utilizzo della funzione ‘ricerca obiettivo’, il risolutore di excel o una propria funzione vba, anche se questo può comportare un’impostazione necessariamente diversa del foglio di lavoro.
Spero di esserti stato utile.
Andrea.