
Formula generica
=GET.WORKBOOK(1)&T(NOW())
Sommario
Per elencare i fogli di lavoro in una cartella di lavoro di Excel, è possibile utilizzare un approccio in due passaggi: (1) definire un intervallo denominato "nomi di fogli" con un vecchio comando macro e (2) utilizzare la funzione INDICE per recuperare i nomi dei fogli utilizzando l'intervallo denominato. Nell'esempio mostrato, la formula in B5 è:
=INDEX(MID(sheetnames,FIND(")",sheetnames)+1,255),ROWS($B$5:B5))
Nota: mi sono imbattuto in questa formula sulla bacheca di MrExcel in un post di T. Valko.
Spiegazione
L'intervallo denominato "sheetnames" viene creato con questo codice:
=GET.WORKBOOK(1)&T(NOW())
GET.WORKBOOK è un comando macro che recupera una matrice di nomi di fogli nella cartella di lavoro corrente. L'array risultante ha questo aspetto:
("(workbook.xlsm)Sheet1","(workbook.xlsm)Sheet2","(workbook.xlsm)Sheet3","(workbook.xlsm)Sheet4","(workbook.xlsm)Sheet5")
Un'espressione criptica è concatenata al risultato:
&T(NOW())
Lo scopo di questo codice è forzare il ricalcolo per rilevare le modifiche ai nomi dei fogli. Poiché NOW è una funzione volatile, ricalcola ad ogni modifica del foglio di lavoro. La funzione NOW restituisce un valore numerico che rappresenta la data e l'ora. La funzione T restituisce una stringa vuota ("") per i valori numerici, quindi la concatenazione non ha effetto sui valori.
Tornando al foglio di lavoro, la cella B6 contiene questa formula copiata verso il basso:
=INDEX(MID(sheetnames,FIND(")",sheetnames)+1,255),ROWS($B$5:B5))
Lavorando dall'interno verso l'esterno, la funzione MID viene utilizzata per rimuovere i nomi dei fogli di lavoro. L'array risultante ha questo aspetto:
("Sheet1","Sheet2","Sheet3","Sheet4","Sheet5")
Questo va nella funzione INDICE come "array". La funzione RIGA utilizza un intervallo in espansione per generare un numero di riga incrementale. Ad ogni nuova riga, INDICE restituisce il valore di matrice successivo. Quando non ci sono più nomi di fogli da stampare, la formula restituirà un errore #REF.
Nota: poiché questa formula si basa su un comando macro, sarà necessario salvare come cartella di lavoro abilitata per le macro se si desidera che la formula continui ad aggiornare i nomi dei fogli dopo che il file è stato chiuso e riaperto. Se salvi come un normale foglio di lavoro, il codice del nome del foglio verrà rimosso.