Kazalo
Glede na okoliščine boste morda morali izbrati več vrednosti v spustnem seznamu. V tem učbeniku vam bomo pokazali, kako narediti več izbir v spustnem seznamu. Za to sejo uporabljamo Excel 2019, lahko pa uporabite tudi želeno različico.
Preden se potopimo v sejo, spoznajmo nabor podatkov, ki je osnova za naše primere.
Tu imamo več elementov za pisarniške potrebščine, s katerimi bomo ustvarili spustni seznam in na njem izbrali več elementov.
Upoštevajte, da gre za preprost nabor podatkov, da bodo stvari enostavne. V praksi lahko naletite na veliko večji in zapleten nabor podatkov.
Praktični delovni zvezek
Na spodnji povezavi si lahko prenesete delovni zvezek za vadbo.
Večkratni izbor iz spustnega seznama.xlsm
Večkratni izbor v spustnem seznamu
Najprej moramo ustvariti spustni seznam na podlagi naših pisarniških zbirk. Hitro ga ustvarimo. Ne oklevajte in si oglejte članek o izdelavi spustnega seznama.
V Potrjevanje podatkov v pogovornem oknu izberite SEZNAM podatkovno vrsto in vstavite območje celic elementov.
B4:B11 je območje, ki vsebuje elemente pisarniških potrebščin. Zdaj boste našli spustni seznam.
Preberite več: Excelov spustni seznam glede na izbor
1. Izberite več elementov (omogoča podvojen izbor)
Na običajnem spustnem seznamu vedno izberete en element. Tukaj lahko vidite, da smo izbrali Pisalo s seznama (spodnja slika).
Če izberemo drug element, recimo Svinčnik
nadomesti prejšnjo vrednost. Samo Svinčnik ostane izbrana.
Če želimo izbrati več elementov, moramo uporabiti VBA koda. Odprite Microsoft Visual Basic za aplikacije okno (pritisnite ALT + F11 da ga odprete).
Zdaj dvakrat kliknite na ime ali številko delovnega lista, v katerem želite izbrati več elementov na spustnem seznamu. Poiskali boste okno kode za ta list.
Tukaj je okno kode za List2 v našem delovnem zvezku (spustni seznam imamo v tem listu).
Ko se odpre okno s kodo, vanj vstavite naslednjo kodo
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
Shranite kodo in zdaj poskusite izbrati vrednosti na spustnem seznamu.
Po izbiri Svinčnik , bomo izbrali drug element Beležnica . In videli ste, da smo našli oba predmeta (spodnja slika).
Ta koda nam bo omogočila ponovitev izbire. Recimo, če izberemo Svinčnik ponovno,
bomo element ponovno našli v izbirnem polju.
Razlaga kode
Deklarirali smo dva niza Stara vrednost in . Nova vrednost .
Vidite, da smo spustni seznam v D4 zato je naš ciljni naslov D4 . Poleg tega smo ponovno preverili, ali celica uporablja preverjanje podatkov ali ne, in sicer z uporabo Target.SpecialCells .
Ko je vrednost izbrana, smo izklopili dogodke ( Application.EnableEvents = False
), tako da spremembe ne bodo ponovno sprožile dogodka. Nato shranite izbrani element v Nova vrednost .
Po razveljavitvi spremembe smo nastavili vrednost v Stara vrednost . Nato preverite, ali je Stara vrednost je prazna ali ne. Če je prazna (kar pomeni, da je izbrana samo ena vrednost), vrne Nova vrednost . V nasprotnem primeru združite Stara vrednost in . Nova vrednost .
Pred koncem ponastavite dogodek, da ga lahko po potrebi spremenite.
Preberite več: Več odvisnih spustnih seznamov Excel VBA
2. Izberite več elementov s spustnega seznama (samo edinstven izbor)
V prejšnjem razdelku smo videli več izbir, pri katerih je bilo dovoljeno ponavljanje. Če tega ne želite, sledite temu razdelku.
Zaradi priročnosti smo za to predstavitev uporabili ločen list. Tokrat smo na listu 3. V okno za kodo tega lista zapišite naslednjo kodo.
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
Ali je kakšna razlika v primerjavi s prejšnjo kodo! Poglejte podrobneje, da boste lahko opazili majhno razliko.
Pri tem smo uporabili VBA funkcijo, ki se imenuje INSTR . INSTR funkcija vrne položaj prve pojavitve podreza v nizu. Za več informacij obiščite članek INSTR.
S to logično operacijo z InStr(1, Oldvalue, Newvalue) = 0 smo preverili, ali so vrednosti najdene ali ne. Če logična operacija vrne TRUE (prej ni bilo najdeno), potem je mogoče izbrati element in ga združiti s prejšnjo vrednostjo.
Shranite kodo in zdaj poskusite izbrati element, ki je že bil izbran.
Tu smo že izbrali Svinčnik Če želimo to ponovno izbrati, tega ne moremo storiti, saj ne dovoljuje podvojenih vrednosti.
Preberite več: Kako ustvariti spustni seznam iz drugega lista v Excelu
3. Izberite elemente v novem vrstilcu
Do zdaj smo ugotovili, da so elementi ločeni z vejico. V tem razdelku bomo izbrane elemente uredili z novimi vrsticami.
Zaradi preprostosti združujemo nekaj celic z D4 Če želite to narediti, izberite celice, ki jih želite združiti, in kliknite Združitev & amp; Center iz Uskladitev v razdelku Domov zavihek.
Celica bo pridobila večjo višino.
Zdaj si oglejmo kodo za ločevanje elementov z novo vrstico. Uporabite naslednjo kodo
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
Edina razlika v primerjavi s prejšnjo kodo je, da smo tokrat uporabili vbNewLine vmes OldValue in . NewValue .
vbNewLine med elementoma ustvarite novo vrstico.
Zdaj izberite elemente.
Izberemo element Pisalo ki je prikazan na zgornji sliki. Zdaj izberite še en element.
Ugotovili boste, da sta oba elementa v različnih vrstah.
Tu imamo dve vrednosti, ki sta v dveh različnih vrsticah. Če izberete drugo vrednost, jo boste dodali v drugo vrstico. Vsaka vrednost bo v novi vrstici.
Če želite elemente ločiti z drugim ločilom, ga uporabite v dvojnih narekovajih namesto vbNewline .
Zaključek
To je za danes vse. Navedli smo več pristopov za več izbir na spustnem seznamu. Upam, da vam bo to v pomoč. Če se vam zdi kaj težko razumljivo, lahko komentirate. Sporočite nam morebitne druge metode, ki smo jih tukaj spregledali.