Jak wdrożyć dynamiczną listę walidacji danych zależnych w programie Excel

2

Źródła w sieci pokazują, jak zaimplementować zależne listy sprawdzania poprawności danych, ale wszystko, co napotkałem, jest statyczne i nie aktualizuje się automatycznie.

Wierzę, że ktokolwiek może odpowiedzieć na to pytanie, już wie, jak działają listy sprawdzania poprawności danych w stopniu profesjonalnym, ale dla takich uczniów jak ja przedstawię krótki opis (sugeruję dalsze czytanie filmów z google i youtube).

Listy sprawdzania poprawności danych umożliwiają utworzenie zdefiniowanej struktury danych w skoroszycie. Są one bardziej przeznaczone do interakcji z użytkownikiem. Jeśli chcesz, aby użytkownik skoroszytu wstawiał tylko zestaw danych, na przykład pączki, ciasta, babeczki i bułki, możesz utworzyć listę przy użyciu nazwanego zakresu, powiedz „Przekąski” lub możesz utworzyć tabelę i nazwać ją jako „Przekąski”. Gdzie podana nazwa jest jednym słowem (tzn. W nazwie nie ma spacji)

Minusem korzystania z list jest to, że gdybyśmy musieli dodać kolejną przekąskę do listy o nazwie Rogaliki, musielibyśmy na nowo zdefiniować pierwotnie utworzone listy. Tabele omijają tę nieefektywność w tym sensie, że można łatwo dodać nowy wiersz do tabeli, dodając go z ostatniego wiersza lub zapisując kolejny wiersz po bieżącym wierszu tabeli i naciskając klawisz Enter.

Teraz w celu weryfikacji danych polecam odwiedzić poniższy link, aby uzyskać szczegółowe informacje, ponieważ wyjaśnienie powoduje, że to pytanie jest zbyt długie. http://analyticsdemystified.com/excel-tips/excel-dropdowns-done-right/

Zależna lista walidacyjna jest zatem listą opartą na wartości wybranej przez użytkownika z poprzedniej listy walidacyjnej, na przykład typy pączków obejmują pierścień mrożony, polewa czekoladowa, pączki z dżemem i kremem. Rodzaje muffin to banan, jagoda i czekolada. Rodzaje ciast obejmują czerwony aksamit, marchew i kokos. Wreszcie, typy Crumpets obejmują angielski, szkocki i Pikelet.

Jeśli więc komórka ma listę rozwijaną głównej listy kategorii, to jak utworzyć dynamiczną zależną listę sprawdzania poprawności na podstawie podkategorii.

Przez dynamicznie zależną listę walidacyjną rozumiem, że wszystkie listy kolumn są tabelami, jak pokazano poniżej.

Listy danych jako tabele

Teraz pytanie brzmi: jak zaimplementować sąsiednią komórkę, na przykład jeśli komórka C13 ma listę walidacji dla tabeli przekąsek, jak sprawić, by komórka D13 była listą walidacji opartą na danych wejściowych C13 wybranych przez użytkownika (tj. Jeśli C13 jest wybrane jako Donuts, to możliwy wybór listy walidacyjnej D13 będzie danymi kolumny tabeli Donuts).

Należy pamiętać, że oryginalna lista sprawdzania poprawności w C13 zostałaby utworzona za pomocą funkcji POŚREDNIE, ponieważ jest to tabela, a nie nazwany zakres.

MrMarho
źródło
contextures.com/xlDataVal02.html Możesz nazwać zakresy, które są dynamiczne, które =Sheet1!$A$2:INDEX(Sheet1!$A:$A,MATCH("ZZZ",Sheet1!$A:$A))będą zawierać wszystko w kolumnie A na Arkuszu1 od A2 do ostatniej komórki w tej kolumnie z tekstem. Umieść to jako formułę dla nazwanego zakresu.
Scott Craner,

Odpowiedzi:

2

Łatwy sposób w 4 prostych krokach

Krok 1 Utwórz tabele:

wprowadź opis zdjęcia tutaj

Krok 2 Nazwij swoje tabele: Wybierz tabele i zmień ich nazwy, tak aby pasowały do ​​wartości w tabeli podstawowej Table1 , np. Tabela 2 z nagłówkiem „Ciasta” powinna mieć nazwę Ciasto , ponieważ jest to wartość w tabeli podstawowej Tabela 1 .
Ale jak? Kliknij róg tabeli, aby ją wybrać, wprowadź nową etykietę z napisem Tabela 2 lub podobną i naciśnij klawisz Enter. Nie martw się, jeśli nadal wyświetla się napis „Tabela 2” itp.
( Uwaga! Nie jest to konieczne w przypadku tabeli podstawowej, np. Tabela 1).

wprowadź opis zdjęcia tutaj

Krok 3 Wybierz miejsce pierwszej listy, przejdź do karty danych i sprawdź poprawność danych. Wybierz „listę” i wpisz: =INDIRECT("Table1")w oknie źródłowym:

wprowadź opis zdjęcia tutaj

Krok 4 Wybierz komórkę dla drugiej listy, która będzie zależała od pierwszej listy. Wróć do sprawdzania poprawności danych, wybierz „listę” i wpisz, =INDIRECT(K2)gdzie „K2” to lokalizacja pierwszej listy.

wprowadź opis zdjęcia tutaj

GOTOWE

W przypadku trzeciej listy, zależnej od drugiej listy, powtórz krok 4 i odwołaj się do drugiej listy. Powodzenia!

Christofer Weber
źródło
Dziękuję za odpowiedź. Myślałem, że tak może być, ale nie byłem zbyt pewien. Jedyne pytanie, jakie mam, to czy nazwa tabeli pomocniczej nie musi być taka sama jak dane tabeli podstawowej, aby działała?
MrMarho
@MrMarho To prawda. Tak naprawdę nie wyjaśniłem tego poprawnie w kroku 2, zaktualizuję go.
Christofer Weber
0

Musisz tylko uwierzyć, że to działa, ale napisałem makro (bardzo niechlujne, kod spaghetti) do tego właśnie celu. Niestety, kod wcale nie jest elegancki, ale hej, działa! Jak mówią ... „Spraw, by działało, napraw to dobrze, spraw, aby było szybkie”.

Krok 1: Kod VBA

Potrzebujesz trzech rzeczy:

  1. Moduł tablic Chipa Pearsona --- rzeczywisty kod VBA jest na końcu.

  2. Moduł sortujący Chip Pearson - aktualny kod VBA również pod koniec.

  3. Moje strasznie zorganizowane makro

Aby wkleić je do modułów VBA w skoroszycie, naciśnij Alt+ F11, znajdź swój projekt w Eksploratorze projektów, kliknij prawym przyciskiem myszy folder Moduły i wybierz „Wstaw moduł”. Wklej kod z każdego z 3 powyższych łączy do oddzielnych modułów.

wprowadź opis zdjęcia tutaj

Podczas korzystania z edytora VBA otwórz okno dialogowe Odwołania ( Alt+ Tnastępnie Enter) i zaznacz „Środowisko wykonawcze skryptów Microsoft”.

wprowadź opis zdjęcia tutaj

Krok 2: uporządkowanie danych

Poza tym, teraz będziesz chciał arkusza z twoimi danymi (zwanymi, powiedzmy, „danymi”), jakby to była ładnie ustrukturyzowana baza danych. Oto jak bym to zrobił:

wprowadź opis zdjęcia tutaj

Zauważ, że utworzyłem jeszcze dwa arkusze. Jeden o nazwie Walidacja dla miejsca, w którym odbywa się logika sprawdzania poprawności, a drugi o nazwie Główny dla faktycznej treści, która jest ważna dla użytkownika końcowego.

Krok 3: Główny arkusz

Przejdźmy do arkusza danych i skonfiguruj następującą strukturę:

wprowadź opis zdjęcia tutaj

Wybierz komórkę C2i nazwij ją Snack.Selected. Aby nazwać komórkę, wybierz ją, a następnie naciśnij Alt M M D, a następnie wpisz nazwę w wyświetlonym oknie dialogowym, tak jak pokazuje to obrazek. Na razie wprowadź wartość taką jak „Ciasto”, aby kolejny krok miał sens.

Śmiało, a także nazwij komórkę C3„Type.Selected”, ale na razie pozostaw ją pustą.

Krok 4: Pobieranie wartości z naszej tabeli w arkuszu danych

Przejdź do arkusza Walidacja i skonfiguruj następującą strukturę:

wprowadź opis zdjęcia tutaj

Jak widać na zrzucie ekranu, należy wybrać komórki B3:B20i wpisać następującą formułę, w której faktycznie wchodzi moje makro:

=MultiLookup("Data","Snack",TRUE,TRUE)

Zamiast naciskać Enter, naciśnij Ctrl + Shift + Enter, ponieważ jest to formuła tablicowa

Jeśli działa zgodnie z reklamą, powinna zostać wyświetlona lista przekąsek, a po niej kilka błędów # N / A. Błędy są oczekiwane - oznaczają po prostu, że masz mniej przekąsek, niż się spodziewałeś na podstawie wielkości B3:B20.

Objaśnienie parametrów we wzorze:

  1. Arkusz, w którym znajdują się dane („Dane”)
  2. Pole, które chcesz z tego arkusza („Przekąska”)
  3. Usunąć duplikaty (tj. Zgrupowane)? (PRAWDZIWE)
  4. Posortowane alfabetycznie? (PRAWDZIWE)

Ok, to wydaje się dużo pracy za niewielką wartość, ale nadchodzi wielki finał. W komórkach C3:C20umieścisz następującą formułę:

=MultiLookup("Data","Type",TRUE,TRUE,"Snack",Snack.Selected)

Powinno to pokazywać dostępne rodzaje Ciasta, czyli wartość wprowadzoną w głównym arkuszu w poprzednim kroku, pamiętasz?

Działa to poprzez dodanie do formuły dwóch argumentów:

  1. Pole do filtrowania („Przekąska”)
  2. Wybierz tylko wartości równe (Snack.Selected)

Więc kiedy zmienisz swoje dane w Main, kolumna Typy zostanie zaktualizowana automatycznie!

Krok 5: Podsumowanie walidacji

Podsumowując, zakończmy sprawdzanie poprawności danych, tworząc nazwy Snack.Choicesi Type.Choices. Proszę odpowiednio nazwać komórki B1i C1w Walidacji. Możesz także po prostu wpisać to małe pole, aby nazwać komórkę:

wprowadź opis zdjęcia tutaj

W komórce B1musisz umieścić następującą formułę:

="Validation!"&CELL("address",B3)&":"&CELL("address",OFFSET(B$2,COUNTIF(B3:B50,"*"),0))

wprowadź opis zdjęcia tutaj

W ten sposób powstaje odwołanie tekstowe do walidacji! $ B $ 3: $ B $ 6, w której znajdują się twoje opcje przekąsek. Skopiuj tę formułę w prawo i gotowe!

Wróć do głównego arkusza i odwołajmy się do tych komórek w regułach sprawdzania poprawności Snack and Type.

Wybierz komórkę C2i kbd> Alt, A V Vaby utworzyć sprawdzanie poprawności danych. Wybierz „Lista” i ustaw źródło na =INDIRECT(Snack.Choices). Zauważ, że wokół nie ma żadnych cytatówSnack.Choices

wprowadź opis zdjęcia tutaj

Zrób to samo na komórce, C3ale ustaw źródło na =INDIRECT(Type.Choices).

Używamy, INDIRECT()ponieważ wartości Snack.Choicesi Type.Choicessą pośrednimi (tj. Tekstowymi) odniesieniami do zakresów w naszym skoroszycie.

Teraz baw się z opcjami sprawdzania poprawności, aby zobaczyć całość w akcji.

Daj mi znać, jeśli masz jakieś pytania!

Andy Terra
źródło
NB: Zacząłem pisać ten moduł wkrótce po pracy z Excelem po raz pierwszy. Wtedy nawet o tym nie wiedziałem Option Explicit, więc sprawy są bardzo nieuporządkowane i nie udało mi się tego posprzątać. Ale to działa! Łatki mile widziane.
Andy Terra,
Dziękuję za odpowiedź @Andre Terra. Jestem pewien, że działa idealnie, ale wygląda na to dla mnie zbyt skomplikowane lub pozwólcie, że sformułuję inaczej. Nie jestem gotowy zagłębić się w świat VBA, ale patrząc na to nie wydaje się, żebyś napisał kodowanie VBA lub stworzył makra do uruchomienia w skoroszycie. Być może to zrobiłeś, ale biorąc pod uwagę moją ograniczoną wiedzę na temat programu Excel, nie wydaje mi się, że tak. Spróbuję tego i zobaczę, jak to będzie.
MrMarho
@MrMarho Dzięki za miły komentarz. Nie musisz dotykać żadnego z VBA, ponieważ kod jest dostępny poprzez funkcje zdefiniowane przez użytkownika, z których jedną jest MultiLookup. Musisz tylko edytować kod, jeśli chcesz zmienić zachowanie funkcji. Po skonfigurowaniu daj mi znać, co myślisz. W międzyczasie przygotowuję dokładniejszy przewodnik wyjaśniający, dlaczego te funkcje są niesamowite. Tą odpowiedzią ledwo podrapałem powierzchnię.
Andy Terra