W tym poście nauczymy się jak przy listach rozwijanych zależnych sprawić, żeby lista zależna od listy głównej odpowiednio się podświetlała, jeśli jest wypełniona nieprawidłową wartością.
W naszym przykładzie mamy dwie listy: w jednej możemy wybrać Region (Centrum, Wschód, Zachód, Północ i Południe), a w drugiej Sprzedawcę. Istotne jest, że w każdym regionie mamy innych sprzedawców. Jeśli zmienimy region, to nazwa sprzedawcy podświetli się (pokaże, że mamy błąd wynikający z tego, że danego sprzedawcy nie ma w wybranym przez nas regionie). Widać to na rys. nr 1.
Rys. nr 1 – podświetlony sprzedawca niewystępujący w danym regionie
Zagadnienie to omówimy na podstawie przykładowych danych z rys. nr 2.
Rys. nr 2 – przykładowe dane
Naszym
zadaniem jest sprawienie, aby komórka z elementem listy zależnej była albo
podświetlona albo wyczyszczona po zmianie regiony na głównej liście.
Rozwiązanie z podświetleniem nazwy sprzedawcy uzyskamy za pomocą formatowania
warunkowego. Natomiast rozwiązanie z czyszczeniem komórki otrzymamy przy użyciu
kodu VBA.
Mamy
przygotowane wcześniej listy (główną i zależną) oraz powiązaną z tymi listami
tabelę, która wyświetla dane dla wybranych wartości. Tabelki te zostały
przedstawione na rys. nr 3.
Rys. nr 3 – listy rozwijane
Najpierw
musimy sprawdzić czy dana pozycja występuje. Do tego wykorzystamy funkcję PODAJ.POZYCJĘ.
Pierwszym argumentem funkcji jest szukana_wartość, czyli komórka z
aktualnie wybranym sprzedawcą (u nas G2). Drugi argument funkcji to przeszukiwana_tab,
czyli kolumna Sprzedawcy (K2:K6). Trzeci argument to typ_porównania,
wybieramy dopasowanie dokładne, czyli wpisujemy wartość 0. Zapis formuły
powinien wyglądać następująco:
=PODAJ.POZYCJĘ(G2;K2:K6;0)
Jeśli danego
sprzedawcy nie będzie w wybranym regionie to funkcja PODAJ.POZYCJĘ wyświetli
nam błąd #N/D (rys. nr 4), co dla formatowania warunkowego oznacza, że nie
nakładamy żadnego formatowania.
Rys. nr 4 – błąd wyświetlany przez funkcję PODAJ.POZYCJĘ
Jeśli
zmienimy sprzedawcę na takiego, który występuje w wybranym regionie funkcja
PODAJ.POZYCJE zwróci nam wartość 1, 2 itd.
Formatowanie
warunkowe liczby całkowite różne od zera, traktuje jako wartość logiczną
PRAWDA. Za pomocą formatowania warunkowego sprawimy, że kolorystyka z komórki
G2 zniknie. Mamy napisaną formułę, którą wykorzystamy w formatowaniu warunkowym
(zapis funkcji PODAJ.POZYCJĘ). Kopiujemy zapis formuły w trybie edycji komórki
za pomocą skrótu klawiszowego Ctrl+C. Zaznaczamy komórkę G2 i rozwijamy
polecenie Formatowanie warunkowe (punkt 2 na rys. nr 5) z karty Narzędzia
główne (punkt 1), następnie wybieramy polecenie Nowa reguła (punkt
3).
Rys. nr 5 – polecenie Nowa reguła
Otworzy nam się okno Nowej reguły formatowania, gdzie w polu Wybierz typ reguły, wybieramy opcję Użyj formuły do określenia komórek, które należy sformatować (punkt 1 na rys. nr 6). Następnie w polu Edytuj opis reguły wklejamy wcześniej skopiowaną formułę (punkt 2). Teraz wybieramy przycisk Formatuj, aby wybrać rodzaj formatowania (punkt 3).
Rys. nr 6 – okno Nowej reguły formatowania
Otworzy nam się okno Formatowania komórek, gdzie przechodzimy na zakładkę Wypełnienie (punkt 1 na rys. nr 7), następnie wybieramy w polu Kolor tła Brak koloru (punkt 2). Takie ustawienie formatowania zatwierdzamy przyciskiem OK.
Rys. nr 7 – okno Formatowania komórek
Excel wróci
do okna Nowa reguła formatowania, które należy zatwierdzić przyciskiem OK.
Jak widać na
rys. nr 8, Stanisław jest sprzedawcą z regionu Północ, więc formatowanie
warunkowe zadziałało w ten sposób, że zmieniło kolor na Brak wypełnienia.
Rys. nr 8 – brak wypełnienia w komórce G2
Jeśli teraz w komórce G1 wybierzemy np. Zachód, nazwa Sprzedawcy podświetli się nam znowu na czerwono. Wynika to z tego, że funkcja PODAJ.POZYCJĘ zwróciła błąd (komórka H1) – rys. nr 9.
Rys. nr 9 – podświetlenie sprzedawcy nie występującego Zachód
W ten sposób
uzyskaliśmy efekt podświetlania kolorystycznego w zależności czy wybrany
sprzedawca występuje w danym regionie. Pokazaliśmy jak rozwiązać taki problem
za pomocą formatowania warunkowego.
W drugim
rozwiązaniu będzie nam potrzebny kod VBA, który jest relatywnie prosty w
porównaniu do niektórych kodów. Jednak żeby dobrze go zrozumieć, trzeba się trochę
orientować w VBA. Aby przejść do języka VBA korzystamy ze skrótu klawiszowego Alt+F11.
Otworzy nam się okno VBA pokazane na rys. nr 10.
Rys. nr 10 – okno VBA
Interesuje
nas sytuacja, kiedy zmienimy wartość w komórce G1, czyli Region. W VBA chcemy
uzyskać rozwiązanie, które będzie polegało na tym, żeby komórka G2 wyczyściła
się ,kiedy zmienimy wartość w komórce G1. Czyli kiedy zmienimy region, chcemy
aby komórka zawierająca nazwę sprzedawcy została wyczyszczona.
Pracujemy na
arkuszu p384_k, więc w panelu bocznym VBA znajdujemy odpowiednią nazwę (rys. nr
11) i klikamy na nią dwukrotnie.
Rys. nr 11 – wybór odpowiedniego arkusza
Otworzy się nam moduł kodu VBA dla tego arkusza, w którym będziemy pisać kod. W pierwszym polu zamiast domyślnego General wybieramy Worsheet (punkt 1 na rys. nr 12), a w drugiem zamiast SelectionChange wybieramy z listy rozwijanej Change (punkt 2).
Rys. nr 12 – zmiana ustawień kodu dla wybranego arkusza
Ostatnie
dwie linijki kodu możemy skasować, są zbędne. Będziemy chcieli zastosować znany
kod na przecięcie elementu/ wartości. Kod ten wykorzystuje funkcję Intersect,
dla której podajemy dwa zakresy i sprawdzamy czy one się przecięły. Pierwszym
naszym zakresem będzie wartość Target, czyli jeśli zmieni się arkusz, to
jaki zakres w tym arkuszu ulegnie zmianie. Target to w skrócie zakres, który
uległ zmianie. Nasze zadanie polega na sprawdzeniu, czy ten zakres ma część
wspólną z drugim zakresem (z komórką G1). Drugi zakres zapisujemy jako Range("G1").
Cały zapis funkcji powinien wyglądać następująco:
Intersect(Target,
Range("G1"))
Funkcja ta,
jeśli znajdzie część wspólną, zwróci właśnie tą wartość. Jeśli zakresy nie będą
miały części wspólnej funkcja zwróci Nothing, czyli pustą komórkę.
Ciężej jest
zorientować się jaki zakres zwraca ta funkcja, więc musimy sprawdzić czy nasza
funkcja zwraca nic. W tym celu do zapisu funkcji należy dopisać sformułowanie "is
nothing". Zapis powinien wyglądać następująco:
Intersect(Target, Range("G1")) is nothing
Jeśli funkcja
zwraca nothing, oznacza to, że przecięcia nie było. Nas interesuje odwrotna
sytuacja, więc przed nazwą funkcji Intersect musimy dopisać Not. Zapis powinien
wyglądać następująco:
Not (Intersect(Target, Range("G1")) is Nothing)
Wykonamy
teraz prosty test logiczny, czyli przed zapisem wpisujemy if, natomiast po
Then. Pod zapisem tej formuły wstawiamy zakończenie funkcji If w postaci zapisu
End If.
Jeśli funkcja
Intersect zwraca nic, oznacza to, że nasze zakresy nie mają przecięcia. W
takiej sytuacji chcemy otrzymać pusty ciąg znaków (""). Zapis
powinien wyglądać następująco (rys. nr 13):
If Not (Intersect(Target, Range("G1")) is Nothing) Then
Range("G2")
= ""
End If
Rys. nr 13 – kod VBA wykorzystujący funkcję If
Możemy łatwo sprawdzić działanie tego kodu. Dla pewności zapisujemy dane z kodu za pomocą skrótu klawiszowego Ctrl+S. Przechodzimy do naszego arkusza w Excelu, gdzie zmieniamy nazwę regionu. Jak widać na rys. nr 14, zmiana nazwy regionu na taki, w którym nie ma aktualnego sprzedawcy (brak przecięcia zakresów) sprawiło, że komórka G2 została wyczyszczona.
Rys. nr 14 – wyczyszczona komórka G2 po zmianie regionu w komórce G1
Możemy pójść
o krok dalej w kodzie VBA i np. zamiast wyczyszczenia komórki (pusty ciąg
znaków), możemy podać tekst "Podaj sprzedawcę". Zapis kodu wyglądałby
wtedy następująco:
If Not (Intersect(Target, Range("G1")) is Nothing) Then
Range("G2")
= "Podaj sprzedawcę"
End If
Wtedy po
zmianie region w komórce G1, w komórce G2 wyświetli się napis Podaj sprzedawcę,
co widać na rys. nr 15.
Rys. nr 15 – wyświetlenie napisu Podaj sprzedawcę
Jest mały
problem, kiedy chcemy zmienić nazwę regionu i się rozmyślimy. VBA automatycznie
po rozwinięciu listy rozwijanej (mimo że nie wybierzemy innego regionu)
zadziała i wyświetli nam napis Podaj sprzedawcę.
Teraz
wykonamy bardziej zaawansowane działania w celu zabezpieczenia się przed taką
sytuacją. Przechodzimy do okna VBA, w którym pisaliśmy nasz kod. Możemy użyć
funkcji Find. Najpierw musimy określić zakres, na którym ta funkcja ma
działać(w naszym przykładzie K2:K8). Funkcja Find będzie szukała naszego wybranego
sprzedawcy, czyli musimy podać zakres (Range("G2")). Jak funkcja Find
znajdzie wybranego sprzedawcę to powinna zwracać odpowiedni zakres, natomiast
jeśli nie znajdzie, powinna zwracać nothing, czyli nic. Zapis całej formuły
powinien wyglądać następująco (rys. nr 16):
If Not (Intersect(Target, Range("G1")) is Nothing) Then
If Range("K2:K8").Find
(Range("G2")).Value, LookIn:=xlValues) is Nothing Then
Range("G2")
= "Podaj sprzedawcę"
End If
End If
Rys. nr 16 – kod VBA
Zastosowanie funkcji Find w funkcji If sprawiło, że wyświetli się napis Podaj sprzedawcę tylko wtedy, kiedy faktycznie ta zmiana w komórce G1 nastąpi.
Książka Mistrz Excela + promo na 35 urodziny
Chcę Cię poinformować, że w końcu udało mi zebrać środki i dopiąć wszystkich formalności, żeby powstało II wydanie mojej książki Mistrz Excela (zostałem wydawcą) II wydanie jest wzbogacone o rozdział (nr 22) wprowadzający w genialny dodatek (Power Query) do Excela służący do pobierania, łączenia i wstępnej obróbki danych z wielu źródeł.
Książka Mistrz Excela to historia Roberta, który musi poznać dobrze Excela na potrzeby nowej pracy. Książka jest napisana w formie rozmów Roberta z trenerem, dzięki temu jest przystępniejsza w odbiorze niż standardowe książki techniczne pisane językiem "wykładowym".
Rozmowy zostały podzielone na 22 tematyczne rozdziały, które krok po kroku wprowadzają Cię w tajniki Excela. Robert zaczyna naukę od poznania ciekawych aspektów sortowania i filtrowania danych w Excelu, przechodzi przez formatowanie warunkowe, tabele przestawne, funkcje wyszukujące i wiele innych tematów, by na koniec poznać wstępne informacje o VBA i Power Query. A wszystko to na praktycznych przykładach i z dużą ilością zdjęć.
Żebyś mógł śledzić postępy Roberta, do książki dołączone są pliki Excela, na których pracuje Robert.
Na powyższej stronie znajdziesz dokładniejszy opis książki, opinie osób, które kupiły I wydanie oraz podgląd pierwszego rozdziału książki, żeby upewnić się, czy forma rozmów przy nauce Excela jest dla Ciebie. Jeśli książka Ci się spodoba poinformuj o niej swoich znajomych.
W ramach promocji na moje 35 urodziny możesz też mieć każdy z moich kursów wideo na Udemy za zaledwie 35 zł. Linki do kursów zamieszczam poniżej. W każdym kursie są udostępnione filmy do podglądu, byś mógł się przekonać czy dany kurs jest dla Ciebie.
W tej
poradzie omówimy działanie funkcji WYSZUKAJ.PIONOWO z dopasowaniem
przybliżonym, czyli kiedy mamy ustalone progi np. progi zdobywania premii ze
sprzedaży lub progi ocen w szkole. Temat ten omówimy na podstawie przykładowych
danych z rysunku nr 1.
rys. nr 1 — Przykładowe dane
W naszych danych mamy przykładowe wartości punktowe uzyskane
przez uczniów z egzaminu i musimy na ich podstawie wstawić oceny. W tabeli z
wynikami mamy progi do poszczególnych ocen. Liczba punktów od 0 do 55 daje
ocenę 2, liczba punktów między 55 a 65 daje nam ocenę 3 itd. Należy zwrócić
uwagę jak to jest rozpisane, mianowicie że mamy z jednej strony przedział
domknięty, czyli jeśli uczeń zdobędzie np. 65 punktów otrzyma już ocenę 3,5.
Bardzo ważne jest, że jeśli chcemy użyć funkcji
WYSZUKAJ.PIONOWO z dopasowaniem przybliżonym, nasze dane muszą być posortowane
rosnąco, czyli od najmniejszej wartości
do największej. Dopasowanie przybliżone działa na zasadzie wyszukiwania
binarnego.
Aby zrozumieć jak działa funkcja omówimy to na przykładzie.
Sprawdzimy ilość punktów jaką zdobył Alex – 67, przechodzimy do tabeli obok i w
kolumnie F sprawdzamy, która z wartości w tej kolumnie jest większa od 67.
Dochodzimy do wartości 70, ona nie spełnia warunku, więc cofamy się do wartości
65 i z tego wiersza wybieramy odpowiadającą temu wynikowi ocenę (rys. nr 2).
rys. nr 2 — Obrazowy sposób działania funkcji WYSZUKAJ.PIONOWO z dopasowanie przybliżonym
Formuła funkcji WYSZUKAJ.PIONOWO będzie wyglądać następująco:
= WYSZUKAJ.PIONOWO(B2;$F$3:$H$8;3;1)
Pierwszym argumentem funkcji jest szukana_wartość, czyli
ilość punktów zdobyta przez ucznia. Drugi argument to tabela_tablica,
mianowicie dane z tabeli obok – progi ilości punktów i oceny w zależności od
nich, blokujemy te dane za pomocą skrótu klawiszowego F4, żeby się nie ruszała
przy kopiowaniu formuły. Pamiętajmy, że funkcja WYSZUKAJ.PIONOWO będzie
wyszukiwać wyniku tylko w pierwszej kolumnie. Trzeci argument to
nr_indeksu_kolumny, czyli z której kolumny funkcja ma wyciągnąć wartość, jak
już znajdzie odpowiedni przedział w pierwszej kolumnie, w naszym przypadku z
trzeciej kolumny – oceny (rys. nr 3).
rys. nr 3 — Trzeci argument funkcji
Czwarty argument to poszukiwany_zakres, czyli rodzaj
dopasowania: przybliżone lub dokładne. W naszym przykładzie chcemy skorzystać z
dopasowania przybliżonego, więc wpiszemy słowo PRAWDA lub 1 (rys. nr 4).
Zatwierdzamy formułę i kopiujemy na wiersze poniżej.
rys. nr 4 — Czwarty argument funkcji
Możemy pominąć uzupełnienie czwartego argumentu, ale należy
pamiętać, że domyślną opcją przy pominięciu tego argumentu jest dopasowanie
przybliżone.
W naszym przykładzie jako dane mieliśmy liczby. W poprzednim
poście używaliśmy funkcji WYSZUKAJ.PIONOWO z dopasowaniem dokładnym.
Należy pamiętać że przy dopasowaniu przybliżonym zawsze
trzeba określić najmniejsza wartość jaka może się pojawić.
Książka Mistrz Excela + promo na 35 urodziny
Chcę Cię poinformować, że w końcu udało mi zebrać środki i dopiąć wszystkich formalności, żeby powstało II wydanie mojej książki Mistrz Excela (zostałem wydawcą) II wydanie jest wzbogacone o rozdział (nr 22) wprowadzający w genialny dodatek (Power Query) do Excela służący do pobierania, łączenia i wstępnej obróbki danych z wielu źródeł.
Książka Mistrz Excela to historia Roberta, który musi poznać dobrze Excela na potrzeby nowej pracy. Książka jest napisana w formie rozmów Roberta z trenerem, dzięki temu jest przystępniejsza w odbiorze niż standardowe książki techniczne pisane językiem "wykładowym".
Rozmowy zostały podzielone na 22 tematyczne rozdziały, które krok po kroku wprowadzają Cię w tajniki Excela. Robert zaczyna naukę od poznania ciekawych aspektów sortowania i filtrowania danych w Excelu, przechodzi przez formatowanie warunkowe, tabele przestawne, funkcje wyszukujące i wiele innych tematów, by na koniec poznać wstępne informacje o VBA i Power Query. A wszystko to na praktycznych przykładach i z dużą ilością zdjęć.
Żebyś mógł śledzić postępy Roberta, do książki dołączone są pliki Excela, na których pracuje Robert.
Na powyższej stronie znajdziesz dokładniejszy opis książki, opinie osób, które kupiły I wydanie oraz podgląd pierwszego rozdziału książki, żeby upewnić się, czy forma rozmów przy nauce Excela jest dla Ciebie. Jeśli książka Ci się spodoba poinformuj o niej swoich znajomych.
W ramach promocji na moje 35 urodziny możesz też mieć każdy z moich kursów wideo na Udemy za zaledwie 35 zł. Linki do kursów zamieszczam poniżej. W każdym kursie są udostępnione filmy do podglądu, byś mógł się przekonać czy dany kurs jest dla Ciebie.
W dzisiejszym poście zajmiemy się funkcją WYSZUKAJ.PIONOWO z
dopasowaniem dokładnym. Porada ta powstała w odpowiedzi na pytania moich fanów,
dla których odpowiedzią często jest funkcja WYSZUKAJ.PIONOWO. Nagrałem 2 filmy
opisujące działanie tej funkcji na zasadzie dopasowania dokładnego i
przybliżonego. Zagadnienie to omówimy na przykładowych danych ze sprzedaży z
rysunku nr 1.
rys. nr 1 — Przykładowe dane
W naszych danych mamy podaną datę, produkt i ilość
sprzedanego produktu. Nie mamy natomiast ceny będziemy jej potrzebować do
podsumowania sprzedaży. W drugiej tabeli mamy również podane ceny jednostkowe
poszczególnych produktów.
Gdybyśmy chcieli to zrobić ręcznie to po prostu nazwę
produktu musielibyśmy wyszukać w drugiej tabeli, sprawdzić jego cenę i wpisać tą
cenę do pierwszej tabeli w kolumnie Cena (rys. nr 2).
rys. nr 2 — Działanie funkcji WYSZUKAJ.PIONOWO
Jest to żmudna i czasochłonna praca, a w rzeczywistości w
obrazowy sposób przedstawia działanie funkcji WYSZUKAJ.PIONOWO.
Wpisujemy w komórkę D2 formułę funkcji wyglądającą
następująco:
=WYSZUKAJ.PIONOWO(B2;$F$2:$G$8;2;0)
Pierwszy argument to szukana_wartość, czyli nazwa produktu
który będziemy wyszukiwać. Drugi argument to tabela_tablica, czyli dane, które
będziemy przeszukiwać , aby znaleźć interesujące nas wartości (w naszym
przykładzie tabela druga F2:G8). Należy pamiętać aby nie zaznaczać nagłówków
danych, w których będziemy wyszukiwać wartości. Aby zmienić odwołanie do tabeli
na bezwzględne, (czyli je zablokować, aby nam się nie przesuwały, kiedy
będziemy kopiować formułę w dół) używamy skrótu klawiszowego F4 zaraz po
wstawieniu odwołania do tego zakresu do formuły.
Ważne, abyśmy pamiętali, że funkcja WYSZUKAJ.PIONOWO będzie
szukała nazwy produktu tylko i wyłącznie w pierwszej kolumnie tabeli, a
następnie przesunie się w prawo, aby znaleźć powiązaną informację.
Kolejnym argumentem funkcji jest nr_indeksu_kolumny, czyli
kolejny numer kolumny do której funkcja musi się przesunąć, aby znaleźć wynik
powiązany – w naszym przypadku cenę czyli 2 kolumnę (rys. nr 3).
rys. nr 3 — Trzeci argument funkcji WYSZUKAJ.PIONOWO
Ostatnim argumentem funkcji jest poszukiwany_zakres, czyli
sposób dopasowania. My chcemy użyć dopasowania dokładnego. Dopasowanie dokładne
przeszukuje pierwszą kolumnę od początku i zatrzymuje się, gdy znajdzie
dokładnie taką samą wartość jak wartość szukana. Wpisujemy wartość logiczną FAŁSZ
lub 0 (rys. nr 4).
rys. nr 4 — Czwarty argument funkcji WYSZUKAJ.PIONOWO
Zatwierdzamy formułę i kopiujemy ją na wiersze poniżej.
Należy pamiętać, że jeśli w tabeli, którą przeszukujemy mamy
wpisany produkt dwa razy, to funkcja WYSZUKAJ.PIONOWO znajdzie tylko pierwszą
wpisaną wartość i nie będzie szukać dalej. A jeśli będzie brakować jakiejś
nazwy, której szukamy, funkcja WYSZUKAJ.PIONOWO zwróci nam błąd #N/D! (brak na
liście).
Książka Mistrz Excela + promo na 35 urodziny
Chcę Cię poinformować, że w końcu udało mi zebrać środki i dopiąć wszystkich formalności, żeby powstało II wydanie mojej książki Mistrz Excela (zostałem wydawcą) II wydanie jest wzbogacone o rozdział (nr 22) wprowadzający w genialny dodatek (Power Query) do Excela służący do pobierania, łączenia i wstępnej obróbki danych z wielu źródeł.
Książka Mistrz Excela to historia Roberta, który musi poznać dobrze Excela na potrzeby nowej pracy. Książka jest napisana w formie rozmów Roberta z trenerem, dzięki temu jest przystępniejsza w odbiorze niż standardowe książki techniczne pisane językiem "wykładowym".
Rozmowy zostały podzielone na 22 tematyczne rozdziały, które krok po kroku wprowadzają Cię w tajniki Excela. Robert zaczyna naukę od poznania ciekawych aspektów sortowania i filtrowania danych w Excelu, przechodzi przez formatowanie warunkowe, tabele przestawne, funkcje wyszukujące i wiele innych tematów, by na koniec poznać wstępne informacje o VBA i Power Query. A wszystko to na praktycznych przykładach i z dużą ilością zdjęć.
Żebyś mógł śledzić postępy Roberta, do książki dołączone są pliki Excela, na których pracuje Robert.
Na powyższej stronie znajdziesz dokładniejszy opis książki, opinie osób, które kupiły I wydanie oraz podgląd pierwszego rozdziału książki, żeby upewnić się, czy forma rozmów przy nauce Excela jest dla Ciebie. Jeśli książka Ci się spodoba poinformuj o niej swoich znajomych.
W ramach promocji na moje 35 urodziny możesz też mieć każdy z moich kursów wideo na Udemy za zaledwie 35 zł. Linki do kursów zamieszczam poniżej. W każdym kursie są udostępnione filmy do podglądu, byś mógł się przekonać czy dany kurs jest dla Ciebie.