Użyj nazw zakresów dynamicznych w programie Excel, aby uzyskać elastyczne listy rozwijane

Arkusze kalkulacyjne Excel(Excel) często zawierają listy rozwijane komórek, aby uprościć i/lub ujednolicić wprowadzanie danych. Te listy rozwijane są tworzone przy użyciu funkcji sprawdzania poprawności danych w celu określenia listy dozwolonych wpisów.

Aby skonfigurować prostą listę rozwijaną, wybierz komórkę, w której zostaną wprowadzone dane, a następnie kliknij Sprawdzanie poprawności danych(Data Validation) (na karcie Dane(Data) ), wybierz Sprawdzanie poprawności danych(Data Validation) , wybierz Lista(List) (w obszarze Zezwalaj(Allow) :), a następnie wprowadź elementy listy (oddzielone przecinkami ) w polu Źródło(Source) : (patrz rysunek 1).

W tym typie podstawowego menu rozwijanego lista dozwolonych wpisów jest określona w samej walidacji danych; dlatego, aby wprowadzić zmiany na liście, użytkownik musi otworzyć i edytować walidację danych. Może to być jednak trudne dla niedoświadczonych użytkowników lub w przypadkach, gdy lista wyborów jest długa.

Inną opcją jest umieszczenie listy w nazwanym zakresie w arkuszu kalkulacyjnym(named range within the spreadsheet) , a następnie określenie tej nazwy zakresu (poprzedzonej znakiem równości) w polu Źródło(Source) : sprawdzania poprawności danych (jak pokazano na Rysunku 2(Figure 2) ).

Ta druga metoda ułatwia edycję wyborów na liście, ale dodawanie lub usuwanie elementów może być problematyczne. Ponieważ nazwany zakres ( FruitChoices , w naszym przykładzie) odnosi się do ustalonego zakresu komórek ($ H $ 3: $ H $ 10, jak pokazano), jeśli do komórek H11 lub niższych zostanie dodanych więcej opcji, nie pojawią się one na liście rozwijanej (ponieważ te komórki nie należą do zakresu FruitChoices ).

Podobnie, jeśli, na przykład, wpisy Gruszki(Pears) i Truskawki(Strawberries) zostaną usunięte, nie będą się już pojawiać w menu rozwijanym, ale zamiast tego lista będzie zawierała dwie „puste” opcje, ponieważ lista ta nadal odwołuje się do całego zakresu FruitChoices, w tym pustych komórek H9 i H10 .

Z tych powodów, gdy jako źródło listy rozwijanej używany jest normalny nazwany zakres, sam nazwany zakres należy edytować, aby zawierał więcej lub mniej komórek, jeśli wpisy są dodawane lub usuwane z listy.

Rozwiązaniem tego problemu jest użycie nazwy zakresu dynamicznego(dynamic) jako źródła opcji rozwijanych. Nazwa zakresu dynamicznego to taka, która automatycznie rozszerza się (lub kurczy), aby dokładnie dopasować rozmiar bloku danych w miarę dodawania lub usuwania wpisów. Aby to zrobić, użyj formuły(formula) zamiast stałego zakresu adresów komórek, aby zdefiniować nazwany zakres.

Jak skonfigurować zakres dynamiczny(Dynamic Range) w programie Excel(Excel)

Normalna (statyczna) nazwa zakresu odnosi się do określonego zakresu komórek ($H$3:$H$10 w naszym przykładzie, patrz poniżej):

Ale zakres dynamiczny jest definiowany za pomocą wzoru (patrz poniżej, zaczerpniętego z oddzielnego arkusza kalkulacyjnego, który używa nazw zakresów dynamicznych):

Zanim zaczniemy, pobierz nasz przykładowy plik Excel  (makra sortowania zostały wyłączone).

Przyjrzyjmy się szczegółowo tej formule. Wybory dla owoców znajdują się w bloku komórek bezpośrednio pod nagłówkiem ( OWCE(FRUITS) ). Nagłówek ten ma również przypisaną nazwę: FruitsHeading :

Cała formuła użyta do zdefiniowania zakresu dynamicznego dla wyborów Fruits to:(Fruits)

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(OFFSET(FruitsHeading,1,0,20,1)),0,0),0)-1,20),1)

FruitsHeading odnosi się do nagłówka znajdującego się o jeden wiersz powyżej pierwszego wpisu na liście. Liczba 20 (użyta w formule dwa razy) to maksymalny rozmiar (liczba wierszy) listy (można to dostosować według potrzeb).

Zauważ, że w tym przykładzie na liście jest tylko 8 wpisów, ale poniżej znajdują się również puste komórki, w których można dodać dodatkowe wpisy. Liczba 20 odnosi się do całego bloku, w którym można dokonywać wpisów, a nie do rzeczywistej liczby wpisów.

Teraz podzielmy formułę na części (oznaczając każdy kawałek kolorami), aby zrozumieć, jak to działa:

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(OFFSET(FruitsHeading,1,0,20,1)),0,0),0)-1,20),1)

Elementem „najbardziej wewnętrznym” jest PRZESUNIĘCIE(FruitsHeading,1,0,20,1)(OFFSET(FruitsHeading,1,0,20,1)) . Odwołuje się to do bloku 20 komórek (pod komórką FruitsHeading ), w którym można wprowadzać opcje. Ta funkcja PRZESUNIĘCIA(OFFSET) zasadniczo mówi: Zacznij od komórki FruitsHeading , przejdź w dół o 1 wiersz i ponad 0 kolumn, a następnie wybierz obszar o długości 20 wierszy i szerokości 1 kolumny. To daje nam 20-rzędowy blok, w którym wprowadzane są wybory owoców .(Fruits)

Kolejnym elementem formuły jest funkcja ISBLANK :

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(the above),0,0),0)-1,20),1)

Tutaj funkcja OFFSET (wyjaśniona powyżej) została zastąpiona przez „powyżej” (aby ułatwić czytanie). Ale funkcja ISBLANK działa na 20-wierszowym zakresie komórek zdefiniowanym przez funkcję PRZESUNIĘCIE(OFFSET) .

ISBLANK tworzy następnie zestaw 20 wartości PRAWDA(TRUE) i FAŁSZ(FALSE) , wskazując, czy każda z poszczególnych komórek w zakresie 20 wierszy, do którego odwołuje się funkcja PRZESUNIĘCIE(OFFSET) , jest pusta (pusta), czy nie. W tym przykładzie pierwsze 8 wartości w zestawie będzie miało wartość FAŁSZ(FALSE) , ponieważ pierwsze 8 komórek nie jest pustych, a ostatnie 12 wartości to PRAWDA(TRUE) .

Kolejnym elementem formuły jest funkcja INDEKS(INDEX) :

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,INDEX(the above,0,0),0)-1,20),1)

Ponownie, „powyżej” odnosi się do opisanych powyżej funkcji ISBLANK i OFFSET . Funkcja INDEX zwraca tablicę zawierającą 20 wartości TRUE / FALSE utworzonych przez funkcję ISBLANK .

INDEKS(INDEX) jest zwykle używany do wybrania określonej wartości (lub zakresu wartości) z bloku danych poprzez określenie określonego wiersza i kolumny (w ramach tego bloku). Jednak ustawienie wartości wejściowych wierszy i kolumn na zero (tak jak to zrobiono tutaj) powoduje, że INDEKS(INDEX) zwraca tablicę zawierającą cały blok danych.

Kolejnym elementem formuły jest funkcja PODAJ.POZYCJĘ(MATCH) :

=OFFSET(FruitsHeading,1,0,IFERROR(MATCH(TRUE,the above,0)-1,20),1)

Funkcja PODAJ.POZYCJĘ(MATCH) zwraca pozycję pierwszej wartości PRAWDA(TRUE) w tablicy, która jest zwracana przez funkcję INDEKS(INDEX) . Ponieważ pierwszych 8 wpisów na liście nie jest pustych, pierwsze 8 wartości w tablicy będzie FALSE , a dziewiąta będzie TRUE (ponieważ dziewiąty wiersz w zakresie jest pusty).

Tak więc funkcja PODAJ.POZYCJĘ(MATCH) zwróci wartość 9 . W tym przypadku jednak naprawdę chcemy wiedzieć, ile wpisów znajduje się na liście, więc formuła odejmuje 1 od wartości PODAJ.POZYCJĘ(MATCH) (co daje pozycję ostatniego wpisu). Tak więc ostatecznie MATCH ( PRAWDA(TRUE) ,powyższy,0)-1 zwraca wartość 8 .

Następnym elementem formuły jest funkcja JEŻELI.BŁĄD(IFERROR) :

=OFFSET(FruitsHeading,1,0,IFERROR(the above,20),1)

Funkcja JEŻELI.BŁĄD(IFERROR) zwraca wartość alternatywną, jeśli pierwsza określona wartość powoduje błąd. Ta funkcja jest zawarta, ponieważ jeśli cały blok komórek (wszystkie 20 wierszy) jest wypełniony wpisami, funkcja PODAJ.POZYCJĘ(MATCH) zwróci błąd.

Dzieje się tak dlatego, że mówimy funkcji PODAJ.POZYCJĘ(MATCH) , aby szukała pierwszej wartości PRAWDA(TRUE) (w tablicy wartości z funkcji CZY.PUSTE(ISBLANK) ), ale jeśli ŻADNA(NONE) z komórek nie jest pusta, cała tablica zostanie wypełniona wartościami FAŁSZ(FALSE) . Jeśli MATCH nie może znaleźć wartości docelowej ( TRUE ) w przeszukiwanej tablicy, zwraca błąd.

Jeśli więc cała lista jest pełna (a zatem funkcja PODAJ.POZYCJĘ(MATCH) zwróci błąd), funkcja JEŻELI.BŁĄD(IFERROR) zwróci wartość 20 (wiedząc, że na liście musi być 20 wpisów).

Na koniec PRZESUNIĘCIE(FruitsHeading,1,0,powyższy,1)(OFFSET(FruitsHeading,1,0,the above,1)) zwraca zakres, którego faktycznie szukamy: Zacznij od komórki FruitsHeading , przejdź w dół o 1 wiersz i ponad 0 kolumn, a następnie wybierz obszar, który ma tyle wierszy, ile wynosi na liście znajdują się wpisy (i szerokości 1 kolumny). Tak więc cała formuła razem zwróci zakres, który zawiera tylko rzeczywiste wpisy (do pierwszej pustej komórki).

Użycie tej formuły do ​​zdefiniowania zakresu będącego źródłem listy rozwijanej oznacza, że ​​można swobodnie edytować listę (dodawać lub usuwać wpisy, o ile pozostałe wpisy zaczynają się od górnej komórki i są ciągłe), a lista rozwijana zawsze będzie odzwierciedlać bieżącą lista (patrz Rysunek 6(Figure 6) ).

Przykładowy plik (Dynamic Lists) , który został tutaj użyty, jest dołączony i można go pobrać z tej witryny. Makra jednak nie działają, ponieważ WordPress nie lubi książek Excela z makrami w nich.(Excel)

Jako alternatywę do określania liczby wierszy w bloku listy, blokowi listy można przypisać własną nazwę zakresu, której można następnie użyć w zmodyfikowanej formule. W przykładowym pliku druga lista ( Names ) używa tej metody. Tutaj całemu blokowi listy (pod nagłówkiem „NAZWY”, 40 wierszy w przykładowym pliku) przypisywana jest nazwa zakresu NameBlock . Alternatywna formuła definiowania NamesList to:

=OFFSET(NamesHeading,1,0,IFERROR(MATCH(TRUE,INDEX(ISBLANK(NamesBlock),0,0),0)-1,ROWS(NamesBlock)),1)

gdzie NamesBlock zastępuje PRZESUNIĘCIE(OFFSET) ( FruitsHeading,1,0,20,1 ), a ROWS(NamesBlock) zastępuje 20 (liczbę wierszy) we wcześniejszej formule.

Tak więc, w przypadku list rozwijanych, które można łatwo edytować (w tym przez innych użytkowników, którzy mogą być niedoświadczeni), spróbuj użyć nazw zakresów dynamicznych! Pamiętaj, że chociaż ten artykuł koncentrował się na listach rozwijanych, nazwy zakresów dynamicznych mogą być używane wszędzie tam, gdzie potrzebujesz odwołać się do zakresu lub listy, które mogą różnić się rozmiarem. Cieszyć się!



About the author

Jestem informatykiem z ponad 10-letnim doświadczeniem. W wolnym czasie lubię pomagać przy biurku i uczyć dzieci korzystania z Internetu. Moje umiejętności obejmują wiele rzeczy, ale najważniejsze jest to, że wiem, jak pomagać ludziom w rozwiązywaniu problemów. Jeśli potrzebujesz kogoś, kto pomoże Ci w pilnej sprawie lub po prostu potrzebujesz podstawowych wskazówek, skontaktuj się ze mną!



Related posts