En af mine kolleger spurgte mig, om det er muligt at foretage flere valg i en rulleliste i Excel.
Når du opretter en rulleliste, kan du kun foretage ét valg. Hvis du vælger et andet element, erstattes det første med det nye valg.
Han ønskede at foretage flere markeringer fra det samme drop down på en sådan måde, at valgene tilføjes til den allerede nuværende værdi i cellen.
Noget som vist herunder på billedet:
Du kan ikke gøre dette med Excel-indbyggede funktioner.
Den eneste måde er at bruge en VBA -kode, der kører, når du foretager et valg og tilføjer den valgte værdi til den eksisterende værdi.
Se video - Sådan vælges flere elementer fra en Excel -rulleliste
Sådan foretages flere valg i en rulleliste
I denne vejledning viser jeg dig, hvordan du foretager flere valg i en Excel-rulleliste (med gentagelse og uden gentagelse).
Dette har været en af de mest populære Excel -øvelser på dette websted. Da jeg får mange lignende spørgsmål, har jeg besluttet at oprette en FAQ -sektion i slutningen af denne vejledning. Så hvis du har spørgsmål efter at have læst dette, skal du først tjekke FAQ -sektionen.Der er to dele til at oprette en rulleliste, der tillader flere valg:
- Oprettelse af rullelisten.
- Tilføjelse af VBA-koden til back-end.
Oprettelse af rullelisten i Excel
Her er trinene til at oprette en rulleliste i Excel:
- Vælg cellen eller celleområdet, hvor du vil have rullelisten vist (C2 i dette eksempel).
- Gå til Data -> Dataværktøjer -> Datavalidering.
- I dialogboksen Datavalidering, under fanen Indstillinger, skal du vælge 'Liste' som valideringskriterier.
- I feltet Kilde skal du markere de celler, der har de ønskede elementer i rullemenuen.
- Klik på OK.
Nu har celle C2 en rulleliste, der viser elementnavnene i A2: A6.
Fra nu af har vi en rulleliste, hvor du kan vælge et element ad gangen (som vist nedenfor).
For at aktivere denne rullemenu, så vi kan foretage flere valg, skal vi tilføje VBA-koden i bagenden.
De næste to sektioner af denne vejledning giver dig VBA-koden til at tillade flere valg i rullelisten (med og uden gentagelse).
VBA-kode til at tillade flere markeringer i en rulleliste (med gentagelse)
Nedenfor er Excel VBA-koden, der gør det muligt for os at vælge mere end et element fra rullelisten (hvilket tillader gentagelser i udvælgelsen):
Private Sub Worksheet_Change (ByVal Target As Range) 'Code by Sumit Bansal from https://trumpexcel.com' For at foretage flere valg i en rulleliste i Excel Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$ C $ 2" Så hvis Target.SpecialCells (xlCellTypeAllValidation) ikke er noget, så gå til Exitsub Else: Hvis Target.Value = "" Så går GoTo Exitsub Else Application.EnableEvents = Falsk Newvalue = Target.Value Application.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else Target.Value = Oldvalue & "," & Newvalue End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Nu skal du placere denne kode i et modul i VB Editor (som vist nedenfor i afsnittet 'Hvor skal VBA -koden placeres').
Når du har placeret denne kode i backend (dækket senere i denne vejledning), giver den dig mulighed for at foretage flere valg i rullemenuen (som vist nedenfor).
Bemærk, at hvis du vælger et element mere end én gang, vil det blive indtastet igen (gentagelse er tilladt).
Prøv det selv … Download eksempelfilen
VBA-kode til at tillade flere markeringer i en rulleliste (uden gentagelse)
Mange mennesker har spurgt om koden for at vælge flere elementer fra en rulleliste uden gentagelse.
Her er koden, der sikrer, at et element kun kan vælges én gang, så der ikke er gentagelser:
Private Sub Worksheet_Change (ByVal Target As Range) 'Code by Sumit Bansal from https://trumpexcel.com' To allow multiple select in a Drop Down List in Excel (without repetition) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$ C $ 2" Then If Target.SpecialCells (xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target. Værdi Application.Undo Oldvalue = Target.Value If Oldvalue = "" Herefter Target.Value = Newvalue Else If InStr (1, Oldvalue, Newvalue) = 0 Herefter Target.Value = Oldvalue & "," & Newvalue Else: Target.Value = Oldvalue End If End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Nu skal du placere denne kode i et modul i VB Editor (som vist i det næste afsnit af denne vejledning).
Denne kode giver dig mulighed for at vælge flere elementer fra rullelisten. Du vil dog kun kunne vælge et element én gang. Hvis du prøver at vælge det igen, ville der ikke ske noget (som vist herunder).
Prøv det selv … Download eksempelfilen
Hvor skal man placere VBA -koden
Inden du begynder at bruge denne kode i excel, skal du sætte den i back-end, så den bliver affyret, når der er ændringer i rullemenuen.
Følg nedenstående trin for at sætte VBA -koden i backend i Excel:
- Gå til fanen Udvikler, og klik på Visual Basic (du kan også bruge tastaturgenvejen - Alt + F11). Dette åbner Visual Basic Editor.
- Der skal være en Project Explorer -rude til venstre (hvis den ikke er der, skal du bruge Ctrl + R for at gøre den synlig).
- Dobbeltklik på regnearksnavn (i venstre rude), hvor rullelisten findes. Dette åbner kodevinduet for det pågældende regneark.
- Kopier og indsæt ovenstående kode i kodevinduet.
- Luk VB Editor.
Når du nu går tilbage til rullemenuen og foretager valg, giver den dig mulighed for at foretage flere valg (som vist herunder):
Prøv det selv … Download eksempelfilen
Bemærk: Da vi bruger en VBA -kode til at få dette gjort, skal du gemme projektmappen med en .xls- eller .xlsm -udvidelse.
Ofte stillede spørgsmål
Jeg har oprettet dette afsnit for at besvare nogle af de mest stillede spørgsmål om denne vejledning og VBA -koden. Hvis du har spørgsmål, beder jeg dig om først at gennemgå denne liste med forespørgsler.
Q: I VBA -koden er funktionaliteten kun for celle C2. Hvordan får jeg det til andre celler? Sv: For at få denne rulleliste med flere valg i andre celler, skal du ændre VBA-koden i backend. Antag, at du vil have dette til C2, C3 og C4, du skal udskifte følgende linje i koden: If Target.Address = "$ C $ 2" Så med denne linje: If Target.Address = "$ C $ 2" Eller Target.Address = "$ C $ 3" Eller Target.Address = "$ C $ 4" Så
Q: Jeg skal oprette flere rullelister i hele kolonnen 'C'. Hvordan får jeg dette til alle cellerne i kolonnerne med multi-select funktionalitet? Svar: Hvis du vil aktivere flere valg i rullemenuer i en hel kolonne, skal du erstatte følgende linje i koden: Hvis Target.Address = "$ C $ 2" Så med denne linje: Hvis Target.Column = 3 derefter På lignende linjer, hvis du vil have denne funktionalitet i kolonne C og D, skal du bruge nedenstående linje: Hvis Target.Column = 3 eller Target.Column = 4 Herefter
Q: Jeg skal oprette flere rullelister i træk. Hvordan kan jeg gøre dette? Sv: Hvis du har brug for at oprette rullelister med flere valg i træk (lad os sige den anden række), skal du erstatte nedenstående kodelinje: Hvis Target.Address = "$ C $ 2" Så med denne linje: Hvis Target.Row = 2 Så på samme måde, hvis du vil have dette til at fungere for flere rækker (lad os sige anden og tredje række), skal du bruge nedenstående kodelinje i stedet: Hvis Target.Row = 2 eller Target.Row = 3 Herefter
Sp: Fra nu af er adskillige markeringer adskilt med et komma. Hvordan kan jeg ændre dette for at adskille disse med mellemrum (eller en anden separator). Sv: For at adskille disse med en anden separator end et komma, skal du erstatte følgende linje med VBA -kode: Target.Value = Oldvalue & "," & Newvalue med denne linje af VBA -kode: Target.Value = Oldvalue & "" & Ny værdi På samme måde, hvis du vil ændre komma med et andet tegn, f.eks. |, Kan du bruge følgende kodelinje: Target.Value = Oldvalue & "|" & Newvalue
Sp .: Kan jeg få hvert valg i en separat linje i den samme celle? Sv: Ja det kan du. For at få dette skal du erstatte nedenstående linje med VBA -kode: Target.Value = Oldvalue & "," & Newvalue med denne kodelinje: Target.Value = Oldvalue & vbNewLine & Newvalue vbNewLine indsætter en ny linje i den samme celle . Så når du foretager et valg fra rullemenuen, indsættes det i en ny linje.
Sp .: Kan jeg få funktionaliteten til flere valg til at fungere i et beskyttet ark? Sv: Ja det kan du. For at få dette gjort skal du gøre to ting: Tilføj følgende linje i koden (lige efter DIM -sætningen): Me.Protect UserInterfaceOnly: = True For det andet skal du sikre dig, at cellerne - der har rullemenuen med flere markeringsfunktioner - ikke er låst, når du beskytter hele arket. Her er en vejledning i, hvordan du gør dette: Lås celler i Excel