Note: The other languages of the website are Google-translated. Back to English
English English

 Jak vytvořit rozevírací seznam, ale zobrazit různé hodnoty v aplikaci Excel?

V listu aplikace Excel můžeme rychle vytvořit rozevírací seznam s funkcí Ověření dat, ale zkusili jste někdy po kliknutí na rozevírací seznam zobrazit jinou hodnotu? Například mám následující dvě data sloupce ve sloupci A a sloupci B, teď musím vytvořit rozevírací seznam s hodnotami ve sloupci Název, ale když vyberu název z vytvořeného rozevíracího seznamu, odpovídající hodnota ve sloupci Číslo se zobrazí jako následující snímek obrazovky. Tento článek představí podrobnosti k vyřešení tohoto úkolu.

rozevírací seznam doc různé hodnoty 1

Vytvořte rozevírací seznam, ale v buňce rozevíracího seznamu zobrazte jinou hodnotu


Vytvořte rozevírací seznam, ale v buňce rozevíracího seznamu zobrazte jinou hodnotu

Chcete-li tento úkol dokončit, proveďte následující krok za krokem:

1. Vytvořte název rozsahu pro hodnoty buněk, které chcete použít v rozevíracím seznamu, v tomto příkladu zadám rozevírací seznam názvu do Název Box, a poté stiskněte tlačítko vstoupit klíč, viz screenshot:

rozevírací seznam doc různé hodnoty 2

2. Poté vyberte buňky, do kterých chcete vložit rozevírací seznam, a klikněte Data > Ověření dat > Ověření dat, viz screenshot:

rozevírací seznam doc různé hodnoty 3

3. V Ověření dat v dialogovém okně pod Nastavení kartu, vyberte Seznam z povolit rozevírací seznam a poté klikněte rozevírací seznam doc různé hodnoty 5 Pomocí tlačítka vyberte seznam jmen, který chcete použít jako rozevírací hodnoty v seznamu Zdroj Textové pole. Viz snímek obrazovky:

rozevírací seznam doc různé hodnoty 4

4. Po vložení rozevíracího seznamu klikněte pravým tlačítkem na kartu aktivního listu a vyberte Zobrazit kód z kontextového menu a v otevřeném Microsoft Visual Basic pro aplikace okno, zkopírujte a vložte následující kód do prázdného modulu:

Kód VBA: Zobrazit jinou hodnotu z rozevíracího seznamu:

Private Sub Worksheet_Change(ByVal Target As Range)
'Updateby Extendoffice
    selectedNa = Target.Value
    If Target.Column = 5 Then
        selectedNum = Application.VLookup(selectedNa, ActiveSheet.Range("dropdown"), 2, False)
        If Not IsError(selectedNum) Then
            Target.Value = selectedNum
        End If
    End If
End Sub

rozevírací seznam doc různé hodnoty 6

Poznámka: Ve výše uvedeném kódu číslo 5 v Pokud Target.Column = 5 Potom skript je číslo sloupce, na kterém se nachází váš rozevírací seznam, „rozevírací" v tomhle selectedNum = Application.VLookup (selectedNa, ActiveSheet.Range ("rozbalovací nabídka"), 2, False) code je název rozsahu, který jste vytvořili v kroku 1. Můžete je změnit podle svých potřeb.

5. Poté tento kód uložte a zavřete, nyní, když vyberete položku z rozevíracího seznamu, ve stejné buňce se zobrazí relativní jiná hodnota, viz screenshot:

rozevírací seznam doc různé hodnoty 7


Ukázka: Vytvořte rozevírací seznam, ale v aplikaci Excel zobrazte různé hodnoty

Kutools pro Excel: s více než 300 praktickými doplňky aplikace Excel, můžete vyzkoušet bez omezení do 30 dnů. Stáhněte si a vyzkoušejte zdarma hned teď!

 


Nejlepší kancelářské nástroje produktivity

Kutools pro Excel řeší většinu vašich problémů a zvyšuje vaši produktivitu o 80%

  • Opakované použití: Rychle vložte složité vzorce, grafy a cokoli, co jste dříve používali; Šifrovat buňky s heslem; Vytvořte seznam adresátů a posílat e-maily ...
  • Super Formula Bar (snadno upravit více řádků textu a vzorce); Rozložení pro čtení (snadno číst a upravovat velké množství buněk); Vložit do filtrovaného rozsahu...
  • Sloučit buňky / řádky / sloupce bez ztráty dat; Rozdělit obsah buněk; Zkombinujte duplicitní řádky / sloupce... Zabraňte duplicitním buňkám; Porovnat rozsahy...
  • Vyberte možnost Duplikovat nebo Jedinečný Řádky; Vyberte prázdné řádky (všechny buňky jsou prázdné); Super hledání a fuzzy hledání v mnoha sešitech; Náhodný výběr ...
  • Přesná kopie Více buněk beze změny odkazu na vzorec; Automaticky vytvářet reference do více listů; Vložte odrážky, Zaškrtávací políčka a další ...
  • Extrahujte text, Přidat text, Odebrat podle pozice, Odebrat mezeru; Vytváření a tisk mezisoučtů stránkování; Převod mezi obsahem buněk a komentáři...
  • Super filtr (uložit a použít schémata filtrů na jiné listy); Rozšířené řazení podle měsíce / týdne / dne, frekvence a dalších; Speciální filtr tučnou kurzívou ...
  • Kombinujte sešity a pracovní listy; Sloučit tabulky na základě klíčových sloupců; Rozdělte data do více listů; Dávkový převod xls, xlsx a PDF...
  • Více než 300 výkonných funkcí. Podporuje Office / Excel 2007-2019 a 365. Podporuje všechny jazyky. Snadné nasazení ve vašem podniku nebo organizaci. Kompletní funkce 30denní bezplatná zkušební verze. 60denní záruka vrácení peněz.
karta kte 201905

Office Tab přináší do Office rozhraní s kartami a usnadňuje vám práci

  • Povolte úpravy a čtení na kartách ve Wordu, Excelu, PowerPointu, Publisher, Access, Visio a Project.
  • Otevřete a vytvořte více dokumentů na nových kartách ve stejném okně, nikoli v nových oknech.
  • Zvyšuje vaši produktivitu o 50% a omezuje stovky kliknutí myší každý den!
officetab dno

 

Komentáře (42)
Zatím žádné hodnocení. Buďte první, kdo ohodnotí!
Tento komentář byl moderátorem webu minimalizován
Lze to udělat na různých listech? Myslím, na listu1 rozevírací seznam a na listu2 rozsah. Jak to musím kódovat? Díky předem. Tina.
Tento komentář byl moderátorem webu minimalizován
Co když chci udělat více než jeden rozevírací seznam, který vrátí různé hodnoty na stejném listu? Můžete mi ukázat příklad kódování pro dva nebo více?
Tento komentář byl moderátorem webu minimalizován
Lee Ann

Pokud pouze zkopírujete a vložíte kód z If do EndIf a změníte sloupec # a tabulku, mělo by to fungovat:


Sub Worksheet_Change (ByVal Target As Range)
selectedNa = Target.Value
Pokud Target.Column = 5 Potom
selectedNum = Application.VLookup (selectedNa, ActiveSheet.Range ("rozbalovací nabídka"), 2, False)
If Not IsError(selectedNum) Then
Target.Value = selectedNum
End If
End If
Pokud Target.Column = 9 Potom
selectedNum = Application.VLookup(selectedNa, ActiveSheet.Range("dropdown1"), 2, False)
If Not IsError(selectedNum) Then
Target.Value = selectedNum
End If
End If
End Sub

Neříkám, že je to správný způsob, ale na mé testovací verzi to fungovalo. Používám Excel 2013
Tento komentář byl moderátorem webu minimalizován
Jen jsem to zkusil. A povedlo se!! Děkuji.
Tento komentář byl moderátorem webu minimalizován
Ahoj, pomozte, nefunguje to, můžete sem vložit všechny kódy pro 2 sloupce?
Tento komentář byl moderátorem webu minimalizován
Tony: Správně, ale dalším krokem je vyhnout se podněcování: a) porušování principu DRY (a tedy zvýšeného: a.1) šancí na chyby a nákladů na jejich opravu a a.2) nákladů na potenciální budoucí změny/vylepšení) nepodporování programování "Copy-Paste" tím, že ukazuje, jak může být "refaktorováno", aby se snížilo duplicitní kód, a b) pevně zakódované doslovné ("magické" "číslo" / "řetězec") konstanty deklarováním a používáním pojmenovaných konstant, které jsou mnohem těžší napsat chybně, aniž by došlo k chybě kompilátoru. Jediné, co se mezi dvěma zkopírovanými bloky kódu liší, jsou sloupce #s a názvy rozsahů, takže pokud je to možné, vše ostatní by nemělo být duplikováno, takže kód by měl být například:

' -- POZNÁMKA: Deklarujte "EmptyString" v modulu globálních deklarací.
Public Const EmptyString as String = ""

' -- Sloupec #s. POZNÁMKA: V praxi by např. "Col5Header" bylo např. "ProductID" a "Col9Header" by bylo např. "SalesID".
Private Const Col5HeaderColumnNumber As Integer = 5
Private Const Col9HeaderColumnNumber As Integer = 9

' -- Názvy rozsahů rozbalovacích seznamů sloupců
Private Const Col5HeaderDropDownRangeName jako String = "col5HeaderDropDownRangeName"
Private Const Col9HeaderDropDownRangeName jako String = "col9HeaderDropDownRangeName"

Dílčí list_Změna _
( _
ByVal Cíl jako rozsah _
)

' -- BEGIN U příslušných sloupců = vytáhněte ID pro popis vybraný z rozevíracích seznamů.
Dim dropDownListRangeName jako String
dropDownListRangeName = EmptyString
Vyberte Case Target.Column
Případ Col5HeaderColumnNumber
dropDownListRangeName = Col5HeaderDropDownRangeName
Případ Col9HeaderColumnNumber
dropDownListRangeName = Col9HeaderDropDownRangeName
End Select ' -- Case Target.Column
If (dropDownListRangeName <> EmptyString) Then
Ztlumit vybrané ID jako řetězec
selectedId = Application.VLookup(selectedNa, ActiveSheet.Range(dropDownListRangeName), 2, False)
If Not IsError(selectedId) Then
Target.Value = selectedId
End If ' -- Not IsError(selectedId)
End If ' -- (dropDownListRangeName <> EmptyString)
-- KONEC U příslušných sloupců = vytáhněte ID pro popis vybraný z rozevíracích seznamů.

End Sub
Tento komentář byl moderátorem webu minimalizován
Není nic víc frustrujícího, než napsat podrobnou otázku, jen aby to uteklo. Pokud zadáte nesprávný 6místný kód pro ověření vašeho člověka, odeslaná zpráva se smaže. Možná to bude chtít opravit. Můj komentář je tento: Pokusil jsem se udělat přesně to samé, co jste ukázali ve videu a písemných pokynech, a vše, co dostanu, je, když vyberu jméno v seznamu, je jméno a ne číslo. Také, jak to vůbec funguje, protože ověřování dat by mělo omezit možnosti pouze na to, co je v seznamu. Jak to podvádí systém? V minulosti jsem vždy musel přiřadit vba kód tlačítku nebo zkratce, jak se tento kód aktivuje? Jak testujete, abyste se ujistili, že to funguje?
Tento komentář byl moderátorem webu minimalizován
Jak funguje vzorec, když chcete přidat data na samostatný list v sešitu? Chci skrýt data.
Tento komentář byl moderátorem webu minimalizován
Změň se tady brácho!
selectedNum = Application.VLookup(selectedNa, Worksheets("YourSheetName").Range("dropdown"), 2, False)
Tento komentář byl moderátorem webu minimalizován
"YourSheetName" odkazuje na list, který obsahuje rozsah dat, nebo na list, kde chci použít dropdwon seznam?
Tento komentář byl moderátorem webu minimalizován
Jak vzorec funguje, když chcete vypsat data na samostatném listu/záložce v sešitu?
Tento komentář byl moderátorem webu minimalizován
toto nefunguje v aktuálních verzích excel-outdated. Ověření dat pak seznam se již nezobrazuje ve vba, protože objekt aplikace Excel se již několikrát pokusil a nezobrazuje se.
Tento komentář byl moderátorem webu minimalizován
Co když v tomto příkladu chcete, aby se podíval na hodnotu v každé z buněk v 5, ale vložil hodnotu do sousední buňky v 6
Tento komentář byl moderátorem webu minimalizován
Jak by se kód potřeboval změnit, pokud bych chtěl vytvořit odkaz/odkaz v E1 na zdroj rozevíracího seznamu na základě vybrané hodnoty?
Výhodou by bylo, že v případě změny zdroje rozevíracího seznamu (např. "Henrik" => "Hendrik" by se změna automaticky projevila v E1.
Tento komentář byl moderátorem webu minimalizován
Ví někdo, jak to zprovoznit v google listech?
Tento komentář byl moderátorem webu minimalizován
chci vybrat více možností z rozevíracího seznamu.
výsledek takto: AA1001,BB1002
je to možné?
Tento komentář byl moderátorem webu minimalizován
Našli jste řešení?
Tento komentář byl moderátorem webu minimalizován
Si los datos de la lista están en otra hoja, cual sería el código? Gracias.
Tento komentář byl moderátorem webu minimalizován
co buscar un valor hacia la izquierda
Tento komentář byl moderátorem webu minimalizován
Soukromá dílčí tabulka_Změna (ByVal Target As Range)
selectedNa = Target.Value
Pokud Target.Column = 5 Potom

Listy("Nombre de la hoja en donde esta la lista").Aktivovat
selectedNum = Application.VLookup (selectedNa, ActiveSheet.Range ("rozbalovací nabídka"), 2, False)
Listy("Nombre de la hoja en donde estas trabajando").Aktivovat
If Not IsError(selectedNum) Then
Target.Value = selectedNum
End If
End If
End Sub
Tento komentář byl moderátorem webu minimalizován
Někdo ví, jak hledat hodnotu zprava doleva
Tento komentář byl moderátorem webu minimalizován
Potřebuji použít stejnou rozevírací nabídku ve více než jednom sloupci, jaký by byl kód?
Tento komentář byl moderátorem webu minimalizován
Ahoj!
To je opravdu užitečné! Děkuji!
Běžím v situaci, kdy se buňka neaktualizuje automaticky nebo při použití funkce refresh. Musím kliknout do jiné buňky a poté kliknout zpět na buňku v práci, aby se zobrazila hodnota.
V současné době pracuji s Office Standard 2019. Ví někdo, jestli tento problém souvisí s verzí v Excelu, kterou používám?
Tento komentář byl moderátorem webu minimalizován
Dobrý den,
Kód fungoval dobře, pokud definujeme seznam a vytváříme rozevírací seznam na stejném listu.
Jak ale můžeme dosáhnout definování seznamu hodnot a kódů na jednom listu a rozevíracího seznamu vytvořeného na jiném listu?
Stejný kód nefunguje, jak se zobrazuje, a chyba na tomto řádku ("selectedNum = Application.VLookup(selectedNa, ActiveSheet.Range("dropdown"), 2, False)").
Také mám požadavek, jako když mám na jednom listu definováno více seznamů s ID a jmény a více rozevíracích seznamů na jiném listu, kde jedna hodnota rozevíracího seznamu závisí na vybrané hodnotě v jiném rozevíracím seznamu.

Doufám, že jste můj dotaz pochopili.

Pomozte mi při řešení tohoto problému.
Tento komentář byl moderátorem webu minimalizován
To mi nesmírně pomohlo, děkuji. Protože moje tabulka byla na jiném listu než můj seznam, přidal jsem pár řádků kódu, abych toho dosáhl a také aby obrazovka neblikala.

Application.ScreenUpdating = False
Sheets("SheetWithTableOnIt").Aktivovat

Sheets("SheetWithDropDownListOnIt").Aktivovat
Application.ScreenUpdating = True
Tento komentář byl moderátorem webu minimalizován
kam přesně jsi přidal tyto kódy?
Tento komentář byl moderátorem webu minimalizován
Při pokusu o použití kódu se zobrazí chyba kompilace: chyba syntaxe na řádku "If Trarget.Column = 6 Then"? Nějaký nápad proč?
Tento komentář byl moderátorem webu minimalizován
Funguje, ale když soubor ukončíte a znovu otevřete, nefunguje...nelze jej uložit jako .xls pouze jako .xlsm, existuje na to nějaké řešení? dík
Tento komentář byl moderátorem webu minimalizován
Dobrý den, Marko, po zkopírování a vložení kódu do sešitu byste jej při ukládání měli uložit jako formát sešitu Excel s podporou maker, zkuste to, děkuji!
Zatím zde nejsou žádné komentáře
Načíst další
Zanechat své připomínky
Odesílání jako host
×
Ohodnoťte tento příspěvek:
0   Postavy
Doporučená umístění