mercoledì 8 ottobre 2014

Menu a tendina dinamico (Convalida dati, Funzione INDIRETTO)

Nel post precedente abbiamo visto come inserire in un file un Menu a tendina.
Ora vedremo come far dipendere i dati visualizzati in un Menu a tendina in base alla scelta operata in un altro Menu a tendina. 

Prima di procedere, però, dobbiamo nominare l'elenco delle categorie merceologiche presenti nei diversi negozi.
  • Attribuzione categorie merceologiche ai negozi
Vi mostrerò come sia possibile nominare le zone tutte insieme, risparmiando tempo e noia.

    Figura 1

Dopo aver inserito in fianco ai vari negozi la classe merceologica dei prodotti venduti, selezioniamo tutta l'area e scegliamo Crea da selezione. Quindi lasciamo spuntato solo Colonna sinistra. Premendo Ok avremo nominato tutte le zone in un colpo solo ed il nome sarà quello inserito nella colonna di sinistra e cioè il nome del negozio.
Ho anche un'altra chicca da mostrarvi sul Nominare una zona, ma ci torneremo dopo, quando vedremo che quello che abbiamo fatto finora ha ancora ampi margini di miglioramento.

Ora saremmo in grado di inserire il menu a tendina dinamico se non dovessimo prima aprire una breve parentesi e illustrare la funzione INDIRETTO che utilizzeremo in seguito.

La Funzione INDIRETTO permette di costruire una formula, prendendo le varie parti che la compongono da punti diversi del file.

Un esempio semplice è il seguente:

    Figura 2

Nella cella A1 ho scritto ecco! e nella cella E1 ho inserito A1.
Se nella cella E2 inserisco la formula =INDIRETTO (E1), il risultato di tale formula è ecco!
La formula INDIRETTO interpreta ciò che è inserito nella cella E1 come un riferimento ad una cella  (A1) e restituisce quindi il risultato della formula che si viene a creare (corrisponde cioè alla formula diretta =A1).

Un altro esempio di utilizzo di questa funzione è quello di costruire una funzione un pezzo alla volta, come nell'esempio:

    Figura 3

Nella cella E4 ho inserito la parola Tabella. Nella cella sottostante ho costruito la formula puntando alla cella E4 e così ottengo il foglio (Tabella), aggiungo, compreso tra due &, il punto esclamativo e quindi completo la formula indicando il riferimento di cella (A2 tra apici, altrimenti lo interpreta come riferimento di cella diretto).
In questo modo ottengo lo stesso risultato della formula diretta =Tabella!A2. Come si può vedere nella Figura 1, nella cella A2 del foglio Tabelle c'è la scritta Neguno.

Ora siamo pronti a inserire il nostro Menu a tendina dinamico e a vedere un altro utilizzo della suddetta formula.

  • Inserimento Menu a tendina dinamico

Dove eravamo rimasti? Nel post precedente abbiamo inserito una Convalida dati nella colonna A e nella casella Origine avevamo inserito =Negozi, ottenendo così la lista dei negozi.

Ora ci mettiamo nella colonna C, dal menu Dati, selezioniamo l'icona Convalida dati, quindi la voce Convalida dati, nei criteri selezioniamo Elenco e nella casella Origine digitiamo la formula
 =Indiretto (A1) e diamo l'OK.

    Figura 4

Appare una maschera di errore: "L'origine restituisce attualmente un errore. Continuare?" Confermare con l'OK (non so a cosa sia dovuta questa segnalazione ma non influisce sul buon esito della convalida)

Attraverso la formula Indiretto abbiamo collegato il secondo menu al primo e quindi selezionando una voce dal primo limitiamo la visualizzazione delle voci del secondo menu.

Ora possiamo provare a selezionare una voce dal primo menu a tendina (per esempio Negtre o Negotto) e possiamo immediatamente verificare che in base a questa selezione, nella seconda casella potremo visualizzare soltanto le categorie di prodotti che fanno riferimento a quel negozio, come si può vedere nella figura seguente e per controprova nella figura 1


    Figura 5

Resta un'ultima cosa da sistemare. Come si può vedere in figura 5, il menu mostra sempre lo stesso numero di righe. Se vogliamo adattare la casella al numero di righe utilizzate per ogni negozio, possiamo intervenire così:

Selezioniamo tutta la zona delle tabelle, come abbiamo fatto quando le abbiamo create.
Quindi premiamo F5 (o dal Menu Vai a), quindi Speciale e poi selezioniamo Celle vuote, come nella figura seguente:

    Figura 6

A questo punto posizionarsi sulle celle evidenziate in grigio e dopo aver premuto il tasto destro del mouse, selezionare Elimina e quindi selezionare Sposta le celle a sinistra.

    Figura 7

In questo modo tutte le zone sono state adattate alle voci che contengono. Ecco la chicca di cui vi parlavo all'inizio del post.

Ma non è finita qui.
Nel prossimo post vedremo come impostare un ulteriore menu a tendina dipendente dalle selezioni fatte negli altri due menu.

Post precedente:

Menu a tendina o Convalida dati

7 commenti:

  1. ma se si volesse rendere il campo di convalida dati realmente dinamico?
    Mi spiego, se io ho in A1 un certo valore, su cui si base la scelta di A2
    Vorrei che replicando (copiando) la stessa cella A2 in B2, che questa si basi non su A1 ma su B1.
    Ho fatto varie prove ma sembra che le funzioni che sono permesse sulle celle non siano tutte replicabili sul comando della convalida fati... è forsenper questo che hanno inserito la funzione di copia nelle sottostanti celle simili?

    RispondiElimina
  2. Puoi copiare la cella che contiene la convalida dati nelle celle sottostanti e i riferimenti di cella si aggiornano. Non ho ben capito cosa intendi per "realmente dinamico".
    Attraverso la formula INDIRETTO, è possibile limitare la scelta del menu a tendina, condizionandola alla scelta effettuata nei menu precedenti. Prima di far questo, è necessario però creare le tabelle dei dati. Un'ulteriore spiegazione la trovi nel post successivo a questo.
    Ciao

    RispondiElimina
  3. Questo commento è stato eliminato dall'autore.

    RispondiElimina
  4. Lucia, con realmente dinamico intendo che non devo riscrivere tutte le volte la funzione se inserisco un'altra riga e anche utilizzando INDIRETTO dopo aver incollato la precedente riga mi riporta i dati della precedente riga e non della nuova che vado a creare; ovvero se copio Indiretto(A1) su B2 non lo cambia in Indiretto(A2), cosa che invece succede quando copio le celle "semplici".
    Comunque ti comunico che nel frattempo ho risolto il mio problema, ovvero spostando il codice "realmente dinamico" fuori dalla funzione di Convalida Dati, ovvero su una cella di appoggio qualsiasi ho scritto questo codice è [=INDIRETTO("A"&CELLA("riga"))&"R"] (la R finale serve a me per identificare il codice indiretto che è stato selezionato nella prima cella a sinistra), quindi in convalida dati faccio riferimento a "Indiretto(J1)"... attenzione, perchè se metto il codice che ho su scritto direttamente in convalida dati, mi dà errore (Excel 2013).
    Con questo metodo il sistema automaticamente carica i valori della tabella "prodotti" (in Bx) rilevanti per la tabella Categoria (in Ax) ogni qualvolta la Categoria viene modificata.
    Spero sia chiaro.
    Un saluto 369.

    RispondiElimina
  5. Post Scriptum: se ha te la funzione Incolla ti replica la Convalida Dati con il riferimento aggiornato alla nuova posizione vuol dire che usiamo 2 versioni differenti?

    RispondiElimina
    Risposte
    1. Io faccio così:
      in A1 - Convalida dati - Origine: =Categoria (Range di celle che contiene tutte le categorie)
      in B1 - Convalida dati - Origine: =INDIRETTO(A1)

      Poi trascino le celle A1 e B1 in giù e le celle in convalida si aggiornano:

      in A2 - Convalida dati - Origine: =Categoria
      in B2 - Convalida dati - Origine: =INDIRETTO(A2)

      Cancello il contenuto di queste celle copiate ma il menu a tendina resta. Ho anch'io Excel 2013 e ti assicuro che funziona.

      ciao

      Elimina
    2. ho provato e riprovato, ho trascinato, fatto copia e incolla semplice e speciale, a me l'indiretto punta alla casella di partenza, cioè quella copiata.
      Solo se trascino e muovo, cioè elimino la riga precedente allora funziona.
      Evidentemente devo aggiornare il service pack... cacchio, quanto mi ha fatto girare questo problemuccio!!!
      Grazie comunque, ciao.

      Elimina