Välj flera objekt från en rullgardinsmeny i Excel

En av mina kollegor frågade mig om det är möjligt att göra flera val i en rullgardinslista i Excel.

När du skapar en listruta kan du bara göra ett val. Om du väljer ett annat objekt ersätts det första med det nya urvalet.

Han ville göra flera val från samma rullgardinsmeny på ett sådant sätt att valen läggs till det redan nuvarande värdet i cellen.

Något som visas nedan på bilden:

Det finns inget sätt att göra detta med inbyggda Excel-funktioner.

Det enda sättet är att använda en VBA -kod, som körs när du gör ett val och lägger till det valda värdet till det befintliga värdet.

Titta på video - Så här väljer du flera objekt från en rullgardinsmeny i Excel

Hur man gör flera val i en rullgardinsmeny

I den här självstudien visar jag dig hur du gör flera val i en rullgardinsmeny i Excel (med upprepning och utan upprepning).

Detta har varit en av de mest populära Excel -självstudierna på den här webbplatsen. Eftersom jag får många liknande frågor har jag bestämt mig för att skapa en FAQ -sektion i slutet av denna handledning. Så om du har några frågor efter att ha läst detta, kolla in FAQ -sektionen först.

Det finns två delar för att skapa en rullgardinslista som tillåter flera val:

  • Skapa listrutan.
  • Lägga till VBA-koden till back-end.

Skapa rullgardinsmenyn i Excel

Här är stegen för att skapa en listruta i Excel:

  1. Markera cellen eller cellområdet där du vill att listrutan ska visas (C2 i detta exempel).
  2. Gå till Data -> Dataverktyg -> Datavalidering.
  3. I dialogrutan Datavalidering, på fliken inställningar, välj "Lista" som valideringskriterier.
  4. I fältet Källa väljer du cellerna som har de objekt du vill ha i rullgardinsmenyn.
  5. Klicka på OK.

Nu har cell C2 en rullgardinslista som visar objektnamnen i A2: A6.

Från och med nu har vi en rullgardinslista där du kan välja ett objekt i taget (som visas nedan).

För att aktivera den här rullgardinsmenyn så att vi kan göra flera val måste vi lägga till VBA-koden i bakänden.

De två följande avsnitten i den här självstudien ger dig VBA-koden för att tillåta flera val i listrutan (med och utan upprepning).

VBA-kod för att tillåta flera val i en rullgardinslista (med upprepning)

Nedan finns Excel VBA-koden som gör att vi kan välja mer än ett objekt från rullgardinsmenyn (tillåter upprepningar i urvalet):

Private Sub Worksheet_Change (ByVal Target As Range) 'Code by Sumit Bansal from https://trumpexcel.com' Att göra flera val i en rullgardinslista i Excel Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$ C $ 2" Då om Target.SpecialCells (xlCellTypeAllValidation) inte är något så går GoTo Exitsub Else: If Target.Value = "" Då går GoTo Exitsub Else Application.EnableEvents = False 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 måste du placera den här koden i en modul i VB Editor (som visas nedan i avsnittet "Var ska VBA -koden placeras").

När du har placerat den här koden i backend (täcks senare i den här självstudien) kan du göra flera val i rullgardinsmenyn (som visas nedan).

Observera att om du väljer ett objekt mer än en gång kommer det att skrivas in igen (upprepning är tillåten).

Prova själv … Ladda ner exempelfilen

VBA-kod för att tillåta flera val i en rullgardinslista (utan upprepning)

Många människor har frågat om koden för att välja flera objekt från en rullgardinslista utan upprepning.

Här är koden som ser till att ett objekt bara kan väljas en gång så att det inte upprepas:

Private Sub Worksheet_Change (ByVal Target As Range) 'Code by Sumit Bansal from https://trumpexcel.com' Att tillåta flera val i en rullgardinslista i Excel (utan upprepning) 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. Value Application.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr (1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & "," & Newvalue Else: Target.Value = Oldvalue Slut Om Slut Om Slut Om Slut Om Slut Om Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub

Nu måste du placera den här koden i en modul i VB Editor (som visas i nästa avsnitt i denna handledning).

Denna kod låter dig välja flera objekt från listrutan. Du kommer dock bara att kunna välja ett objekt en gång. Om du försöker välja det igen skulle ingenting hända (som visas nedan).

Prova själv … Ladda ner exempelfilen

Var ska man lägga VBA -koden

Innan du börjar använda den här koden i excel måste du lägga den i back-end, så att den avfyras när det blir någon förändring i rullgardinsmenyn.

Följ stegen nedan för att sätta VBA -koden i backend i Excel:

  1. Gå till fliken Utvecklare och klicka på Visual Basic (du kan också använda kortkommandot - Alt + F11). Detta öppnar Visual Basic Editor.
  2. Det ska finnas en Project Explorer -ruta till vänster (om den inte finns där, använd Ctrl + R för att göra den synlig).
  3. Dubbelklicka på kalkylbladets namn (i den vänstra rutan) där listrutan finns. Detta öppnar kodfönstret för det kalkylbladet.
  4. Kopiera och klistra in ovanstående kod i kodfönstret.
  5. Stäng VB -redigeraren.

När du nu går tillbaka till rullgardinsmenyn och gör val kan du göra flera val (som visas nedan):

Prova själv … Ladda ner exempelfilen

Notera: Eftersom vi använder en VBA -kod för att få detta gjort måste du spara arbetsboken med ett .xls- eller .xlsm -tillägg.

Vanliga frågor (FAQ)

Jag har skapat det här avsnittet för att svara på några av de vanligaste frågorna om denna handledning och VBA -koden. Om du har några frågor ber jag dig att gå igenom listan med frågor först.

F: I VBA -koden är funktionen endast för cell C2. Hur får jag det för andra celler? Svar: För att få denna rullgardinsmeny med flera val i andra celler måste du ändra VBA-koden i backend. Antag att du vill få detta för C2, C3 och C4, du måste ersätta följande rad i koden: If Target.Address = "$ C $ 2" Sedan med den här raden: If Target.Address = "$ C $ 2" Eller Target.Address = "$ C $ 3" ​​Eller Target.Address = "$ C $ 4" Sedan
F: Jag måste skapa flera listrutor i hela kolumnen 'C'. Hur får jag detta för alla celler i kolumnerna med flervalsfunktion? Svar: För att aktivera flera val i rullgardinsmenyer i en hel kolumn, ersätt följande rad i koden: Om Target.Address = "$ C $ 2" Sedan med den här raden: Om Target.Column = 3 Sedan På liknande rader, om du vill ha den här funktionen i kolumn C och D, använd raden nedan: Om Target.Column = 3 eller Target.Column = 4 Sedan
F: Jag måste skapa flera rullgardinsmenyer i rad. Hur kan jag göra detta? Svar: Om du behöver skapa rullgardinslistor med flera val i rad (låt oss säga den andra raden) måste du ersätta nedanstående kodrad: Om Target.Address = "$ C $ 2" Sedan med den här raden: Om Target.Row = 2 Sedan på samma sätt, om du vill att detta ska fungera för flera rader (låt oss säga andra och tredje raden), använd istället nedanstående kodrad: Om Target.Row = 2 eller Target.Row = 3 Sedan
F: Från och med nu separeras de flera markeringarna med ett kommatecken. Hur kan jag ändra detta för att separera dessa med mellanslag (eller någon annan separator). Svar: För att separera dessa med en annan separator än ett komma måste du ersätta följande rad med VBA -kod: Target.Value = Oldvalue & "," & Newvalue med denna rad med VBA -kod: Target.Value = Oldvalue & "" & Newvalue På samma sätt kan du använda följande kodrad om du vill ändra komma med ett annat tecken, till exempel |: Target.Value = Oldvalue & "|" & Newvalue
F: Kan jag få varje markering i en separat rad i samma cell? Svar: Ja du kan. För att få detta måste du ersätta nedanstående rad med VBA -kod: Target.Value = Oldvalue & "," & Newvalue med denna kodrad: Target.Value = Oldvalue & vbNewLine & Newvalue vbNewLine infogar en ny rad i samma cell . Så när du väljer ett ur rullgardinsmenyn infogas det i en ny rad.
F: Kan jag få flervalsfunktionen att fungera i ett skyddat ark? Svar: Ja du kan. För att få detta gjort måste du göra två saker: Lägg till följande rad i koden (strax efter DIM -satsen): Me.Protect UserInterfaceOnly: = True För det andra måste du se till att cellerna - som har rullgardinsmenyn med flera urvalsfunktioner - inte är låsta när du skyddar hela arket. Här är en handledning om hur du gör detta: Lås celler i Excel 
wave wave wave wave wave