Elenco a discesa con selezione multipla

Il classico elenco a discesa in un foglio Excel è ottimo, ma ti consente solo di selezionare un'opzione dal set presentato. A volte questo è esattamente quello che vuoi, ma ci sono situazioni in cui l'utente deve essere in grado di scegliere alcuni elementi della lista.

Diamo un'occhiata a diverse implementazioni tipiche di un tale elenco di selezione multipla.

Opzione 1. Orizzontale

L'utente seleziona gli elementi dall'elenco a discesa uno per uno e vengono visualizzati a destra della cella modificata, automaticamente elencati orizzontalmente:

Gli elenchi a discesa nelle celle C2:C5 in questo esempio vengono creati in modo standard, ad es

  1. selezionare le celle C2:C5
  2. scheda o menu Dati scegli una squadra Convalida dati
  3. nella finestra che si apre, seleziona un'opzione Lista e specificare come intervallo Fonte celle con dati di origine per l'elenco A1:A8

Quindi è necessario aggiungere una macro al modulo del foglio, che farà tutto il lavoro principale, ovvero aggiungere i valori selezionati a destra delle celle verdi. Per fare ciò, fare clic con il tasto destro del mouse sulla scheda del foglio con gli elenchi a discesa e selezionare il comando Codice sorgente. Incolla il codice seguente nella finestra dell'editor di Visual Basic che si apre:

Private Sub Worksheet_Change(ByVal Target As Range) In caso di errore Riprendi successivo se non interseca(Target, Range("C2:C5")) non è nulla e Target.Cells.Count = 1 Quindi Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Quindi Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Se necessario, sostituire l'intervallo sensibile degli elenchi a discesa C2:C5 nella seconda riga di questo codice con il proprio.

Opzione 2. Verticale

Lo stesso della versione precedente, ma i nuovi valori selezionati non vengono aggiunti a destra, ma in basso:

Viene eseguito esattamente allo stesso modo, ma il codice della macro del gestore cambia leggermente:

Private Sub Worksheet_Change(ByVal Target As Range) In caso di errore Riprendi successivo se non interseca(Target, Range("C2:F2")) non è nulla e Target.Cells.Count = 1 Quindi Application.EnableEvents = False If Len(Target.Offset (1, 0)) = 0 Quindi Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Di nuovo, se necessario, sostituisci l'intervallo sensibile degli elenchi a discesa C2:F2 con il tuo nella seconda riga di questo codice.

Opzione 3. Con accumulo nella stessa cella

In questa opzione, l'accumulo avviene nella stessa cella in cui si trova l'elenco a discesa. Gli elementi selezionati sono separati da un dato carattere (ad esempio una virgola):

Gli elenchi a discesa nelle celle verdi vengono creati in modo completamente standard, come nei metodi precedenti. Tutto il lavoro viene svolto, ancora, da una macro nel modulo foglio:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Fine Sub  

Se lo si desidera, è possibile sostituire il carattere separatore (virgola) nella nona riga di codice con il proprio (ad esempio uno spazio o un punto e virgola).

  • Come creare un semplice elenco a discesa in una cella di un foglio Excel
  • Elenco a discesa con contenuto
  • Elenco a discesa con opzioni mancanti aggiunte
  • Cosa sono le macro, come usarle, dove inserire codice macro in Visual Basic

Lascia un Commento