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
- selezionare le celle C2:C5
- scheda o menu Dati scegli una squadra Convalida dati
- 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