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

 Jak utworzyć listę rozwijaną, ale wyświetlać różne wartości w programie Excel?

W arkuszu programu Excel możemy szybko utworzyć listę rozwijaną z funkcją Walidacja danych, ale czy kiedykolwiek próbowałeś pokazać inną wartość po kliknięciu listy rozwijanej? Na przykład mam następujące dwie kolumny danych w kolumnie A i kolumnie B, teraz muszę utworzyć listę rozwijaną z wartościami w kolumnie Nazwa, ale kiedy wybiorę nazwę z utworzonej listy rozwijanej, odpowiadający Wartość w kolumnie Liczba jest wyświetlana jak pokazano na poniższym zrzucie ekranu. W tym artykule przedstawimy szczegóły rozwiązania tego zadania.

lista rozwijana doc różne wartości 1

Utwórz listę rozwijaną, ale pokaż inną wartość w komórce listy rozwijanej


Utwórz listę rozwijaną, ale pokaż inną wartość w komórce listy rozwijanej

Aby zakończyć to zadanie, wykonaj następujące kroki:

1. Utwórz nazwę zakresu dla wartości komórek, których chcesz użyć na liście rozwijanej, w tym przykładzie wprowadzę listę rozwijaną nazwy w Nazwa Box, a następnie naciśnij Wchodzę klucz, patrz zrzut ekranu:

lista rozwijana doc różne wartości 2

2. Następnie wybierz komórki, w których chcesz wstawić listę rozwijaną, i kliknij Dane > Walidacja danych > Walidacja danychzobacz zrzut ekranu:

lista rozwijana doc różne wartości 3

3, w Walidacja danych okno dialogowe w obszarze Ustawienia kartę, wybierz Lista z Dopuszczać listę rozwijaną, a następnie kliknij lista rozwijana doc różne wartości 5 , aby wybrać listę Nazwa, której chcesz użyć jako rozwijanych wartości w Źródło pole tekstowe. Zobacz zrzut ekranu:

lista rozwijana doc różne wartości 4

4. Po wstawieniu listy rozwijanej kliknij prawym przyciskiem myszy kartę aktywnego arkusza i wybierz Wyświetl kod z menu kontekstowego oraz w otwartym Microsoft Visual Basic dla aplikacji w oknie, skopiuj i wklej następujący kod do pustego modułu:

Kod VBA: Wyświetl inną wartość z rozwijanej listy:

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

lista rozwijana doc różne wartości 6

Uwagi: W powyższym kodzie numer 5 w ciągu Jeśli Target.Column = 5 Then skrypt to numer kolumny, w której znajduje się Twoja lista rozwijana, „rozwijanej" w tym selectedNum = Application.VLookup (selectedNa, ActiveSheet.Range ("dropdown"), 2, False) kod to nazwa zakresu utworzona w kroku 1. Możesz je zmienić na potrzebne.

5. Następnie zapisz i zamknij ten kod, teraz, gdy wybierzesz element z rozwijanej listy, względna inna wartość jest wyświetlana w tej samej komórce, patrz zrzut ekranu:

lista rozwijana doc różne wartości 7


Demo: Utwórz listę rozwijaną, ale pokaż różne wartości w programie Excel

Kutools dla programu Excel: z ponad 300 poręcznymi dodatkami do programu Excel, które można wypróbować bez ograniczeń w ciągu 30 dni. Pobierz i bezpłatną wersję próbną teraz!

 


Najlepsze narzędzia biurowe

Kutools dla programu Excel rozwiązuje większość problemów i zwiększa produktywność o 80%

  • Ponowne użycie: Szybko włóż złożone wzory, wykresy i wszystko, czego używałeś wcześniej; Szyfruj komórki z hasłem; Utwórz listę mailingową i wysyłaj e-maile ...
  • Pasek Super Formula (łatwo edytować wiele wierszy tekstu i formuły); Układ do czytania (łatwe odczytywanie i edytowanie dużej liczby komórek); Wklej do filtrowanego zakresu...
  • Scal komórki / wiersze / kolumny bez utraty danych; Podziel zawartość komórek; Połącz zduplikowane wiersze / kolumny... Zapobiegaj zduplikowanym komórkom; Porównaj zakresy...
  • Wybierz Duplikat lub Unikalny Wydziwianie; Wybierz puste wiersze (wszystkie komórki są puste); Super Find i Fuzzy Find w wielu zeszytach ćwiczeń; Losowy wybór ...
  • Dokładna kopia Wiele komórek bez zmiany odwołania do formuły; Automatyczne tworzenie odniesień do wielu arkuszy; Wstaw punktory, Pola wyboru i nie tylko ...
  • Wyodrębnij tekst, Dodaj tekst, Usuń według pozycji, Usuń przestrzeń; Tworzenie i drukowanie podsumowań stronicowania; Konwertuj zawartość komórek i komentarze...
  • Super filtr (zapisz i zastosuj schematy filtrów do innych arkuszy); Zaawansowane sortowanie według miesiąca / tygodnia / dnia, częstotliwości i innych; Specjalny filtr pogrubieniem, kursywą ...
  • Połącz skoroszyty i arkusze robocze; Scal tabele na podstawie kluczowych kolumn; Podziel dane na wiele arkuszy; Konwersja wsadowa xls, xlsx i PDF...
  • Ponad 300 zaawansowanych funkcji. Obsługuje Office / Excel 2007-2021 i 365. Obsługuje wszystkie języki. Łatwe wdrażanie w przedsiębiorstwie lub organizacji. Pełne funkcje 30-dniowa bezpłatna wersja próbna. 60-dniowa gwarancja zwrotu pieniędzy.
karta kte 201905

Karta Office wprowadza interfejs z zakładkami do pakietu Office i znacznie ułatwia pracę

  • Włącz edycję i czytanie na kartach w programach Word, Excel, PowerPoint, Publisher, Access, Visio i Project.
  • Otwieraj i twórz wiele dokumentów w nowych kartach tego samego okna, a nie w nowych oknach.
  • Zwiększa produktywność o 50% i redukuje setki kliknięć myszką każdego dnia!
officetab dół

 

Sortuj komentarze według
Komentarze (42)
Brak ocen. Oceń jako pierwszy!
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy można to zrobić na różnych arkuszach? Mam na myśli listę rozwijaną na arkuszu 1, a na arkuszu 2 zakres. Jak mam to zakodować? Z góry dziękuję. Tina.
Ten komentarz został zminimalizowany przez moderatora na stronie
Co zrobić, jeśli chcę zrobić więcej niż jedno menu, które zwraca różne wartości w tym samym arkuszu? Czy możesz mi pokazać przykład kodowania dla dwóch lub więcej?
Ten komentarz został zminimalizowany przez moderatora na stronie
Lee Ann

Jeśli po prostu skopiujesz i wkleisz kod z If do EndIf i zmienisz kolumnę # i tabelę, powinno to zadziałać:


Sub Worksheet_Change (ByVal Target jako zakres)
wybraneNa = Wartość docelowa
Jeśli Target.Column = 5 Then
selectedNum = Application.VLookup (selectedNa, ActiveSheet.Range ("dropdown"), 2, False)
Jeśli nie IsError(selectedNum) Wtedy
Wartość docelowa = wybrana liczba
End If
End If
Jeśli Target.Column = 9 Then
selectedNum = Application.VLookup(selectedNa, ActiveSheet.Range("dropdown1"), 2, False)
Jeśli nie IsError(selectedNum) Wtedy
Wartość docelowa = wybrana liczba
End If
End If
End Sub

Nie mówię, że to poprawny sposób, ale zadziałało na mojej wersji testowej. Używam Excela 2013
Ten komentarz został zminimalizowany przez moderatora na stronie
Po prostu spróbowałem. I zadziałało!! Dziękuję Ci.
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć, pomocy, to nie działa, czy możesz wkleić tu cały kod na 2 kolumny?
Ten komentarz został zminimalizowany przez moderatora na stronie
Tony: Prawidłowo, ale następnym krokiem jest uniknięcie zachęcania do: a) naruszeń zasady DRY (a tym samym zwiększenia: a.1) szans na błędy i kosztów ich naprawy oraz a.2) kosztów potencjalnych przyszłych zmian/ulepszeń) przez nie zachęcanie do programowania typu „kopiuj-wklej” poprzez pokazanie, jak można je „refaktoryzować”, aby zmniejszyć duplikat kodu, oraz b) zakodowane na stałe dosłowne („magiczne” „liczba” / „ciąg”) stałe poprzez zadeklarowanie i użycie nazwanych stałych, które są znacznie trudniejsze do błędnego wpisania bez wywoływania błędu kompilatora. Jedyne, co różni się między dwoma blokami kodu kopiuj-wklej, to kolumny #s i nazwy zakresów, więc w miarę możliwości wszystko inne nie powinno być duplikowane, więc zamiast tego kod powinien być np.:

' -- UWAGA: Zadeklaruj „EmptyString” w module deklaracji globalnych.
Public Const EmptyString jako String = ""

' -- Kolumna #s. UWAGA: W praktyce np. „Col5Header” to np. „ProductID”, a „Col9Header” to np. „SalesID”.
Private Const Col5HeaderColumnNumber jako liczba całkowita = 5
Private Const Col9HeaderColumnNumber jako liczba całkowita = 9

' -- Nazwy zakresów list rozwijanych kolumn
Private Const Col5HeaderDropDownRangeName as String = "col5HeaderDropDownRangeName"
Private Const Col9HeaderDropDownRangeName as String = "col9HeaderDropDownRangeName"

Arkusz pomocniczy_Zmiana _
(_
ByVal Cel jako zakres _
)

' -- BEGIN Dla odpowiednich =kolumn, podaj ID dla opisu wybranego z list rozwijanych.
Dim dropDownListRangeName jako ciąg
dropDownListRangeName = Pusty Ciąg
Wybierz kolumnę docelową sprawy
Kolumna sprawy5NagłówekKolumnaNumer
dropDownListRangeName = Col5NagłówekDropDownRangeName
Kolumna sprawy9NagłówekKolumnaNumer
dropDownListRangeName = Col9NagłówekDropDownRangeName
End Select ' -- Case Target.Column
If (dropDownListRangeName <> EmptyString) Wtedy
Dim selectedId jako ciąg
selectedId = Application.VLookup(selectedNa, ActiveSheet.Range(dropDownListRangeName), 2, False)
Jeśli nie IsError(selectedId) to
Wartość docelowa = wybrany identyfikator
End If ' -- Not IsError(selectedId)
End If ' -- (dropDownListRangeName <> EmptyString)
-- END Dla odpowiednich kolumn = wciągnij identyfikator opisu wybranego z list rozwijanych.

End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Nie ma nic bardziej frustrującego niż wpisywanie szczegółowego pytania tylko po to, by je zdmuchnąć. Jeśli wpiszesz zły 6-cyfrowy kod, aby zweryfikować swojego człowieka, wyczyści to opublikowaną wiadomość. Może zechcesz to naprawić. Teraz mój komentarz jest taki: próbowałem zrobić dokładnie to samo, co pokazałeś w filmie i pisemnych instrukcjach, a wszystko, co otrzymuję, to kiedy wybieram nazwisko z listy, to imię, a nie numer. Jak to w ogóle działa, skoro sprawdzanie poprawności danych powinno ograniczać wybór tylko do tego, co znajduje się na liście. Jak to oszukuje system? W przeszłości zawsze musiałem przypisywać kod vba do przycisku lub skrótu, w jaki sposób ten kod jest aktywowany? Jak testujesz, aby upewnić się, że działa?
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak działa formuła, gdy chcesz dodać dane w osobnym arkuszu w skoroszycie? Chcę ukryć dane.
Ten komentarz został zminimalizowany przez moderatora na stronie
Zmień tutaj bracie!
selectedNum = Application.VLookup(selectedNa, Worksheets("YourSheetName").Range("dropdown"), 2, False)
Ten komentarz został zminimalizowany przez moderatora na stronie
"YourSheetName" odnosi się do arkusza zawierającego zakres danych lub arkusza, w którym chcę użyć listy rozwijanej?
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak działa formuła, gdy chcesz wyświetlić listę danych na osobnym arkuszu/karcie w skoroszycie?
Ten komentarz został zminimalizowany przez moderatora na stronie
to nie działa w aktualnych wersjach excel- przestarzały. Sprawdzanie poprawności danych, a następnie lista nie pojawia się już w vba, ponieważ obiekt programu Excel próbował już wiele razy i nie pojawia się.
Ten komentarz został zminimalizowany przez moderatora na stronie
W tym przykładzie, co zrobić, jeśli chcesz, aby spojrzał na wartość w każdej z komórek w 5, ale umieść wartość w sąsiedniej komórce w 6
Ten komentarz został zminimalizowany przez moderatora na stronie
Jak kod musiałby się zmienić, gdybym chciał utworzyć odwołanie/link w E1 do źródła listy rozwijanej na podstawie wybranej wartości?
Korzyścią byłoby to, że w przypadku zmiany w rozwijanym źródle (np. "Henrik" => "Hendrik" zmiana zostanie automatycznie odzwierciedlona w E1.
Ten komentarz został zminimalizowany przez moderatora na stronie
Czy ktoś wie, jak to zrobić w arkuszach google?
Ten komentarz został zminimalizowany przez moderatora na stronie
chcę wybrać wiele opcji z listy rozwijanej.
wynik taki: AA1001,BB1002
jest to możliwe?
Ten komentarz został zminimalizowany przez moderatora na stronie
Znalazłeś rozwiązanie?
Ten komentarz został zminimalizowany przez moderatora na stronie
Si los datos de la lista están pl otra hoja, cuál sería el código? Gracias.
Ten komentarz został zminimalizowany przez moderatora na stronie
como buscar un valor hacia la izquierda
Ten komentarz został zminimalizowany przez moderatora na stronie
Prywatny Sub Worksheet_Change (ByVal Target As Range)
wybraneNa = Wartość docelowa
Jeśli Target.Column = 5 Then

Arkusze("Nombre de la hoja en donde esta la lista"). Aktywuj
selectedNum = Application.VLookup (selectedNa, ActiveSheet.Range ("dropdown"), 2, False)
Arkusze ("Nombre de la hoja en donde estas trabajando"). Aktywuj
Jeśli nie IsError(selectedNum) Wtedy
Wartość docelowa = wybrana liczba
End If
End If
End Sub
Ten komentarz został zminimalizowany przez moderatora na stronie
Ktoś nkows jak wyszukać wartość od prawej do lewej
Ten komentarz został zminimalizowany przez moderatora na stronie
Muszę użyć tego samego menu rozwijanego w więcej niż jednej kolumnie, jaki byłby kod?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć!
To naprawdę przydatne! Dziękuję Ci!
Działam w sytuacji, gdy komórka nie aktualizuje się automatycznie lub podczas korzystania z funkcji odświeżania. Muszę kliknąć inną komórkę, a następnie ponownie kliknąć komórkę w pracy, aby wyświetlić wartość.
Obecnie pracuję w pakiecie Office Standard 2019. Czy ktoś wie, czy ten problem jest związany z wersją w programie Excel, której używam?
Ten komentarz został zminimalizowany przez moderatora na stronie
Cześć,
Kod działał dobrze, jeśli definiujemy listę i tworzymy listę rozwijaną w tym samym arkuszu.
Ale jak możemy osiągnąć zdefiniowanie listy wartości i kodów w jednym arkuszu oraz listy rozwijanej utworzonej w innym arkuszu?
Ten sam kod nie działa, ponieważ pokazuje błąd w tym wierszu ("selectedNum = Application.VLookup(selectedNa, ActiveSheet.Range("dropdown"), 2, False)").
Ponadto mam takie wymaganie, jeśli mam wiele list zdefiniowanych w jednym arkuszu z identyfikatorem i nazwami oraz wieloma listami rozwijanymi w innym arkuszu, gdzie jedna wartość listy rozwijanej zależy od wybranej wartości w innym menu rozwijanym.

Mam nadzieję, że zrozumiałeś moje zapytanie.

Proszę o pomoc w rozwiązaniu tego problemu.
Ten komentarz został zminimalizowany przez moderatora na stronie
Bardzo mi to pomogło, dziękuję. Ponieważ moja tabela znajdowała się na innym arkuszu niż moje pole listy, dodałem kilka wierszy kodu, aby to osiągnąć, a także aby ekran nie migał.

Application.ScreenUpdating = Fałsz
Arkusze("ArkuszZTabeląOnIt").Aktywuj

Arkusze("SheetWithDropDownListOnIt").Aktywuj
Application.ScreenUpdating = True
Ten komentarz został zminimalizowany przez moderatora na stronie
gdzie dokładnie dodałeś te kody?
Ten komentarz został zminimalizowany przez moderatora na stronie
Otrzymuję błąd kompilacji: Błąd składni w wierszu „If Trarget.Column = 6 Then”, gdy próbuję użyć kodu? Jakiś pomysł, dlaczego?
Ten komentarz został zminimalizowany przez moderatora na stronie
Działa, ale po wyjściu z pliku i ponownym otwarciu nie działa ... nie można go zapisać tylko jako .xls, ponieważ .xlsm jest na to rozwiązanie? Dzięki
Ten komentarz został zminimalizowany przez moderatora na stronie
Witaj Marko, Po skopiowaniu i wklejeniu kodu do skoroszytu, gdy zapisujesz plik, powinieneś zapisać go jako format skoroszytu programu Excel z obsługą makr, spróbuj, dziękuję!
Nie ma tu jeszcze żadnych komentarzy
Pokaż więcej
Zostaw swój komentarz
Publikowanie jako gość
×
Oceń ten post:
0   Postacie
Sugerowane lokalizacje

Bądż na bieżąco

Prawa autorskie © 2009 - www.extendoffice.com. | Wszelkie prawa zastrzeżone. Zasilany przez ExtendOffice, | Mapa strony
Microsoft i logo Office są znakami towarowymi lub zastrzeżonymi znakami towarowymi Microsoft Corporation w Stanach Zjednoczonych i / lub innych krajach.
Chronione przez Sectigo SSL