Niedawno Zbyszek zapisał się na newsletter i przy okazji zadał ciekawe pytanie: jak wyświetlić wartość z określonej kolumny, na podstawie jej nazwy? Myślę, że odpowiedź na to pytanie zaciekawi wieeelu z Was, dlatego postanowiłam napisać o tym post (i nagrać filmik – pod wpisem). Przykład z życia wzięty dopasowałam do tego taki:
Jest to tabelka pokazująca ceny za m2 mieszkań, znajdujących się na określonym piętrze budynku oraz o określonym metrażu. Metraż mamy w kolumna, piętra – w wierszach. W żółtych polach obok każdego piętra chcemy wybrać metraż z listy rozwijanej, i na tej podstawie ma nam się wyświetlić cena za m2 (w kolumnie Wartość). To jest zadanie na dziś i jednocześnie klasyczny przykład wykorzystania funkcji INDEKS i PODAJ.POZYCJĘ. Można byłoby tutaj wykorzystać też WYSZUKAJ.POZIOMO z PODAJ.POZYCJĘ (pod koniec wpisu też ją pokazuję).
Wybór metrażu – lista rozwijana
Aby stworzyć listę rozwijaną w żółtych komórkach na formatce, najpierw je zaznacz. Następnie Wejdź do menu Dane/ Poprawność danych. Pokaze się następujące okienko, w którym należy zaznaczyć to, co na obrazku poniżej:
Czyli jako dozwolony wybieramy Lista, a jako zakres listy podajemy zakres nagłówków z metrażem, czyli $D$3:$H$3.
Po zatwierdzeniu OK ta łatwiejsza część zadania za nami ;). Oczywiście pamiętajcie, że lista rozwijana to głównie bajerek, aczkolwiek jeśli mamy do czynienia z użytkownikiem, to jego pomysłowość może być nieograniczona (i zazwyczaj jest;)), więc lepiej nałożyć na niego pewne ograniczenia, jakie daje nam własnie lista. User będzie mógł wybrać tylko określone wartości, a nie np. 46,89 m2…
Oczywiście wartość metrażu można równie dobrze wpisać z palca.
Przyporządkowanie ceny za m2 – Formuła
Zabieramy się za formułę. Składa się ona z 2 funkcji: INDEKS i PODAJ POZYCJĘ. Pierwsza określa zakres, z którego mają być pobierane wartości, a druga – pozycję, na której znajduje się wartość do pobrania. Zauważcie, że wartość do pobrania „na odpowiednim piętrze”, czyli w odpowiednim wierszu, będzie dokładnie na tej samej pozycji, co wybrany przez usera metraż w nagłówku. Właśnie te 2 rzeczy wykorzystuje poniższa formuła, którą należy wpisać do kolumny Wartość:
=INDEKS(D4:H4;1;PODAJ.POZYCJĘ(B4;$D$3:$H$3;0))
Problem z nią jest tylko taki, że jak nie wpiszemy do żółtych komórek wartości, to jej wynik będzie… taki:
Oczywiście funkcja działa poprawnie w każdym przypadku, tylko jest nieelegancka. Tam, gdzie w żółtej komórce nie ma wartości – zwraca błąd #N/D!, ponieważ nie ma zerowego metrażu, a taki właśnie każemy jej wtedy szukać. Wynik prawidłowy, ale brzydki. Poprawmy go więc za pomocą JEŻELI.BŁĄD i np. nie wyświetlajmy nic w przypadku, gdy user nie wpisze wartości w żółtą komórkę. Formuła będzie taka:
=JEŻELI.BŁĄD(INDEKS(D4:H4;1;PODAJ.POZYCJĘ(B4;$D$3:$H$3;0));"")
Efekt otrzymujemy już taki:
Oczywiście można dyskutować, czy wyświetlać nic, czyli „”, co w rzeczywistości jest tekstem, czy np. 0. Oczywiście wszystko zależy. Jeśli nic dalej z tym nie będziemy robić, czyli nie wykorzystamy do dalszych przeliczeń – myślę, że ok jest zostawienie tego w takiej postaci. Jeśli natomiast coś dalej będziemy na tym liczyć – ja bym wolała, aby formuła wyświetlała zero, które zostanie ukryte dzięki odpowiedniemu formatowaniu niestandardowemu, które tego zera po prostu nie wyświetli. Jak zwykle wszystko zależy
Wersja formuły z WYSZUKAJ.POZIOMO
I na koniec obiecana wersja formuły. Ma ona też tę wadę, że trzeba w niej zagnieździć kolejną funkcję WIERSZ. No ale działa
=JEŻELI.BŁĄD(WYSZUKAJ.POZIOMO(B4;$D$3:$H$9;WIERSZ()-2;0);"")
Dajcie znać w komentarzach do czego jeszcze może Wam się to przydać. Domyślam się, że zastosowań tego jest dużo
MalinowyExcel_Excel w nieruchomościach INDEX i PODAJ.POZYCJĘ.xlsx
I wersja wideo: