Excel (2016). Supponiamo di avere un pezzo di Excel in AnalysisSheet che analizza i dati in alcuni altri fogli di dati. E supponiamo che:
Esistono in realtà diverse schede tecniche di questo tipo. Ad esempio, potrebbero essere chiamati MayData , JunData , JulData e così via.
Tutte le schede tecniche sono identiche nel formato; solo i loro dati sono diversi. Ad esempio, potrebbero essere lo stesso report finanziario eseguito in mesi diversi
AnalysisSheet esamina sempre UNA delle schede tecniche alla volta. In ogni dato "punto di utilizzo", sta analizzando QUALSIASI MayData , OR JunData , O JulData . eccetera.
Le schede tecniche potrebbero trovarsi nella stessa cartella di lavoro di AnalysisSheet , oppure potrebbero trovarsi in un'altra cartella di lavoro diversa, oppure potrebbero essere distribuite su un numero di altre cartelle di lavoro o una combinazione di quelle
Ho bisogno che l'analisi venga eseguita oggi e non mi faccia venire voglia di lanciare pietre sul mio computer (vedi sotto dove descrivo come lo faccio attualmente)
DOMANDA : In Excel puro (ovvero senza VB e senza componenti aggiuntivi di terze parti), come posso ridurre al minimo il lavoro necessario per consentire all'utente di SheetAnalyze di modificare da quale dei dati delle schede dati viene prelevato?
Come lo faccio attualmente
Uso INDIRECT () per costruire dinamicamente i riferimenti alla scheda tecnica richiesta. Quindi, ad esempio, in AnalysisSheet posso avere quanto segue:
B1 = "MayData" (ovvero il nome del foglio contenente i dati)
B2 = "MayReport.xlsx" (ovvero il nome della cartella di lavoro contenente il foglio dati; questo viene lasciato vuoto se il foglio dati si trova nella stessa cartella di lavoro di AnalysisSheet )
B3 = "C23" (ad esempio; ovvero il nome di una cella di interesse nella scheda tecnica)
E poi avrei qualcosa di simile in B4:
B4 = CONCATENATE ("'", IF (ISBLANK (B2), "", CONCATENATE ("[", B2, "]")), B1, "'!", B3)
Quest'ultimo produce, in questo esempio, la stringa: '[MayReport.xlsx] MayData'! C23
Posso quindi usarlo in INDIRECT () per l'analisi corretta. Quindi, per guardare quella cella specifica che potrei avere;
B5 = INDIRETTO (B4) (vedi nota **)
che è immune ai cambiamenti nel nome della scheda tecnica, o della sua cartella di lavoro (o addirittura, del resto, il nome di quella cella di interesse, sebbene concesso in questo esempio ho detto che le schede tecniche sono tutte identiche nel formato) .
Tutto quello che devo fare per cambiare quali dati vengono esaminati è cambiare le celle B1 e B2. E se sto attento alle cose, potrei ridurlo a cambiare solo il nome del mese (in questo esempio) e quindi costruire anche quello che c'è in B1 e B2.
Il problema è che INDIRECT () è volatile! Di conseguenza, quando il set di dati è grande e forse ci sono molte cose simili in corso, le prestazioni vengono martellate. Nel peggiore dei casi, mi sono ritrovato a dover aspettare minuti per una singola modifica in una singola cella in AnalysisSheet , mentre Excel esamina ogni singolo INDIRECT () e lo esegue nuovamente. Giù nell'area di stato in basso a destra del mio foglio, posso vedere l'utilizzo della CPU impazzire su tutti i nodi.
Gradirei qualsiasi idea.
** Naturalmente, in genere, non mi limiterei a scegliere una singola cella. Invece, estrarre una o più intere tabelle dal foglio dati di destinazione in un foglio o fogli nella stessa cartella di lavoro di AnalysisSheet . Da lì, tutto il resto può utilizzare i riferimenti a quella versione locale dei dati.