Rullegardinliste med multi-select

Den klassiske rullegardinlisten i et Excel-ark er flott, men den lar deg bare velge ett alternativ fra det presenterte settet. Noen ganger er dette akkurat det du ønsker, men det er situasjoner der brukeren må kunne velge noen elementer fra listen.

La oss se på flere typiske implementeringer av en slik flervalgsliste.

Alternativ 1. Horisontal

Brukeren velger elementer fra rullegardinlisten én etter én, og de vises til høyre for cellen som endres, og vises automatisk horisontalt:

Nedtrekkslister i cellene C2:C5 i dette eksemplet lages på en standard måte, dvs

  1. velg cellene C2:C5
  2. fane eller meny Data velge et lag Datavalidering
  3. i vinduet som åpnes, velg et alternativ Liste og angi som et område kilde celler med kildedata for liste A1:A8

Deretter må du legge til en makro til arkmodulen, som vil gjøre alt hovedarbeidet, dvs. legge til valgte verdier til høyre for de grønne cellene. For å gjøre dette, høyreklikk på arkfanen med rullegardinlister og velg kommandoen Kildekode. Lim inn følgende kode i Visual Basic-redigeringsvinduet som åpnes:

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 Deretter Target.Offset(0, 1) = Target Else Target.End(xlToRight).Offset(0, 1) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Erstatt om nødvendig det sensitive området til nedtrekkslistene C2:C5 i den andre linjen i denne koden med din egen.

Alternativ 2. Vertikal

Det samme som i forrige versjon, men de nye valgte verdiene legges ikke til til høyre, men til bunnen:

Det gjøres på nøyaktig samme måte, men behandlermakrokoden endres litt:

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 Deretter Target.Offset(1, 0) = Target Else Target.End(xlDown).Offset(1, 0) = Target End If Target.ClearContents Application.EnableEvents = True End If End Sub  

Igjen, om nødvendig, bytt ut det sensitive området til C2:F2-rullegardinlistene med din egen i den andre linjen i denne koden.

Alternativ 3. Med akkumulering i samme celle

I dette alternativet skjer akkumuleringen i samme celle der nedtrekkslisten er plassert. De valgte elementene er atskilt med et gitt tegn (for eksempel et komma):

Nedtrekkslister i grønne celler lages på en helt standard måte, som i de tidligere metodene. Alt arbeidet gjøres igjen av en 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 Og oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If End Sub  

Om ønskelig kan du erstatte skilletegnet (komma) i 9. kodelinje med ditt eget (for eksempel et mellomrom eller semikolon).

  • Hvordan lage en enkel rullegardinliste i en Excel-arkcelle
  • Nedtrekksliste med innhold
  • Rullegardinliste med manglende alternativer lagt til
  • Hva er makroer, hvordan bruker du dem, hvor skal du sette inn makrokode i Visual Basic

Legg igjen en kommentar