Jak provést vícenásobný výběr z rozevíracího seznamu v aplikaci Excel (3 způsoby) -

  • Sdílet Toto
Hugh West

V závislosti na okolnostech můžete potřebovat vybrat více hodnot v rozevíracím seznamu. V tomto výukovém kurzu si ukážeme, jak provést vícenásobný výběr v rozevíracím seznamu. Pro toto sezení používáme Excel 2019, klidně použijte svou preferovanou verzi.

Než se ponoříme do relace, seznamte se se souborem dat, který je základem našich příkladů.

Zde máme několik kancelářských prvků, pomocí kterých vytvoříme rozevírací seznam a vybereme v něm více položek.

Všimněte si, že se jedná o jednoduchou datovou sadu, aby se vše zjednodušilo. V praxi se můžete setkat s mnohem větší a složitější datovou sadou.

Cvičebnice pro praxi

Cvičebnici si můžete stáhnout z níže uvedeného odkazu.

Provést vícenásobný výběr z rozevíracího seznamu.xlsm

Vícenásobný výběr v rozevíracím seznamu

Nejprve musíme vytvořit rozbalovací seznam na základě našich stanic. Pojďme si ho rychle vytvořit. Neváhejte navštívit článek týkající se tvorby rozbalovacího seznamu.

V Ověřování dat dialogového okna vyberte SEZNAM datového typu a vložte rozsah buněk položek.

B4:B11 je rozsah, který obsahuje kancelářské prvky. Nyní najdete rozevírací seznam.

Přečtěte si více: Rozbalovací seznam aplikace Excel v závislosti na výběru

1. Výběr více položek (umožňuje duplicitní výběr)

V běžném rozevíracím seznamu vybíráme vždy jednu položku. Zde vidíte, že jsme vybrali. Pero ze seznamu (obrázek níže).

Pokud nyní vybereme jinou položku, řekněme. Tužka

pak nahradí předchozí hodnotu. Pouze Tužka zůstane vybrána.

Chceme-li vybrat více položek, musíme použít příkaz VBA kód. Otevřete Microsoft Visual Basic pro aplikace (stiskněte tlačítko ALT + F11 otevřít).

Nyní dvakrát klikněte na název nebo číslo listu, kde chcete vybrat více položek v rozevíracím seznamu. Zobrazí se okno kódu pro daný list.

Zde je okno kódu pro List2 v našem sešitě (v tomto listu máme rozevírací seznam).

Po otevření okna kódu do něj vložte následující kód

 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 

Uložte kód a nyní zkuste vybrat hodnoty v rozevíracím seznamu.

Po výběru Tužka , vybereme další položku Notebook . A jak vidíte, našli jsme obě položky (obrázek níže).

Tento kód nám umožní opakovat výběr. Řekněme, že pokud vybereme Tužka znovu,

položku opět najdeme ve výběrovém poli.

Vysvětlení kódu

Deklarovali jsme dva řetězce Stará hodnota a Newvalue .

Vidíte, že jsme vytvořili rozevírací seznam v části D4 buňka, proto je naše cílová adresa D4 . A navíc jsme znovu zkontrolovali, zda buňka používá ověření dat nebo ne, a to pomocí funkce Target.SpecialCells .

Po výběru hodnoty jsme vypnuli události ( Application.EnableEvents = False ), aby změny znovu nevyvolaly událost. Pak uložte vybranou položku do pole Newvalue .

Po zrušení změny jsme nastavili hodnotu do pole Stará hodnota Pak zkontrolujte, zda Stará hodnota je nebo není prázdná. Pokud je prázdná (což znamená, že je vybrána pouze jedna hodnota), vrátí se hodnota Newvalue . V opačném případě spojte Stará hodnota a Newvalue .

Před ukončením událost resetujte, abychom ji mohli v případě potřeby změnit.

Přečtěte si více: Více závislých rozevíracích seznamů Excel VBA

2. Výběr více položek z rozevíracího seznamu (pouze jedinečný výběr)

V předchozí části jsme viděli vícenásobné výběry, kde bylo povoleno opakování. Pokud to nechcete, postupujte podle této části.

Pro tuto ukázku jsme pro pohodlí použili samostatný list. Tentokrát se nacházíme na listu 3. Do okna kódu tohoto listu napište následující kód.

 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 

Je zde nějaký rozdíl oproti dřívějšímu kódu! Podívejte se na něj blíže, určitě si všimnete drobného rozdílu.

Zde jsme použili VBA funkce s názvem INSTR . INSTR funkce vrací pozici prvního výskytu podřetězce v řetězci. Další informace naleznete v tomto článku INSTR.

Pomocí této logické operace s InStr(1, Oldvalue, Newvalue) = 0 jsme zkontrolovali, zda jsou hodnoty nalezeny, nebo ne. Pokud logická operace vrátí hodnotu TRUE (nenalezena dříve), pak umožňuje vybrat položku a spojit ji s dřívější hodnotou.

Uložte kód a nyní zkuste vybrat položku, která již byla vybrána.

Zde jsme již vybrali Tužka , pokud ji chceme vybrat znovu, nemůžeme. Neumožňuje duplicitní hodnoty.

Přečtěte si více: Jak vytvořit rozevírací seznam z jiného listu v aplikaci Excel

3. Vyberte položky v novém řádku

Dosud jsme zjistili, že položky jsou odděleny čárkou. V této části budeme vybrané položky řadit do nových řádků.

Pro zjednodušení sloučíme několik buněk se symbolem D4 Chcete-li to provést, vyberte buňky, které chcete sloučit, a klikněte na tlačítko Sloučení & Středisko z Zarovnání sekce Home tab.

Buňka získá větší výšku.

Nyní se podívejme na kód pro oddělování položek pomocí nového řádku. Použijte následující kód

 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 Application.EnableEvents = True Exitsub: Application.EnableEvents = True End Sub 

Jediný rozdíl oproti předchozímu kódu je ten, že tentokrát jsme použili vbNewLine mezi nimi OldValue a NewValue .

vbNewLine vytvoří nový řádek mezi položkami.

Nyní vyberte položky.

Vybereme položku Pero který je zobrazen na obrázku výše. Nyní vyberte další prvek.

Zjistíte, že tyto dvě položky jsou v různých řadách.

Zde máme dvě hodnoty, které jsou ve dvou různých řádcích. Výběrem další hodnoty ji přidáte do jiného řádku. Každá hodnota bude v novém řádku.

Všimněte si, že pokud chcete položky oddělit jiným oddělovačem, použijte jej v uvozovkách místo znaku vbNewline .

Závěr

To je pro dnešek vše. Uvedli jsme několik přístupů k provádění vícenásobných výběrů v rozevíracím seznamu. Doufáme, že vám to bude užitečné. Neváhejte se vyjádřit, pokud se vám bude zdát něco obtížně pochopitelné. Dejte nám vědět o dalších metodách, které jsme zde vynechali.

Hugh West je velmi zkušený školitel a analytik Excelu s více než 10 lety zkušeností v oboru. Má bakalářský titul v oboru Účetnictví a finance a magisterský titul v oboru Business Administration. Hugh má vášeň pro výuku a vyvinul jedinečný přístup k výuce, který lze snadno sledovat a pochopit. Jeho odborné znalosti Excelu pomohly tisícům studentů a profesionálů po celém světě zlepšit své dovednosti a vyniknout ve své kariéře. Prostřednictvím svého blogu Hugh sdílí své znalosti se světem a nabízí bezplatné výukové programy Excelu a online školení, které jednotlivcům a firmám pomohou dosáhnout jejich plného potenciálu.