Usa i nomi degli intervalli dinamici in Excel per i menu a discesa flessibili

I fogli di calcolo di Excel(Excel) spesso includono menu a discesa delle celle per semplificare e/o standardizzare l'immissione dei dati. Questi menu a discesa vengono creati utilizzando la funzione di convalida dei dati per specificare un elenco di voci consentite.

Per impostare un semplice elenco a discesa, seleziona la cella in cui verranno inseriti i dati, quindi fai clic su Convalida dati(Data Validation) (nella scheda Dati ), seleziona (Data)Convalida dati(Data Validation) , scegli Elenco(List) (sotto Consenti(Allow) :), quindi inserisci gli elementi dell'elenco (separati da virgole ) nel campo Source : (vedere la figura 1).

In questo tipo di menu a tendina di base, l'elenco delle voci consentite è specificato all'interno della convalida dei dati stessa; pertanto, per apportare modifiche alla lista, l'utente deve aprire e modificare la convalida dei dati. Questo può essere difficile, tuttavia, per utenti inesperti o nei casi in cui l'elenco delle scelte è lungo.

Un'altra opzione consiste nel posizionare l'elenco in un intervallo denominato all'interno del foglio di calcolo(named range within the spreadsheet) , quindi specificare il nome dell'intervallo (preceduto da un segno di uguale) nel campo Source : della convalida dei dati (come mostrato nella Figura 2(Figure 2) ).

Questo secondo metodo semplifica la modifica delle scelte nell'elenco, ma l'aggiunta o la rimozione di elementi può essere problematico. Poiché l'intervallo denominato ( FruitChoices , nel nostro esempio) si riferisce a un intervallo fisso di celle ($H$3:$H$10 come mostrato), se vengono aggiunte più scelte alle celle H11 o inferiori, non verranno visualizzate nel menu a discesa (poiché quelle celle non fanno parte della gamma FruitChoices ).

Allo stesso modo se, ad esempio, le voci Pere(Pears) e Fragole(Strawberries) vengono cancellate, non appariranno più nel menu a discesa, ma invece il menu a discesa includerà due scelte "vuote" poiché il menu a discesa fa ancora riferimento all'intero intervallo FruitChoices, comprese le celle vuote H9 e H10 .

Per questi motivi, quando si utilizza un normale intervallo denominato come origine dell'elenco per un elenco a discesa, l'intervallo denominato stesso deve essere modificato in modo da includere più o meno celle se le voci vengono aggiunte o eliminate dall'elenco.

Una soluzione a questo problema consiste nell'utilizzare un nome di intervallo dinamico(dynamic) come origine per le scelte a discesa. Un nome di intervallo dinamico è un nome che si espande (o si contrae) automaticamente in modo che corrisponda esattamente alla dimensione di un blocco di dati quando le voci vengono aggiunte o rimosse. A tale scopo, si utilizza una formula , anziché un intervallo fisso di indirizzi di cella, per definire l'intervallo denominato.

Come impostare un intervallo dinamico(Dynamic Range) in Excel

Un nome di intervallo normale (statico) si riferisce a un intervallo di celle specificato ($H$3:$H$10 nel nostro esempio, vedi sotto):

Ma un intervallo dinamico viene definito utilizzando una formula (vedi sotto, presa da un foglio di calcolo separato che utilizza i nomi degli intervalli dinamici):

Prima di iniziare, assicurati di scaricare il nostro file di esempio Excel  (le macro di ordinamento sono state disabilitate).

Esaminiamo questa formula in dettaglio. Le scelte per Frutta si trovano in un blocco di celle direttamente sotto un'intestazione ( FRUTTA(FRUITS) ). A tale intestazione viene assegnato anche un nome: FruitsHeading :

L'intera formula utilizzata per definire il range dinamico per le scelte Fruits è:(Fruits)

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(OFFSET(FruitsHeading,1,0,20,1)),0,0),0)-1,20),1)

FruitsHeading si riferisce all'intestazione che è una riga sopra la prima voce nell'elenco. Il numero 20 (usato due volte nella formula) è la dimensione massima (numero di righe) per l'elenco (può essere modificato a piacere).

Si noti che in questo esempio ci sono solo 8 voci nell'elenco, ma ci sono anche celle vuote al di sotto di queste in cui è possibile aggiungere voci aggiuntive. Il numero 20 si riferisce all'intero blocco in cui è possibile effettuare inserimenti, non al numero effettivo di inserimenti.

Ora scomponiamo la formula in pezzi (codificando a colori ogni pezzo), per capire come funziona:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(OFFSET(FruitsHeading,1,0,20,1)),0,0),0)-1,20),1)

Il pezzo "più interno" è OFFSET(FruitsHeading,1,0,20,1) . Questo fa riferimento al blocco di 20 celle (sotto la cella FruitsHeading ) in cui è possibile inserire le scelte. Questa funzione OFFSET fondamentalmente dice: inizia dalla cella FruitsHeading , scendi di 1 riga e oltre 0 colonne, quindi seleziona un'area lunga 20 righe e larga 1 colonna. Quindi questo ci dà il blocco di 20 righe in cui vengono inserite le scelte Fruits .

Il prossimo pezzo della formula è la funzione ISLANK(ISBLANK) :

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(the above),0,0),0)-1,20),1)

Qui, la funzione OFFSET (spiegata sopra) è stata sostituita con "quanto sopra" (per rendere le cose più facili da leggere). Ma la funzione ISBLANK opera sull'intervallo di 20 righe di celle che definisce la funzione OFFSET .

ISBLANK crea quindi un insieme di 20 valori VERO(TRUE) e FALSO(FALSE) , indicando se ciascuna delle singole celle nell'intervallo di 20 righe a cui fa riferimento la funzione OFFSET è vuota (vuota) o meno. In questo esempio, i primi 8 valori del set saranno FALSE poiché le prime 8 celle non sono vuote e gli ultimi 12 valori saranno TRUE .

Il prossimo pezzo della formula è la funzione INDICE(INDEX) :

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(the above,0,0),0)-1,20),1)

Anche in questo caso, "quanto sopra" si riferisce alle funzioni ISLANK(ISBLANK) e OFFSET sopra descritte. La funzione INDICE(INDEX) restituisce un array contenente i 20 valori TRUE / FALSE creati dalla funzione ISBLANK .

INDEX viene normalmente utilizzato per selezionare un determinato valore (o intervallo di valori) da un blocco di dati, specificando una determinata riga e colonna (all'interno di quel blocco). Ma l'impostazione degli input di riga e colonna su zero (come viene fatto qui) fa sì che INDEX restituisca un array contenente l'intero blocco di dati.

Il prossimo pezzo della formula è la funzione CONFRONTA(MATCH) :

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,the above,0)-1,20),1)

La funzione CONFRONTA(MATCH) restituisce la posizione del primo valore VERO(TRUE) , all'interno della matrice restituita dalla funzione INDICE(INDEX) . Poiché le prime 8 voci nell'elenco non sono vuote, i primi 8 valori nell'array saranno FALSE e il nono valore sarà TRUE (poiché la nona riga nell'intervallo è vuota).

Quindi la funzione MATCH restituirà il valore di 9 . In questo caso, però, vogliamo davvero sapere quante voci ci sono nella lista, quindi la formula sottrae 1 dal valore MATCH (che dà la posizione dell'ultima voce). Quindi, alla fine, MATCH ( TRUE ,the above,0)-1 restituisce il valore di 8 .

Il prossimo pezzo della formula è la funzione SE ERRORE(IFERROR) :

=OFFSET(FruitsHeading,1,0,IFERROR(the above,20),1)

La funzione IFERROR restituisce un valore alternativo, se il primo valore specificato genera un errore. Questa funzione è inclusa poiché, se l'intero blocco di celle (tutte le 20 righe) è pieno di voci, la funzione CONFRONTA(MATCH) restituirà un errore.

Questo perché stiamo dicendo alla funzione MATCH di cercare il primo valore VERO(TRUE) (nell'array di valori della funzione ISBLANK ), ma se NESSUNA(NONE) delle celle è vuota, l'intero array verrà riempito con valori FALSE . Se MATCH non riesce a trovare il valore di destinazione ( TRUE ) nell'array che sta cercando, restituisce un errore.

Quindi, se l'intero elenco è pieno (e quindi CONFRONTA(IFERROR) restituisce un errore), la funzione IFERROR(MATCH) restituirà invece il valore di 20 (sapendo che devono esserci 20 voci nell'elenco).

Infine, OFFSET(FruitsHeading,1,0,the above,1) restituisce l'intervallo che stiamo effettivamente cercando: inizia dalla cella FruitsHeading , scendi di 1 riga e oltre 0 colonne, quindi seleziona un'area che sia lunga quante righe ci sono voci nell'elenco (e larghe 1 colonna). Quindi l'intera formula insieme restituirà l'intervallo che contiene solo le voci effettive (fino alla prima cella vuota).

L'uso di questa formula per definire l'intervallo che è l'origine del menu a discesa significa che puoi modificare liberamente l'elenco (aggiungendo o rimuovendo voci, purché le voci rimanenti inizino nella cella in alto e siano contigue) e il menu a discesa rifletterà sempre l'attuale elenco (vedere la figura 6(Figure 6) ).

Il file di esempio (Elenchi Dinamici) che è stato utilizzato qui è incluso ed è scaricabile da questo sito Web. Le macro non funzionano, tuttavia, perché a WordPress non piacciono i libri di Excel con le macro al loro interno.(Excel)

In alternativa alla specifica del numero di righe nel blocco elenco, è possibile assegnare al blocco elenco un proprio nome di intervallo, che può quindi essere utilizzato in una formula modificata. Nel file di esempio, un secondo elenco ( Names ) utilizza questo metodo. Qui, all'intero blocco dell'elenco (sotto l'intestazione "NAMES", 40 righe nel file di esempio) viene assegnato il nome dell'intervallo di NameBlock . La formula alternativa per definire la NamesList è quindi:

=OFFSET(NamesHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(NamesBlock),0,0),0)-1,ROWS(NamesBlock)),1)

dove NamesBlock sostituisce OFFSET ( FruitsHeading,1,0,20,1 ) e ROWS(NamesBlock) sostituisce il 20 (numero di righe) nella formula precedente.

Quindi, per gli elenchi a discesa che possono essere facilmente modificati (anche da altri utenti che potrebbero essere inesperti), prova a utilizzare i nomi degli intervalli dinamici! E tieni presente che, sebbene questo articolo sia stato incentrato sugli elenchi a discesa, i nomi degli intervalli dinamici possono essere utilizzati ovunque sia necessario fare riferimento a un intervallo o un elenco di dimensioni variabili. Divertiti!



About the author

Sono uno sviluppatore di software freeware e sostenitore di Windows Vista/7. Ho scritto diverse centinaia di articoli su vari argomenti relativi al sistema operativo, inclusi suggerimenti e trucchi, guide di riparazione e best practice. Offro anche servizi di consulenza in ufficio attraverso la mia azienda, Help Desk Services. Ho una profonda conoscenza del funzionamento di Office 365, delle sue funzionalità e di come utilizzarle nel modo più efficace.



Related posts