Välj flera objekt i Excel-rullgardinslistan – fullständig guide
Excel-rullgardinslistor är ett fantastiskt verktyg för att säkerställa datakonsistens och enkel inmatning. Men som standard begränsar de dig till att bara välja ett objekt. Men vad händer om du behöver välja flera objekt från samma rullgardinslista? Den här omfattande guiden kommer att utforska metoder för att möjliggöra flera val i Excel-rullgardinslistor, hantera dubbletter, ställa in anpassade avgränsare och definiera omfattningen av dessa listor.
- Tillåter dubbletter av objekt
- Ta bort befintliga föremål
- Ställa in en anpassad separator
- Ställa in ett specificerat område
- Kör i ett skyddat kalkylblad
Aktivera flera val i listrutan
Det här avsnittet innehåller två metoder som hjälper dig att aktivera flera val i rullgardinsmenyn i Excel.
Använder VBA-kod
För att tillåta flera val i rullgardinslistan kan du använda Visual Basic för applikationer (VBA) i Excel. Skriptet kan ändra beteendet hos en rullgardinslista för att göra den till en flervalslista. Vänligen gör enligt följande.
Steg 1: Öppna arkredigeraren (kod).
- Öppna kalkylbladet som innehåller den nedrullningsbara listan för vilken du vill aktivera flerval.
- Högerklicka på arkfliken och välj Visa kod från snabbmenyn.
Steg 2: Använd VBA-kod
Kopiera nu följande VBA-kod och klistra in den i öppningsarket (Kod)-fönstret.
VBA-kod: Aktivera flera val i Excel-rullgardinslistan.
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
Resultat
När du återvänder till arbetsbladet kommer rullgardinsmenyn att göra det möjligt för dig att välja flera alternativ, se demon nedan:
Ovanstående VBA-kod:
- Gäller alla rullgardinslistor för datavalidering i det aktuella kalkylbladet, både befintliga och de som skapas i framtiden.
- Hindrar dig från att välja samma objekt mer än en gång i varje rullgardinslista.
- Använder kommatecken som avgränsare för de markerade objekten. För att använda andra avgränsare, vänligen visa det här avsnittet för att ändra avgränsaren.
Använda Kutools för Excel med några få klick
Om du inte är bekväm med VBA är ett enklare alternativ Kutools för Excel's Multi-select rullgardinslista funktion. Detta användarvänliga verktyg förenklar att möjliggöra flera val i rullgardinslistor, så att du kan anpassa separatorn och hantera dubbletter utan ansträngning för att möta dina olika behov.
Efter installera Kutools för ExcelGå till Kutools fliken, välj Listruta > Multi-select rullgardinslista. Sedan måste du konfigurera enligt följande.
- Ange intervallet som innehåller rullgardinsmenyn från vilket du behöver välja flera objekt.
- Ange separator för de markerade objekten i listrutan.
- Klicka OK för att slutföra inställningarna.
Resultat
När du nu klickar på en cell med en rullgardinslista i det angivna intervallet, visas en listruta bredvid den. Klicka bara på "+"-knappen bredvid objekten för att lägga till dem i rullgardinsmenyn och klicka på "-"-knappen för att ta bort alla objekt som du inte vill ha längre. Se demon nedan:
- Kontrollera Radbryt text efter att ha infogat en avskiljare alternativet om du vill visa de markerade objekten vertikalt i cellen. Om du föredrar en horisontell listning, lämna det här alternativet omarkerat.
- Kontrollera Aktivera sökning alternativet om du vill lägga till ett sökfält i din rullgardinslista.
- För att tillämpa den här funktionen, vänligen ladda ner och installera Kutools för Excel först.
Fler operationer för flervalslista
Det här avsnittet samlar de olika scenarier som kan krävas när du aktiverar flera val i rullgardinsmenyn Datavalidering.
Tillåter dubbletter av objekt i rullgardinsmenyn
Dubbletter kan vara ett problem när flera val är tillåtna i en rullgardinslista. VBA-koden ovan tillåter inte dubbletter av objekt i rullgardinsmenyn. Om du behöver behålla dubbletter, prova VBA-koden i det här avsnittet.
VBA-kod: Tillåt dubbletter i rullgardinsmenyn för datavalidering
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
Resultat
Nu kan du välja flera objekt från rullgardinslistorna i det aktuella kalkylbladet. Om du vill upprepa ett objekt i en rullgardinscell fortsätter du att välja det objektet från listan. Se skärmdump:
Ta bort befintliga objekt från rullgardinsmenyn
Efter att ha valt flera objekt från en rullgardinslista kan du ibland behöva ta bort ett befintligt objekt från rullgardinslistan. Det här avsnittet innehåller ytterligare en del av VBA-kod som hjälper dig att utföra denna uppgift.
VBA-kod: Ta bort alla befintliga objekt från rullgardinslistan
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
Resultat
Denna VBA-kod låter dig välja flera objekt från en rullgardinslista och enkelt ta bort alla objekt du redan har valt. Efter att ha valt flera objekt, om du vill ta bort en specifik, välj den helt enkelt igen från listan.
Ställa in en anpassad separator
Avgränsaren sätts som komma i ovanstående VBA-koder. Du kan modifiera den här variabeln till valfritt tecken för att använda som avgränsare för valen i rullgardinsmenyn. Så här kan du göra:
Som du kan se att ovanstående VBA-koder alla har följande rad:
delimiter = ", "
Du behöver bara ändra kommatecken till valfri separator som du behöver. Om du till exempel vill separera objekten med semikolon, ändra raden till:
delimiter = "; "
delimiter = vbNewLine
Ställa in ett specificerat område
Ovanstående VBA-koder gäller för alla rullgardinslistor i det aktuella kalkylbladet. Om du bara vill att VBA-koderna ska gälla för ett visst urval av rullgardinslistor kan du ange intervallet i ovanstående VBA-kod enligt följande.
Som du kan se att ovanstående VBA-koder alla har följande rad:
Set TargetRange = Me.UsedRange
Du behöver bara ändra raden till:
Set TargetRange = Me.Range("C2:C10")
Kör i ett skyddat kalkylblad
Föreställ dig att du har skyddat ett kalkylblad med lösenordet "123" och ställ in rullgardinslistans celler till "Olåst" innan du aktiverar skyddet, vilket säkerställer att flervalsfunktionen förblir aktiv efter skyddet. VBA-koderna som nämns ovan kan dock inte fungera i det här fallet, och det här avsnittet beskriver ett annat VBA-skript som är specifikt utformat för att hantera flervalsfunktioner i ett skyddat arbetsblad.
VBA-kod: Aktivera flera val i rullgardinsmenyn utan dubbletter
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
Genom att aktivera flera val i Excel-rullgardinslistor kan du avsevärt förbättra funktionaliteten och flexibiliteten hos dina kalkylblad. Oavsett om du är bekväm med VBA-kodning eller föredrar en mer okomplicerad lösning som Kutools, har du nu möjligheten att förvandla dina vanliga rullgardinslistor till dynamiska, multi-select-verktyg. Med dessa färdigheter är du nu rustad att skapa mer dynamiska och användarvänliga Excel-dokument. För dem som är ivriga att fördjupa sig i Excels möjligheter, har vår webbplats en mängd handledningar. Upptäck fler Excel-tips och tricks här.
Relaterade artiklar
Autoslutför när du skriver i Excel-rullgardinsmenyn
Om du har en rullgardinsmeny för datavalidering med stora värden måste du bläddra nedåt i listan bara för att hitta rätt eller skriva hela ordet direkt i listrutan. Om det finns en metod för att automatiskt slutföra när du skriver den första bokstaven i rullgardinsmenyn blir allt enklare. Denna handledning ger metoden för att lösa problemet.
Skapa rullgardinslista från en annan arbetsbok i Excel
Det är ganska enkelt att skapa en rullgardinslista för datavalidering bland kalkylblad i en arbetsbok. Men om listdata du behöver för datavalideringen hittar du i en annan arbetsbok, vad skulle du göra? I den här guiden lär du dig hur du skapar en drop-down-lista från en annan arbetsbok i Excel i detalj.
Skapa en sökbar rullgardinslista i Excel
För en rullgardinsmeny med många värden är det inte lätt att hitta en riktig. Tidigare har vi introducerat en metod för automatisk komplettering av rullgardinsmenyn när du anger den första bokstaven i rullgardinsmenyn. Förutom funktionen för autoslutförande kan du också göra listrutan sökbar för att förbättra arbetseffektiviteten för att hitta rätt värden i listrutan. För att göra rullgardinsmenyn sökbar, prova metoden i den här självstudien.
Fyll i andra celler automatiskt när du väljer värden i Excel-listrutan
Låt oss säga att du har skapat en rullgardinslista baserat på värdena i cellområdet B8: B14. När du väljer något värde i listrutan vill du att motsvarande värden i cellintervall C8: C14 fylls automatiskt i en vald cell. För att lösa problemet kommer metoderna i denna handledning att göra dig en tjänst.
Bästa kontorsproduktivitetsverktyg
Uppgradera dina Excel-färdigheter med Kutools för Excel och upplev effektivitet som aldrig förr. Kutools för Excel erbjuder över 300 avancerade funktioner för att öka produktiviteten och spara tid. Klicka här för att få den funktion du behöver mest...
Fliken Office ger ett flikgränssnitt till Office och gör ditt arbete mycket enklare
- Aktivera flikredigering och läsning i Word, Excel, PowerPoint, Publisher, Access, Visio och Project.
- Öppna och skapa flera dokument i nya flikar i samma fönster, snarare än i nya fönster.
- Ökar din produktivitet med 50 % och minskar hundratals musklick för dig varje dag!
Innehållsförteckning
- Aktiverar flera val
- Använder VBA-kod
- Använda Kutools för Excel med några få klick
- Fler operationer
- Tillåter dubbletter av objekt
- Ta bort befintliga föremål
- Ställa in en anpassad separator
- Ställa in ett specificerat område
- Kör i ett skyddat kalkylblad
- Relaterade artiklar
- De bästa Office-produktivitetsverktygen
- Kommentarer