Przeszukiwanie tabel w Excelu – dwa wyrazy w jednym wierszu (kolumnie)

by Marcin

ExcelTabelkaSzukanie2

Andrzej, jeden z czytelników bloga zadał następujące pytanie:

W 2 kolumnach mam wiele różnych zmiennych np. Imiona, samochody. są one także rozmieszczone w tablicy, skąd trzeba pobrac dane. Zadanie polega na tym, że jeśli w kolumnie1 jest wyraz „Maria”, w kolumnie2 „opel”, to excel ma przeszukać całą tablice i sprawdzić, czy oba wyrazy występują w jednej kolumnie (lub wierszu, po transpozycji tablicy). Jeśli tak, wstawić literę „s”, jeśli nie, „d” (…) Inną odmianą tego zadania jest, jeśli dane znajdują sie w tej samej kolumnie/wierszu, Excel ma podać numer kolumny/wiersza”

Ponieważ  próba odpowiedzi na to pytanie łączy się nieco (postanowiłem nawet użyć tej samej przykładowej tabeli) z moim ostatnim wpisem o przeszukiwaniu tabeli w Excelu, postanowiłem iść za ciosem i zaproponować rozwiązanie problemu, a w zasadzie jedno z możliwych rozwiązań.

Układ mojego skoroszytu wygląda następująco:

ExcelTabelaPrzeszukiwanie

Z lewej strony mamy więc tabelkę, w kórej będziemy poszukiwać wyrażeń. Jest to dokładnie ta sama tabelka, której użyłem we wspomnianym wcześniej wpisie o przeszukiwanie tabeli w Excelu.  W tabeli obok znajduje się miejsce na wpisanie dwóch poszukiwanych wyrazów, kolumna z informacją czy wyrazy te znajdują się w jednym wierszu, oraz dwie kolumny z informacją o numerze tego wiersza (numer liczony od początku tabelki oraz od początku skoroszytu).  Dodatkowo, umieściłem tam także komórkę do której należy wpisać ilość wierszy naszej tabeli z wyrażeniami/wyrazami. Korzystam z tej liczby w swoich formułach.

ExcelTabelaPrzeszukiwanie2

Na koniec formuły, które umieściłem w kolumnach I, J i K. Wszystkie formuły są formułami tablicowymi. Nie będę tłumaczył ich działania. Jeżeli prześledziłeś moje poprzednie wpisy na blogu nie będziesz miał problemów ze zrozumieniem formuł. Jeżeli nie prześledziłeś moich wpisów, … no cóż…. pora prześledzić :)

1. Sprawdzamy czy dwa wyrazy znajdują się w jednym wierszu.

{=JEŻELI(SUMA(LICZ.JEŻELI(PRZESUNIĘCIE($B$6:$E$6,WIERSZ(ADR.POŚR("1:"&G10)),0),G7)*LICZ.JEŻELI(PRZESUNIĘCIE($B$6:$E$6,WIERSZ(ADR.POŚR("1:"&G10)),0),H7)),"S","D")}

2. Zwracamy numer tego wiersza (licząc od początku tabelki)

{=PODAJ.POZYCJĘ(1,LICZ.JEŻELI(PRZESUNIĘCIE($B$6:$E$6,WIERSZ(ADR.POŚR("1:"&G10)),0),G7)*LICZ.JEŻELI(PRZESUNIĘCIE($B$6:$E$6,WIERSZ(ADR.POŚR("1:"&G10)),0),H7),0)}

3. Zwracamy numer tego wiersza (licząc od początku skoroszytu)

{=SUMA(LICZ.JEŻELI(PRZESUNIĘCIE($B$6:$E$6,WIERSZ(ADR.POŚR("1:"&G10)),0),G7)*LICZ.JEŻELI(PRZESUNIĘCIE($B$6:$E$6,WIERSZ(ADR.POŚR("1:"&G10)),0),H7)*WIERSZ(PRZESUNIĘCIE($B$7:$E$7,0,0,G10)))}

Zbyt długo tego nie testowałem, ale wydaje się działać jak należy. Dodam jeszcze, że moim założeniem jest to, że poszukiwana para wyrazów występuje tylko raz w przeszukiwanej tabeli.

Dla wszystkich zainteresowanych plik z przykładem (dzisiaj wyjątkowo dostępny bez logowania) do ściągnięcia.

Excel timestamp - plik przykładowy

Marcin

{ 4 comments… read them below or add one }

Julia

Bardzo dziękuję za chęć pomocy, włożony wysiłek i poswięcony czas! Usiłuję to wdrożyć na moich danych, na razie jeszcze bez sukcesu, ale będę walczyć:)

dude

Szukam pomocy jak zrobić taki wykres, w którym jeden słupek obrazowałby zsumowaną zawartość kilku komórek, ale bez wcześniejszego sumowania ich w oddzielnej komórce.

jochen

A jak zrobić gdy poszukiwana para wyrazów występuje kilka razy w przeszukiwanej tabeli. A zamiast S/D wyświetlała się maksymalna data, która znajduje się przy danej parze :)

Erydan

Marcinie,
moje wczorajsze pytanie dotyczące Twojej wiedzy nt. ewentualnych ograniczeń na stosowanie formuł w tabelach Excela 2007 jest już nieaktualne. Znalazłem odpowiedź w książce Excel 2007. Formuły – J. Walkenbach’a. (punkt – Ograniczenia tabel)
- Nie można w tabelach (między innymi) wstawiać automatycznych sum częściowych (Dane/Konspekt/Suma częściowa).
Automatyczne numerowanie wyłącznie widocznych wierszy w tabeli będę musiał wstawiać przy użyciu innej formuły (na razie takiej nie znalazłem).
Pozdrawiam
Krzysztof

Leave a Comment