Tartalomjegyzék
A körülményektől függően előfordulhat, hogy egy legördülő listán belül több értéket kell kiválasztania. Ebben a bemutatóban megmutatjuk, hogyan végezhet többszörös kiválasztást egy legördülő listában. Ehhez a munkamenethez az Excel 2019-et használjuk, nyugodtan használja az Ön által preferált verziót.
Mielőtt belevetnénk magunkat a munkamenetbe, ismerkedjünk meg a példáink alapjául szolgáló adathalmazzal.
Itt több írószerelem van, ezek segítségével létrehozunk egy legördülő listát, és ott több elemet választunk ki.
Vegye figyelembe, hogy ez egy egyszerű adatkészlet, hogy a dolgok egyszerűek maradjanak. Egy gyakorlati forgatókönyvben sokkal nagyobb és összetettebb adatkészlettel találkozhat.
Gyakorlati munkafüzet
A gyakorlófüzetet az alábbi linkről töltheti le.
Többszörös kiválasztás a legördülő listából.xlsm
Többszörös kiválasztás egy legördülő listában
Mindenekelőtt egy legördülő listát kell létrehoznunk a papírjaink alapján. Hozzuk létre gyorsan. Ne habozzunk megnézni a cikket a legördülő lista készítéséről.
A Adatérvényesítés párbeszédpanelen válassza ki a LIST adattípus, és illessze be az elemek cellatartományát.
B4:B11 az a tartomány, amely az írószerelemeket tartalmazza. Most a legördülő listát találja.
Bővebben: Excel legördülő lista a kiválasztástól függően
1. Több elem kiválasztása (lehetővé teszi a duplikált kiválasztást)
Egy hagyományos legördülő lista mindig egyetlen elemet választ ki. Itt láthatja, hogy a következő elemeket választottuk ki Toll a listából (az alábbi képen).
Ha most kiválasztunk egy másik elemet, mondjuk, hogy Ceruza
akkor az előző érték helyébe lép. Ceruza továbbra is kiválasztva marad.
Több elem kijelöléséhez a VBA kód. Nyissa meg a Microsoft Visual Basic for Applications ablak (nyomja meg a ALT + F11 a megnyitásához).
Most kattintson duplán a munkalap nevére vagy számára, ahol a legördülő listán belül több elemet szeretne kiválasztani. Megjelenik az adott lap kódablaka.
Itt van a kódablak a Sheet2 a munkafüzetünkben (a legördülő lista ezen a lapon van).
Miután megnyílt a kódablak, illessze be oda a következő kódot
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
Mentse a kódot, és most próbálja meg kiválasztani az értékeket a legördülő listában.
Miután kiválasztotta Ceruza , egy másik elemet fogunk kiválasztani Notebook És láthatod, hogy mindkét tárgyat megtaláltuk (az alábbi képen).
Ez a kód lehetővé teszi számunkra, hogy megismételjük a kiválasztást. Mondjuk, ha kiválasztunk egy Ceruza újra,
újra megtaláljuk az elemet a kiválasztási mezőben.
Kód Magyarázat
Két karakterláncot deklaráltunk Régi érték és Új érték .
Láthatod, hogy a legördülő listát a D4 cella, ezért a célcímünk a következő D4 Ezen kívül újra ellenőriztük, hogy a cella használja-e az adatérvényesítést vagy sem, a Target.SpecialCells .
Amint egy értéket kiválasztottunk, kikapcsoltuk az eseményeket ( Application.EnableEvents = False
), hogy a változások ne váltsák ki újra az eseményt. Ezután a kiválasztott elemet tárolja a Új érték .
A változtatás visszavonása után az értéket beállítottuk a Régi érték Ezután ellenőrizze, hogy a Régi érték üres vagy nem üres. Ha üres (azaz csak egy érték van kiválasztva), akkor adja vissza a Új érték Ellenkező esetben, kapcsolja össze a Régi érték és Új érték .
Mielőtt befejezzük a reset az eseményt, hogy szükség esetén változtatni tudjunk.
Bővebben: Többszörös függő legördülő lista Excel VBA
2. Több elem kiválasztása a legördülő listából (csak egyedi kiválasztás)
A korábbi szakaszban láttuk a többszörös kiválasztást, ahol az ismétlés megengedett volt. Ha ezt nem szeretné, akkor kövesse ezt a szakaszt.
Az egyszerűség kedvéért ehhez a bemutatóhoz egy külön lapot használtunk. Ezúttal a 3. lapnál vagyunk. Írjuk a következő kódot ennek a lapnak a kódablakába.
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 Vég If End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Van-e különbség a korábbi kódhoz képest! Nézd meg közelebbről, észre fogod venni az enyhe különbséget.
Itt egy VBA nevű függvény INSTR . INSTR függvény egy részlánc első előfordulásának pozícióját adja vissza egy karakterláncban. További információkért látogasson el az INSTR cikkre.
Ezzel a logikai művelettel és az InStr(1, Oldvalue, Newvalue) = 0-val ellenőriztük, hogy az értékeket megtaláltuk-e vagy sem. Ha a logikai művelet a következő eredményt adja vissza TRUE (korábban nem található), akkor lehetővé teszi az elem kiválasztását és a korábbi értékkel való összekapcsolását.
Mentse a kódot, és most próbáljon meg kiválasztani egy már kiválasztott elemet.
Itt már kiválasztottuk Ceruza , ha újra ki akarjuk választani, nem tudjuk. Nem engedi a duplikált értékeket.
Bővebben: Hogyan hozzon létre egy legördülő listát egy másik lapról az Excelben
3. Válassza ki az elemeket az újsoron
Eddig azt tapasztaltuk, hogy az elemeket vesszővel választjuk el. Ebben a szakaszban a kiválasztott elemeket újsorok közé rendezzük.
Az egyszerűség kedvéért összevonunk néhány cellát a D4 Ehhez jelölje ki az egyesíteni kívánt cellákat, és kattintson a Összevonás & Központ a Kiegyenlítés a Home tab.
A cella nagyobb magasságot fog nyerni.
Most nézzük meg a kódot az elemek újsorral való elválasztására. Használjuk a következő kódot
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 End If Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Az egyetlen különbség az előző kódhoz képest, hogy ezúttal a vbNewLine a kettő között OldValue és NewValue .
vbNewLine egy új vonalat biztosít az elemek között.
Most válassza ki az elemeket.
Kiválasztunk egy elemet Toll amely a fenti képen látható. Most válasszunk ki egy másik elemet.
A két elem különböző sorokban található.
Itt két érték van, amelyek két különböző sorban vannak. Egy másik érték kiválasztásával az érték egy másik sorba kerül. Minden érték egy új sorban lesz.
Vegye figyelembe, hogy ha egy másik elválasztójelet akar az elemek elválasztására, akkor azt használja idézőjelben a vbNewline .
Következtetés
Ennyi volt mára. Több megközelítést is felsoroltunk, hogy többszörös kiválasztást végezhessünk egy legördülő listában. Reméljük, hogy hasznosnak találod. Nyugodtan kommentáld, ha valami nehezen érthetőnek tűnik. Tudasd velünk, ha más módszereket is kihagytunk itt.