Vai al contenuto principale

Seleziona più elementi nell'elenco a discesa di Excel: guida completa

Gli elenchi a discesa di Excel sono uno strumento fantastico per garantire la coerenza dei dati e la facilità di immissione. Tuttavia, per impostazione predefinita, ti limitano a selezionare un solo elemento. Ma cosa succede se devi selezionare più elementi dallo stesso elenco a discesa? Questa guida completa esplorerà i metodi per abilitare selezioni multiple negli elenchi a discesa di Excel, gestire i duplicati, impostare separatori personalizzati e definire l'ambito di questi elenchi.

Consiglio: prima di applicare i seguenti metodi, assicurati di aver creato in anticipo elenchi a discesa nei tuoi fogli di lavoro. Se vuoi sapere come creare elenchi a discesa di convalida dei dati, segui le istruzioni in questo articolo: Come creare elenchi a discesa di convalida dei dati in Excel.

Abilitazione di selezioni multiple nell'elenco a discesa

Questa sezione fornisce due metodi per aiutarti ad abilitare più selezioni nell'elenco a discesa in Excel.

Utilizzando il codice VBA

Per consentire selezioni multiple nell'elenco a discesa, è possibile utilizzare Visual Basic, Applications Edition (VBA) in Excel. Lo script può modificare il comportamento di un elenco a discesa per renderlo un elenco a scelta multipla. Si prega di fare quanto segue.

Passaggio 1: aprire l'editor del foglio (codice).
  1. Apri il foglio di lavoro che contiene l'elenco a discesa per il quale desideri abilitare la selezione multipla.
  2. Fare clic con il tasto destro sulla scheda del foglio e selezionare Visualizza codice dal menu di scelta rapida.
Passaggio 2: utilizza il codice VBA

Ora copia il seguente codice VBA e incollalo nella finestra del foglio di apertura (Codice).

Codice VBA: abilita più selezioni nell'elenco a discesa di Excel.

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    Dim delimiter As String
    Dim TargetRange As Range

    Set TargetRange = Me.UsedRange ' Users can change target range here
    delimiter = ", " ' Users can change the delimiter here

    If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
    On Error Resume Next
    Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then Exit Sub
    Application.EnableEvents = False

    xValue2 = Target.Value
    Application.Undo
    xValue1 = Target.Value
    Target.Value = xValue2
    If xValue1 <> "" And xValue2 <> "" Then
        If Not (xValue1 = xValue2 Or _
                InStr(1, xValue1, delimiter & xValue2) > 0 Or _
                InStr(1, xValue1, xValue2 & delimiter) > 0) Then
            Target.Value = xValue1 & delimiter & xValue2
        Else
            Target.Value = xValue1
        End If
    End If

    Application.EnableEvents = True
    On Error GoTo 0
End Sub

Risultato

Quando torni al foglio di lavoro, l'elenco a discesa ti consentirà di scegliere più opzioni, vedere la demo di seguito:

Note:
Il codice VBA sopra:
  • Si applica a tutti gli elenchi a discesa di convalida dei dati nel foglio di lavoro corrente, sia esistenti che quelli creati in futuro.
  • Impedisce di selezionare lo stesso elemento più di una volta in ciascun elenco a discesa.
  • Utilizza la virgola come separatore per gli elementi selezionati. Per utilizzare altri delimitatori, per favore visualizzare questa sezione per modificare il separatore.

Utilizzando Kutools per Excel in pochi clic

Se non ti senti a tuo agio con VBA, un'alternativa più semplice è Kutools for Excel's Elenco a discesa a selezione multipla caratteristica. Questo strumento intuitivo semplifica l'attivazione di selezioni multiple negli elenchi a discesa, offrendo vari ambiti come un intervallo specifico, il foglio di lavoro corrente, l'intera cartella di lavoro o tutte le cartelle di lavoro aperte. Inoltre, ti consente di personalizzare il separatore e gestire i duplicati senza sforzo per soddisfare le tue diverse esigenze.

Dopo shavasana, sedersi in silenzio; saluti; installazione di Kutools per Excel, Andare al Kutools scheda, selezionare Menu `A tendina > Elenco a discesa a selezione multipla. Quindi è necessario configurare come segue.

  1. Specifica dove desideri applicare questa funzionalità nel file Imposta ambito .
  2. Specificare il separatore per gli elementi selezionati in una cella.
  3. Decidi la direzione del testo.
  4. Clicchi OK.
Risultato

Ora, quando fai clic su una cella con un elenco a discesa, accanto ad essa verrà visualizzata una casella di riepilogo. Fai semplicemente clic sul pulsante "+" accanto agli elementi per aggiungerli alla cella a discesa e fai clic sul pulsante "-" per rimuovere tutti gli elementi che non desideri. Guarda la demo qui sotto:

Note:: Per applicare questa funzione, per favore scarica e installa Kutools per Excel prima.

Ulteriori operazioni per l'elenco a discesa a selezione multipla

Questa sezione raccoglie i diversi scenari che potrebbero essere richiesti quando si abilitano più selezioni nell'elenco a discesa Convalida dati.


Consentire elementi duplicati nell'elenco a discesa

I duplicati possono rappresentare un problema quando sono consentite più selezioni in un elenco a discesa. Il codice VBA sopra non consente elementi duplicati nell'elenco a discesa. Se devi conservare elementi duplicati, prova il codice VBA in questa sezione.

Codice VBA: consenti duplicati nell'elenco a discesa di convalida dei dati

Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20240118
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    Dim delimiter As String
    Dim TargetRange As Range

    Set TargetRange = Me.UsedRange ' Users can change target range here
    delimiter = ", " ' Users can change the delimiter here

    If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
    On Error Resume Next
    Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then Exit Sub
    Application.EnableEvents = False

    xValue2 = Target.Value
    Application.Undo
    xValue1 = Target.Value
    Target.Value = xValue2
    If xValue1 <> "" And xValue2 <> "" Then
        Target.Value = xValue1 & delimiter & xValue2
    End If

    Application.EnableEvents = True
    On Error GoTo 0
End Sub
Risultato

Ora puoi selezionare più elementi dagli elenchi a discesa nel foglio di lavoro corrente. Per ripetere un elemento in una cella dell'elenco a discesa, continua a selezionare l'elemento dall'elenco. Vedi schermata:


Rimozione di eventuali elementi esistenti dall'elenco a discesa

Dopo aver selezionato più elementi da un elenco a discesa, a volte potrebbe essere necessario rimuovere un elemento esistente dalla cella dell'elenco a discesa. Questa sezione fornisce un'altra parte di codice VBA per aiutarti a eseguire questa attività.

Codice VBA: rimuovi tutti gli elementi esistenti dalla cella dell'elenco a discesa

Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20240118
    Dim xRngDV As Range
    Dim TargetRange As Range
    Dim oldValue As String
    Dim newValue As String
    Dim delimiter As String
    Dim allValues As Variant
    Dim valueExists As Boolean
    Dim i As Long
    Dim cleanedValue As String

    Set TargetRange = Me.UsedRange ' Set your specific range here
    delimiter = ", " ' Set your desired delimiter here

    If Target.CountLarge > 1 Then Exit Sub

    ' Check if the change is within the specific range
    If Intersect(Target, TargetRange) Is Nothing Then Exit Sub

    On Error Resume Next
    Set xRngDV = Target.SpecialCells(xlCellTypeAllValidation)
    If xRngDV Is Nothing Or Target.Value = "" Then
        ' Skip if there's no data validation or if the cell is cleared
        Application.EnableEvents = True
        Exit Sub
    End If
    On Error GoTo 0

    If Not Intersect(Target, xRngDV) Is Nothing Then
        Application.EnableEvents = False
        newValue = Target.Value
        Application.Undo
        oldValue = Target.Value
        Target.Value = newValue

        ' Split the old value by delimiter and check if new value already exists
        allValues = Split(oldValue, delimiter)
        valueExists = False
        For i = LBound(allValues) To UBound(allValues)
            If Trim(allValues(i)) = newValue Then
                valueExists = True
                Exit For
            End If
        Next i

        ' Add or remove value based on its existence
        If valueExists Then
            ' Remove the value
            cleanedValue = ""
            For i = LBound(allValues) To UBound(allValues)
                If Trim(allValues(i)) <> newValue Then
                    If cleanedValue <> "" Then cleanedValue = cleanedValue & delimiter
                    cleanedValue = cleanedValue & Trim(allValues(i))
                End If
            Next i
            Target.Value = cleanedValue
        Else
            ' Add the value
            If oldValue <> "" Then
                Target.Value = oldValue & delimiter & newValue
            Else
                Target.Value = newValue
            End If
        End If

        Application.EnableEvents = True
    End If
End Sub
Risultato

Questo codice VBA ti consente di selezionare più elementi da un elenco a discesa e rimuovere facilmente qualsiasi elemento che hai già scelto. Dopo aver selezionato più elementi, se desideri rimuoverne uno specifico, selezionalo semplicemente nuovamente dall'elenco.


Impostazione di un separatore personalizzato

Il delimitatore è impostato come virgola nei codici VBA sopra. È possibile modificare questa variabile con qualsiasi carattere preferito da utilizzare come separatore per le selezioni dell'elenco a discesa. Ecco come puoi fare:

Come puoi vedere, i codici VBA sopra hanno tutti la seguente riga:

delimiter = ", "

Devi solo cambiare la virgola in qualsiasi separatore di cui hai bisogno. Ad esempio, se desideri separare gli elementi tramite punto e virgola, modifica la riga in:

delimiter = "; "
Nota: per modificare il delimitatore in un carattere di nuova riga in questi codici VBA, modificare questa riga in:
delimiter = vbNewLine

Impostazione di un intervallo specificato

I codici VBA sopra riportati si applicano a tutti gli elenchi a discesa nel foglio di lavoro corrente. Se desideri che i codici VBA si applichino solo a un determinato intervallo di elenchi a discesa, puoi specificare l'intervallo nel codice VBA sopra come segue.

Come puoi vedere, i codici VBA sopra hanno tutti la seguente riga:

Set TargetRange = Me.UsedRange

Devi solo cambiare la riga in:

Set TargetRange = Me.Range("C2:C10")
Note:: Qui C2: C10 è l'intervallo contenente l'elenco a discesa che si desidera impostare come selezioni multiple.

Esecuzione in un foglio di lavoro protetto

Immagina di aver protetto un foglio di lavoro con la password "123" e imposta le celle dell'elenco a discesa su "Sbloccato" prima di attivare la protezione, garantendo così che la funzione di selezione multipla rimanga attiva dopo la protezione. Tuttavia, i codici VBA menzionati sopra non possono funzionare in questo caso e questa sezione descrive un altro script VBA specificamente progettato per gestire la funzionalità di selezione multipla in un foglio di lavoro protetto.

Codice VBA: abilita la selezione multipla nell'elenco a discesa senza duplicati


Private Sub Worksheet_Change(ByVal Target As Range)
    'Updated by Extendoffice 20240118
    Dim xRng As Range
    Dim xValue1 As String
    Dim xValue2 As String
    Dim delimiter As String
    Dim TargetRange As Range
    Dim isProtected As Boolean
    Dim pswd As Variant

    Set TargetRange = Me.UsedRange ' Set your specific range here
    delimiter = ", " ' Users can change the delimiter here

    If Target.Count > 1 Or Intersect(Target, TargetRange) Is Nothing Then Exit Sub
    
    ' Check if sheet is protected
    isProtected = Me.ProtectContents
    If isProtected Then
        ' If protected, temporarily unprotect. Adjust or remove the password as needed.
        pswd = "yourPassword" ' Change or remove this as needed
        Me.Unprotect Password:=pswd
    End If

    On Error Resume Next
    Set xRng = TargetRange.SpecialCells(xlCellTypeAllValidation)
    If xRng Is Nothing Then
        If isProtected Then Me.Protect Password:=pswd
        Exit Sub
    End If
    Application.EnableEvents = False

    xValue2 = Target.Value
    Application.Undo
    xValue1 = Target.Value
    Target.Value = xValue2
    If xValue1 <> "" And xValue2 <> "" Then
        If Not (xValue1 = xValue2 Or _
                InStr(1, xValue1, delimiter & xValue2) > 0 Or _
                InStr(1, xValue1, xValue2 & delimiter) > 0) Then
            Target.Value = xValue1 & delimiter & xValue2
        Else
            Target.Value = xValue1
        End If
    End If

    Application.EnableEvents = True
    On Error GoTo 0

    ' Re-protect the sheet if it was protected
    If isProtected Then
        Me.Protect Password:=pswd
    End If
End Sub
Note:: Nel codice, assicurati di sostituire “la tua password" nella riga pswd = "la tua password" con la password effettiva utilizzata per proteggere il foglio di lavoro. Ad esempio, se la tua password è "abc123", la linea dovrebbe essere pswd = "abc123".

Abilitando selezioni multiple negli elenchi a discesa di Excel, puoi migliorare notevolmente la funzionalità e la flessibilità dei tuoi fogli di lavoro. Che tu abbia dimestichezza con la codifica VBA o preferisca una soluzione più semplice come Kutools, ora hai la capacità di trasformare i tuoi elenchi a discesa standard in strumenti dinamici a selezione multipla. Con queste competenze, ora sei in grado di creare documenti Excel più dinamici e intuitivi. Per coloro che desiderano approfondire le funzionalità di Excel, il nostro sito Web vanta numerosi tutorial. Scopri altri suggerimenti e trucchi per Excel qui.

I migliori strumenti per la produttività in ufficio

Funzioni popolari: Trova, evidenzia o identifica i duplicati   |  Elimina righe vuote   |  Combina colonne o celle senza perdere dati   |   Round senza formula ...
Super ricerca: VLookup a criteri multipli    VLookup a valori multipli  |   VLookup su più fogli   |   Ricerca fuzzy ....
Elenco a discesa avanzato: Crea rapidamente un elenco a discesa   |  Elenco a discesa dipendente   |  Elenco a discesa a selezione multipla ....
Gestore di colonna: Aggiungi un numero specifico di colonne  |  Sposta colonne  |  Attiva/disattiva lo stato di visibilità delle colonne nascoste  |  Confronta intervalli e colonne ...
Funzionalità in primo piano: Messa a fuoco della griglia   |  Vista di progettazione   |   Grande barra delle formule    Gestore di cartelle di lavoro e fogli   |  Resource Library (Testo automatico)   |  Date picker   |  Combina fogli di lavoro   |  Crittografa/decrittografa le celle    Invia e-mail per elenco   |  Super filtro   |   Filtro speciale (filtro grassetto/corsivo/barrato...) ...
I 15 migliori set di strumenti12 Testo Strumenti (aggiungi testo, Rimuovi personaggi, ...)   |   Più di 50 Grafico Tipi (Diagramma di Gantt, ...)   |   40+ Pratico Formule (Calcola l'età in base al compleanno, ...)   |   19 Inserimento Strumenti (Inserisci il codice QR, Inserisci immagine dal percorso, ...)   |   12 Conversione Strumenti (Numeri in parole, Conversione di valuta, ...)   |   7 Unisci e dividi Strumenti (Combina righe avanzate, Celle divise, ...)   |   ... e altro ancora

Potenzia le tue competenze di Excel con Kutools per Excel e sperimenta l'efficienza come mai prima d'ora. Kutools per Excel offre oltre 300 funzionalità avanzate per aumentare la produttività e risparmiare tempo.  Fai clic qui per ottenere la funzionalità di cui hai più bisogno...

scheda kte 201905


Office Tab porta l'interfaccia a schede in Office e semplifica notevolmente il tuo lavoro

  • Abilita la modifica e la lettura a schede in Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
  • Apri e crea più documenti in nuove schede della stessa finestra, piuttosto che in nuove finestre.
  • Aumenta la produttività del 50% e riduce ogni giorno centinaia di clic del mouse!