Ź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.
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.
źródło
=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.Odpowiedzi:
Łatwy sposób w 4 prostych krokach
Krok 1 Utwórz tabele:
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).
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: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.GOTOWE
W przypadku trzeciej listy, zależnej od drugiej listy, powtórz krok 4 i odwołaj się do drugiej listy. Powodzenia!
źródło
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:
Moduł tablic Chipa Pearsona --- rzeczywisty kod VBA jest na końcu.
Moduł sortujący Chip Pearson - aktualny kod VBA również pod koniec.
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.
Podczas korzystania z edytora VBA otwórz okno dialogowe Odwołania ( Alt+ Tnastępnie Enter) i zaznacz „Środowisko wykonawcze skryptów Microsoft”.
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ł:
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ę:
Wybierz komórkę
C2
i 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ę:
Jak widać na zrzucie ekranu, należy wybrać komórki
B3:B20
i 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:
Ok, to wydaje się dużo pracy za niewielką wartość, ale nadchodzi wielki finał. W komórkach
C3:C20
umieś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:
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.Choices
iType.Choices
. Proszę odpowiednio nazwać komórkiB1
iC1
w Walidacji. Możesz także po prostu wpisać to małe pole, aby nazwać komórkę:W komórce
B1
musisz umieścić następującą formułę:="Validation!"&CELL("address",B3)&":"&CELL("address",OFFSET(B$2,COUNTIF(B3:B50,"*"),0))
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ę
C2
i 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
Zrób to samo na komórce,
C3
ale ustaw źródło na=INDIRECT(Type.Choices)
.Używamy,
INDIRECT()
ponieważ wartościSnack.Choices
iType.Choices
są 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!
źródło
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.