Rozbaľovací zoznam s viacnásobným výberom

Klasický rozbaľovací zoznam v hárku programu Excel je skvelý, ale umožňuje vám vybrať iba jednu možnosť z prezentovanej sady. Niekedy je to presne to, čo chcete, ale sú situácie, keď si používateľ musí vedieť vybrať niektorí prvky zo zoznamu.

Pozrime sa na niekoľko typických implementácií takéhoto zoznamu s viacerými možnosťami výberu.

Možnosť 1. Horizontálne

Používateľ vyberá položky z rozbaľovacieho zoznamu jednu po druhej a zobrazia sa napravo od bunky, ktorá sa mení, a automaticky sa zobrazia vodorovne:

Rozbaľovacie zoznamy v bunkách C2:C5 sú v tomto príklade vytvorené štandardným spôsobom, tzn

  1. vyberte bunky C2:C5
  2. kartu alebo ponuku dátum vybrať tím overenie údajov
  3. v okne, ktoré sa otvorí, vyberte možnosť zoznam a špecifikujte ako rozsah zdroj bunky so zdrojovými údajmi pre zoznam A1:A8

Potom musíte do modulu listu pridať makro, ktoré vykoná všetku hlavnú prácu, tj pridá vybrané hodnoty napravo od zelených buniek. Ak to chcete urobiť, kliknite pravým tlačidlom myši na kartu listu s rozbaľovacími zoznamami a vyberte príkaz Zdrojový kód. Prilepte nasledujúci kód do okna editora Visual Basic, ktoré sa otvorí:

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

V prípade potreby nahraďte citlivý rozsah rozbaľovacích zoznamov C2:C5 v druhom riadku tohto kódu svojim vlastným.

Možnosť 2. Vertikálne

To isté ako v predchádzajúcej verzii, ale nové vybrané hodnoty sa nepridajú vpravo, ale dole:

Robí sa to presne rovnakým spôsobom, ale kód makra obslužného programu sa mierne mení:

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

V prípade potreby opäť vymeňte citlivý rozsah rozbaľovacích zoznamov C2:F2 za svoj vlastný v druhom riadku tohto kódu.

Možnosť 3. S akumuláciou v tej istej bunke

Pri tejto možnosti sa akumulácia vyskytuje v tej istej bunke, kde sa nachádza rozbaľovací zoznam. Vybrané prvky sú oddelené ľubovoľným znakom (napríklad čiarkou):

Rozbaľovacie zoznamy v zelených bunkách sa vytvárajú úplne štandardným spôsobom ako v predchádzajúcich metódach. Všetku prácu robí opäť makro v module listu:

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 And oldval <> newVal Then Target = Target & "," & newVal Else Target = newVal End If Len(newVal) = 0 Then Target.ClearContents Application.EnableEvents = True End If End Sub  

V prípade potreby môžete nahradiť oddeľovací znak (čiarku) v 9. riadku kódu svojím vlastným (napríklad medzerou alebo bodkočiarkou).

  • Ako vytvoriť jednoduchý rozbaľovací zoznam v bunke hárku programu Excel
  • Rozbaľovací zoznam s obsahom
  • Rozbaľovací zoznam s pridanými chýbajúcimi možnosťami
  • Čo sú makrá, ako ich používať, kam vložiť kód makra vo Visual Basicu

Nechaj odpoveď