Rullgardinslista med multi-select

Den klassiska rullgardinsmenyn i ett Excel-ark är utmärkt, men den låter dig bara välja ett alternativ från den presenterade uppsättningen. Ibland är det precis vad man vill, men det finns situationer där användaren behöver kunna välja några element från listan.

Låt oss titta på flera typiska implementeringar av en sådan flervalslista.

Alternativ 1. Horisontell

Användaren väljer objekt från rullgardinsmenyn en efter en, och de visas till höger om cellen som ändras och visas automatiskt horisontellt:

Rullgardinslistor i cellerna C2:C5 i detta exempel skapas på ett standardsätt, dvs

  1. välj cellerna C2:C5
  2. flik eller meny Data välja ett lag Datagransknings
  3. i fönstret som öppnas väljer du ett alternativ Lista och ange som ett intervall Källa celler med källdata för lista A1:A8

Sedan måste du lägga till ett makro till arkmodulen, som kommer att göra allt huvudarbete, dvs lägga till valda värden till höger om de gröna cellerna. För att göra detta, högerklicka på arkfliken med rullgardinslistor och välj kommandot Källkod. Klistra in följande kod i Visual Basic-redigeringsfönstret som öppnas:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset (0, 1)) = 0 Sedan Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Om det behövs, byt ut det känsliga området i rullgardinslistorna C2:C5 på den andra raden i denna kod med din egen.

Alternativ 2. Vertikal

Samma som i den tidigare versionen, men de nya valda värdena läggs inte till till höger utan till botten:

Det görs på exakt samma sätt, men hanterarens makrokod ändras något:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:F2")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False If Len(Target.Offset) (1, 0)) = 0 Sedan Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Återigen, om nödvändigt, byt ut det känsliga intervallet för C2:F2-rullgardinslistorna med dina egna på den andra raden i denna kod.

Alternativ 3. Med ackumulering i samma cell

I det här alternativet sker ackumuleringen i samma cell där rullgardinsmenyn finns. De markerade elementen separeras av ett givet tecken (till exempel ett kommatecken):

Rullgardinslistor i gröna celler skapas på ett helt standard sätt, som i de tidigare metoderna. Allt arbete görs, återigen, av ett makro i arkmodulen:

Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Not Intersect(Target, Range("C2:C5")) Is Nothing And Target.Cells.Count = 1 Then Application.EnableEvents = False newVal = Target Application.Undo oldval = Target If Len(oldval) <> 0 Och oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If Avsluta Sub  

Om så önskas kan du byta ut avgränsningstecknet (komma) på den 9:e raden i kod med ditt eget (till exempel ett mellanslag eller semikolon).

  • Hur man skapar en enkel rullgardinslista i en excel-arkcell
  • Dropdown-lista med innehåll
  • Rullgardinslista med saknade alternativ tillagda
  • Vad är makron, hur man använder dem, var man infogar makrokod i Visual Basic

Kommentera uppropet