Hur man gör flera val från en rullgardinslista i Excel (3 sätt) -

  • Dela Detta
Hugh West

Beroende på omständigheterna kan du behöva välja flera värden i en rullgardinslista. I den här handledningen kommer vi att visa dig hur du gör flera val i en rullgardinslista. För den här sessionen använder vi Excel 2019, men du kan gärna använda din favoritversion.

Innan vi går in i sessionen ska vi lära känna datasetet som ligger till grund för våra exempel.

Här har vi flera brevpapperselement, med hjälp av dessa skapar vi en rullgardinslista och väljer flera objekt där.

Observera att det är ett enkelt dataset för att hålla det enkelt. I ett praktiskt scenario kan det hända att du stöter på ett mycket större och mer komplicerat dataset.

Arbetsbok för praktiska övningar

Du är välkommen att ladda ner arbetsboken från länken nedan.

Gör flera val från en rullgardinslista.xlsm

Flera val i en rullgardinslista

Först och främst måste vi skapa en rullgardinslista med utgångspunkt i våra stationeries. Låt oss skapa den snabbt. Tveka inte att besöka artikeln om hur du skapar en rullgardinslista.

I Validering av data dialogrutan väljer du den LISTA datatyp och infoga cellintervallet för posterna.

B4:B11 är det område som innehåller brevpapperselement. Nu hittar du rullgardinslistan.

Läs mer: Excel Drop Down-lista beroende på val

1. Välj flera objekt (tillåter dubbelt val)

En vanlig rullgardinslista väljer alltid ett enda objekt. Här kan du se att vi har valt Penna från listan (bilden nedan).

Om vi nu väljer ett annat objekt, låt oss säga Blyertspenna

kommer det att ersätta det tidigare värdet. Endast Blyertspenna förblir vald.

För att välja flera objekt måste vi använda VBA kod. Öppna Microsoft Visual Basic för tillämpningar fönster (tryck på ALT + F11 för att öppna den).

Dubbelklicka nu på arbetsbladets namn eller nummer där du vill välja flera objekt i rullgardinslistan. Du kommer att få fram kodfönstret för just det arket.

Här är kodfönstret för Blad2 i vår arbetsbok (vi har rullgardinslistan i detta ark).

När kodfönstret har öppnats infogar du följande kod där

 Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String On Error GoTo Exitsub If Target.Address = "$D$4" 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.UndoOldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else Target.Value = Oldvalue & ", " & Newvalue End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub 

Spara koden och försök nu att välja värden i rullgardinslistan.

Efter att ha valt ut Blyertspenna , vi ska välja ett annat objekt Bärbar dator Som du kan se hittade vi båda föremålen (bilden nedan).

Med denna kod kan vi upprepa urvalet. Om vi till exempel väljer Blyertspenna igen,

hittar vi objektet igen i urvalsrutan.

Kod Förklaring

Vi har deklarerat två strängar Oldvalue och Nytt värde .

Du kan se att vi har gjort rullgardinslistan i D4 cell, därför är vår måladress D4 Dessutom har vi kontrollerat om cellen använder datavalidering eller inte med hjälp av Target.SpecialCells .

När ett värde väljs har vi stängt av händelser ( Application.EnableEvents = False ) så att ändringar inte utlöser händelsen igen. Sedan lagrade du det valda objektet i Nytt värde .

Efter att ha upphävt ändringen har vi satt värdet i Oldvalue Kontrollera sedan om Oldvalue är tomt eller inte. Om det är tomt (vilket innebär att endast ett värde är valt), återges Nytt värde I annat fall sammanfogas Oldvalue och Nytt värde .

Innan du avslutar återställer händelsen, så att vi kan ändra om det behövs.

Läs mer: Flera beroende Drop-Down-lista Excel VBA

2. Välj flera objekt från rullgardinslistan (endast unikt val)

I det tidigare avsnittet har vi sett flera val där upprepning var tillåten. Om du inte vill ha det, följ det här avsnittet.

För enkelhetens skull använde vi ett separat blad för denna demonstration. Den här gången är vi på blad3. Skriv följande kod i kodfönstret för detta blad.

 Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.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 End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub 

Finns det någon skillnad jämfört med den tidigare koden? Titta närmare, du kommer att kunna se den lilla skillnaden.

Här har vi använt en VBA funktion som kallas INSTR . INSTR funktionen returnerar positionen för den första förekomsten av en delsträng i en sträng. Besök artikeln INSTR för mer information.

Genom att använda denna logiska operation med InStr(1, Oldvalue, Newvalue) = 0 har vi kontrollerat om värdena har hittats eller inte. Om den logiska operationen ger TRUE (inte funnen tidigare) så kan man välja objektet och sammanfoga det med det tidigare värdet.

Spara koden och försök nu att välja ett objekt som redan har valts.

Här har vi redan valt Blyertspenna Om vi vill välja det igen kan vi inte göra det. Det går inte att använda dubbla värden.

Läs mer: Hur man skapar en listrista från ett annat ark i Excel

3. Välj objekt på ny linje

Hittills har vi sett att objekten är separerade med ett kommatecken. I det här avsnittet kommer vi att ordna de valda objekten med nya rader.

För enkelhetens skull slår vi samman några celler med den D4 cell. För att göra det markerar du de celler som du vill slå ihop och klickar på Sammanfoga & Centrera från Anpassning i avsnittet i Hem fliken.

Cellen kommer att få mer höjd.

Låt oss nu titta på koden för att separera objekt med en ny rad. Använd följande kod

 Private Sub Worksheet_Change(ByVal Target As Range) Dim Oldvalue As String Dim Newvalue As String Application.EnableEvents = True On Error GoTo Exitsub If Target.Address = "$D$4" Then If Target.SpecialCells(xlCellTypeAllValidation) Is Nothing Then GoTo Exitsub Else: If Target.Value = "" Then GoTo Exitsub Else Application.EnableEvents = False Newvalue = Target.ValueApplication.Undo Oldvalue = Target.Value If Oldvalue = "" Then Target.Value = Newvalue Else If InStr(1, Oldvalue, Newvalue) = 0 Then Target.Value = Oldvalue & vbNewLine & Newvalue Else: Target.Value = Oldvalue End If End If End If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub 

Den enda skillnaden från den tidigare koden är att vi den här gången använder vbNewLine mellan OldValue och NewValue .

vbNewLine ger en ny linje mellan punkterna.

Välj nu de objekt du vill ha.

Vi väljer ett objekt Penna som visas i bilden ovan. Välj nu ett annat element.

Du kommer att se att de två artiklarna är i olika rader.

Här har vi två värden som står på två olika rader. Om du väljer ett annat värde läggs det till på en annan rad. Varje värde kommer att stå på en ny rad.

Observera att om du vill ha en annan avgränsare för att skilja posterna åt, använd den inom dubbla citattecken i stället för vbNewline .

Slutsats

Det var allt för idag. Vi har listat flera metoder för att göra flera val i en rullgardinslista. Hoppas att du tycker att det här är till hjälp. Kommentera gärna om något verkar svårt att förstå. Låt oss veta om vi har missat några andra metoder här.

Hugh West är en mycket erfaren Excel-tränare och analytiker med över 10 års erfarenhet i branschen. Han har en kandidatexamen i redovisning och ekonomi och en magisterexamen i företagsekonomi. Hugh har en passion för undervisning och har utvecklat ett unikt undervisningssätt som är lätt att följa och förstå. Hans expertkunskap om Excel har hjälpt tusentals studenter och yrkesverksamma över hela världen att förbättra sina färdigheter och utmärka sig i sina karriärer. Genom sin blogg delar Hugh med sig av sin kunskap med världen, och erbjuder gratis Excel-handledning och onlineutbildning för att hjälpa individer och företag att nå sin fulla potential.