Sisukord
Sõltuvalt asjaoludest võib teil olla vaja valida mitu väärtust ripploendistikus. Selles õpetuses näitame teile, kuidas teha ripploendistikus mitu valikut. Selles seansis kasutame Excel 2019, kasutage julgelt oma eelistatud versiooni.
Enne sessiooni sukeldumist tutvume andmekogumiga, mis on meie näidete aluseks.
Siin on meil mitu kirjapandud elementi, nende abil loome ripploendi ja valime sealt mitu elementi.
Pange tähele, et tegemist on lihtsa andmestikuga, et asjad oleksid lihtsad. Praktilises stsenaariumis võite kokku puutuda palju suurema ja keerukama andmestikuga.
Praktika töövihik
Olete oodatud allolevalt lingilt praktilise töövihiku allalaadimiseks.
Mitme valiku tegemine rippmenüüst.xlsm
Mitme valiku tegemine ripploendistikus
Kõigepealt peame looma ripploendistiku meie statsionaaride põhjal. Loome selle kiiresti. Ärge kõhkle, külastage artiklit ripploendistiku koostamise kohta.
In the Andmete valideerimine dialoogiaknas valige LIST andmetüüpi ja sisestage elementide lahtrite vahemik.
B4:B11 on vahemik, mis sisaldab kirjapandud elemente. Nüüd leiate ripploendi.
Loe edasi: Exceli rippmenüü sõltuvalt valikust
1. Valige mitu objekti (võimaldab dubleerivat valikut)
Tavapärases ripploendistikus valitakse alati üks element. Siin näete, et oleme valinud Pliiats nimekirjast (pilt allpool).
Kui me nüüd valime teise elemendi, ütleme, et Pliiats
siis asendab see eelmise väärtuse. Ainult Pliiats jääb valitud.
Mitme elemendi valimiseks peame kasutama funktsiooni VBA kood. Avage Microsoft Visual Basic for Applications aknas (vajutage ALT + F11 selle avamiseks).
Nüüd tehke topeltklõps töölehe nimele või numbrile, mille rippmenüüst soovite valida mitu elementi. Te leiate selle konkreetse lehe koodiakna.
Siin on koodi aken Leht2 meie töövihikus (meil on sellel lehel rippmenüü).
Kui koodiaken on avatud, sisestage sinna järgmine kood
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 Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub
Salvestage kood ja proovige nüüd valida väärtusi rippmenüüst.
Olles valinud Pliiats , me valime teise elemendi Märkmik Ja nagu näete, leidsime mõlemad esemed (pilt allpool).
See kood võimaldab meil valikut korrata. Ütleme, et kui me valime Pliiats uuesti,
leiame elemendi uuesti valikukastist.
Kood Selgitus
Me oleme deklareerinud kaks stringi Vana väärtus ja Newvalue .
Näete, et me tegime rippmenüüde loendi sisse D4 raku, seepärast on meie sihtaadressi aadressiks D4 Ja lisaks oleme uuesti kontrollinud, kas lahtris kasutatakse andmete valideerimist või mitte, kasutades selleks Target.SpecialCells .
Kui väärtus on valitud, lülitasime sündmused välja ( Application.EnableEvents = False
), nii et muudatused ei vallandaks sündmust uuesti. Seejärel salvestatakse valitud elementi arvesse Newvalue .
Pärast muudatuse tühistamist oleme seadnud väärtuse sisse Vana väärtus Seejärel kontrollige, kas Vana väärtus on tühi või mitte. Kui tühi (tähendab, et valitud on ainult üks väärtus), siis tagastatakse Newvalue Vastasel juhul liita Vana väärtus ja Newvalue .
Enne lõpetamist nullida sündmus, nii et me saame muuta, kui vaja.
Loe edasi: Mitme sõltuva rippmenüüga loetelu Excel VBA
2. Valige mitu eset rippmenüüst (ainult unikaalne valik)
Varasemas jaotises nägime mitmekordseid valikuid, kus oli lubatud kordamine. Kui te seda ei soovi, siis järgige seda jaotist.
Lihtsuse huvides kasutasime selle näituse jaoks eraldi lehte. Seekord oleme lehel 3. Kirjutage selle lehe koodiaknasse järgmine kood.
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
Kas on mingi erinevus võrreldes varasema koodiga! Vaadake lähemalt, siis näete väikest erinevust.
Siin oleme kasutanud VBA funktsioon nimega INSTR . INSTR funktsioon tagastab alamstringi esimese esinemise positsiooni stringis. Lisateabe saamiseks külastage seda INSTR artiklit.
Kasutades seda loogilist operatsiooni koos InStr(1, Oldvalue, Newvalue) = 0, oleme kontrollinud, kas väärtused on leitud või mitte. Kui loogiline operatsioon annab tagasi TÕELINE (ei leitud varem), siis võimaldab see valida elemendi ja liita selle varasema väärtusega.
Salvestage kood ja proovige nüüd valida juba valitud elementi.
Siin on juba valitud Pliiats , kui me tahame seda uuesti valida, ei saa me seda teha. See ei luba dubleerivaid väärtusi.
Loe edasi: Kuidas luua Exceli teise lehe rippmenüülist
3. Valige elemendid uues reas
Siiani oleme leidnud, et elemendid on eraldatud komaga. Selles jaotises paigutame valitud elemendid newline'idega.
Lihtsuse huvides ühendame mõned lahtrid koos D4 Selleks valige lahtrid, mida soovite ühendada, ja klõpsake nuppu Ühinemine & Keskus alates Kohandamine jagu Kodu vahekaart.
Kärg saab rohkem kõrgust.
Nüüd vaatame koodi, mis võimaldab eraldada elemendid newline'i abil. Kasutame järgmist koodi
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
Ainus erinevus eelmisest koodist on see, et seekord kasutasime vbNewLine vahepeal OldValue ja NewValue .
vbNewLine annab uue rea elementide vahele.
Nüüd valige esemed.
Me valime eseme Pliiats mis on näidatud ülaltoodud pildil. Nüüd valige teine element.
Te leiate, et need kaks eset on eri ridades.
Siin on meil kaks väärtust, mis on kahel erineval real. Teise väärtuse valimine lisab selle teisele reale. Iga väärtus on uuel real.
Pange tähele, et kui soovite, et üksused eraldataks teisest eraldusmärkidest, kasutage seda topeltkriipsude sees, mis asendavad sõna vbNewline .
Kokkuvõte
See on kõik tänaseks. Oleme loetlenud mitmeid lähenemisviise mitme valiku tegemiseks ripploendistikus. Loodame, et see on teile kasulik. Kommenteerige julgelt, kui midagi tundub raskesti arusaadav. Andke meile teada teistest meetoditest, mis me siin vahele jätsime.