Per me non c'e' un problema di memoria o di disco, ma semmai di Cpu.
Aprire un file di 400 MB certi richiede un tot di tempo per la lettura da disco, ma poi c'e' la fase di scompattazione e di ricalcolo complessivo. Nella fase di ricalcolo delle formule il disco invece non dovrebbe proprio intervenire (se interviene e' perche' e' finita la memoria fisica, e non mi sembra questo il caso).
Se ci fossero dei "collegamenti" a file esterni al momento non gia' aperti allora i tempi di ricalcolo si allungherebbero vieppiu' (
in questo caso un disco a stato solido, come inizialmente proposto da Davide, migliorerebbe i tempi).
Senza poter "misurare" l'impatto delle funzioni nelle formule adottate si puo' solo rimandare ai link Microsoft aventi come tema "Performance optimization".
Sulla formula pubblicata, la parte piu' esigente in termine di risorse e' certamente quella relativa al 4° "SE", opzione [Se Falso]. Suggerirei quindi di estrapolare questa parte e inserirla in una cella a sé stante, poi userei nella formula dei SE annidati questa cella invece che la formula.
Es, in ZZ6 del foglio con le formule inserisco
- Codice: Seleziona tutto
=SE.ERRORE(MAX('A B'!AIB6;SE.NON.DISP.(CERCA.ORIZZ(INDICE('A B'!BRH$1:$COP6;2;CONFRONTA('A B'!BRG6;'A B'!BRH6:$COP6;0));'A B'!$WJ$2:$BFK$5000;CONFRONTA!$F6-1;FALSO);""))-CERCA.VERT('A B'!BRG6;INPUT!$A$2:$E$5000;4;FALSO);"")
Poi la formula pubblicata diventa
- Codice: Seleziona tutto
=SE('A B'!AIB6="";"";SE(KY$5='A B'!$VX6;"1";SE('A B'!BRG6<=MAX('A B'!$E6;'A B'!$F6);"2";SE('A B'!BRG6>'A B'!$C6;"3";ZZ6))))
Ma se ci fossero delle parti della formula posta in Z6 che variano raramente allora anche quelle parti sarebbero da estrapolare dalla formula, posizionarla in celle a sé stante e poi usare quelle celle nella formula. Es, mettere in AAA6 la parte
- Codice: Seleziona tutto
=CERCA.VERT('A B'!BRG6;INPUT!$A$2:$E$5000;4;FALSO)
E la formula in ZZ6 diventerebbe
- Codice: Seleziona tutto
=SE.ERRORE(MAX('A B'!AIB6;SE.NON.DISP.(CERCA.ORIZZ(INDICE('A B'!BRH$1:$COP6;2;CONFRONTA('A B'!BRG6;'A B'!BRH6:$COP6;0));'A B'!$WJ$2:$BFK$5000;CONFRONTA!$F6-1;FALSO);""))-AAA6;"")
Inoltre bisognerebbe vedere se ci sono delle parti che sono calcolate ripetutamente in tante formule, per estrapolarle, calcolarle una sola volta e sfruttare quel risultato nelle formule subordinate.
Ciao a tutti.