Wyszukiwanie wartości na innym arkuszu

Użytkowanie arkusza kalkulacyjnego
Dame
Posty: 1
Rejestracja: czw kwie 02, 2015 2:24 pm

Wyszukiwanie wartości na innym arkuszu

Post autor: Dame »

Witam wszystkich.
To mój pierwszy post tutaj i od razu zacznę od pierwszego problemu.
Otóż, mam dokument, w którym w jednym arkuszu umieszczam listę przedmiotów oraz komórki, które pokazują mi ich ceny i tym podobne wartości. W drugim arkuszu natomiast importuję dużą bazę danych z tymi wartościami, jednak pozycje niektórych przedmiotów zmieniają się wraz z każdym zaimportowaniem. I tutaj pojawia się moje pytanie, czy jest możliwość, aby w pierwszym arkuszu z przedmiotami komórka wyszukiwała mi komórkę w drugim arkuszu z bazy danych konkretnego przedmiotu tak, żeby uwzględniało zmianę miejsca danej komórki?

Czyli np:
W pierwszym arkuszu mam listę przedmiotów i jednym z nich jest np. kreda i komórka obok ma zawierać jej cenę, która pochodzi z drugiego arkusza, w którym jest zaimportowana baza danych. Chciałbym, żeby w drugim arkuszu wyszukiwało mi komórkę z kredą i podawało wartość z komórki obok, tj. cenę. I najważniejsze jest, żeby zawsze mi podawało cenę kredy, mimo że po zaimportowaniu zmieniła ona miejsce o kilka komórek wzwyż bądź w dół.

Mam nadzieję, że dobrze wyraziłem swoją myśl. W razie problemów postaram się to jeszcze jaśniej wytłumaczyć. Dzięki z góry za wyrozumiałość i pomoc.

Pozdrawiam!
OpenOffice 4.0.1, Win 7 Pro
zulu144
Posty: 92
Rejestracja: sob gru 12, 2009 3:27 am

Re: Wyszukiwanie wartości na innym arkuszu

Post autor: zulu144 »

Zakładam ze nazwy produktów są niezmienione i jednoznaczne.
Nie szukam "miejsca" ale znajduję aktualna cenę.

Można użyć mnożenia macierzowego a w zasadzie iloczynu skalarnego dwóch wektorów.
Jeden wektor to zbiór cen, drugi wektor to porównanie nazw produktów (czyli zbiór zer i jednej 1)
w kolumnie B w obu arkuszach nazwy produktów
w kolumnie C arkusz2 cena produktu
to wtedy cena produktu w drugim wierszu arkusz1
=SUMA((arkusz2.$C$2:$C$100)*(arkusz2.$B$2:$B$100=B2))
zatwierdzanie przy wciśniętym klawiszu Control i Shift
tak aby po wprowadzeniu formuła była w nawiasach klamrowych
{=SUMA((arkusz2.$C$2:$C$100)*(arkusz2.$B$2:$B$100=B2))}
AOO 4.1.7 na WIN7; LO 6.3.2 portable
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wyszukiwanie wartości na innym arkuszu

Post autor: Jan_J »

Tak,
tylko że iloczyny skalarne działają na parach współrzędnych z tych samych osi. Czyli jeżeli w jednej kolumnie masz ceny jednostkowe, a w innej ilości, to taki iloczyn pięknie wylicza kwotę przy założeniu, że kolejność wpisów w obu kolumnach jest identyczna.

Dame, jak rozumiem, chce “zaimportować” wartość spełniającą pewne kryterium, ale znajdującą się w innej tabeli, której wiersze nie muszą być zsynchronizowane z bieżącą. Jest to często potrzebna operacja, np. przy przenoszeniu danych z katalogu do faktury.
Służą do tego funkcje wyszukujące. Istnieją dwa warianty: pierwszy realizowany przez podaj.pozycję(WARTOŚĆ; KOLUMNA; SPOSÓB) zwraca numer wiersza, w którym KOLUMNA zawiera podaną WARTOŚĆ (albo coś z nią związanego; o czym za chwilę). Taki numer można potem wykorzystać w funkcji indeks(OBSZAR; NRWIERSZ; NRKOL) albo przesunięcie(OBSZAR; NRWIERSZ, NRKOL; 1; 1), żeby pobrać wpis z NRWIERSZ-tego wiersza OBSZARu, z jego NRKOL-tej kolumny.
Tym sposobem jesteśmy w stanie pobrać np. daną z kolumny C arkusza 3, z tego wiersza, w którym w kolumnie A w arkuszu 1 występuje słowo "kwiatek":

Kod: Zaznacz cały

=indeks(Arkusz3.C1:C1000; podaj.pozycję("kwiatek"; Arkusz1.A1:A1000; 0); 1)
Druga grupa funkcji wyszukujących obejmuje WYSZUKAJ() i WYSZUKAJ.PIONOWO(WARTOŚĆ; OBSZAR; NRKOL; SPOSÓB). Nie zwracają one numerów, tylko wartości z NRKOL-tej kolumny bloku, przy czym kolumna, w której prowadzi się przeszukiwanie musi być pierwsza, licząc od lewej strony. Wobec tego, jeżeli kwiatek siedzi w kolumnie A, a my chcemy pobrać wartość z kolumny C tego samego wiersza, napiszemy

Kod: Zaznacz cały

=WYSZUKAJ.PIONOWO("kwiatek"; A1:C1000; 3; 0)
Ostatni parametr (zwany u mnie SPOSÓB) wpływa na algorytm poszukiwania, a także na jego skuteczność i na uzyskany wynik.
SPOSÓB równy 0 oznacza, że przeszukujemy kolumnę od początku do pierwszego trafienia. Jeżeli się nie uda, dostaniemy błąd "Nie dotyczy". Wynika stąd, że jeżeli w kolumnie jest więcej niż jedno wystąpienie danej wartości, dostaniemy to pierwsze.
SPOSÓB równy 1 oznacza, że możemy traktować KOLUMNĘ jako uporządkowaną niemalejąco. Dostaniemy wtedy albo KTÓREŚ wystąpienie wartości (bez gwarancji, że będzie ono pierwsze z kolei), albo MIEJSCE, w którym nasza wartość by była, GDYBY występowała w kolumnie -- oba te przypadki nie generują błędu. Błąd otrzymamy, kiedy wartość przypada wg uporządkowania PRZED pierwszym wpisem w przeszukiwanej kolumnie.
Przy tym metoda “z jedynką” jest o wiele szybsza od metody “z zerem”. Jednak jeżeli kolumna nie jest odpowiednio uporządkowana, wynik jest najzwyklejszym, nie mającym znaczenia śmieciem.
Istnieje jeszcze SPOSÓB wart -1, zakłada się wtedy uporządkowanie nierosnące, tj. od wartości największej do najmniejszej.

Podsumowując: jeżeli nie wiemy, czy wartość jest obecna w kolumnie -- piszmy 0. Jeżeli wiemy, że jest obecna 1 raz, a kolumna jest uporządkowana -- piszmy 1. Pozostałe przypadki wymagają szczegółowej analizy, co tak naprawdę chcemy dostać w odpowiedzi.

Warto też pamiętać, że na fakt dopasowania wpływają także opcje arkusza [x] Używaj wyrażeń regularnych w formułach oraz [x] Kryteria wyszukiwania odnoszą się do całych komórek. Zależnie od ich zaptaszkowania, "kwiat" albo "kwiat.*" mogą zostać (albo nie zostać) dopasowane do "kwiat", "kwiatek", "kwiatuszek", "kwiat.*" itp.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
zulu144
Posty: 92
Rejestracja: sob gru 12, 2009 3:27 am

Re: Wyszukiwanie wartości na innym arkuszu

Post autor: zulu144 »

Mam pytanie jak w przykładzie podanym w załączniku wykorzystać to co napisał Jan.
Jak nie znajduje to musi być "zero" dla sumowania i znajdowania minimum.
pozdrawiam.
Załączniki
koncowa_po_finale.ods
(54.17 KiB) Pobrany 345 razy
AOO 4.1.7 na WIN7; LO 6.3.2 portable
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Wyszukiwanie wartości na innym arkuszu

Post autor: Jan_J »

W indywidualna.C2 wstaw

Kod: Zaznacz cały

=jeżeli.czy.błąd(=WYSZUKAJ.PIONOWO(B2; gp1.$B$2:$D$100; 3; 0);0;=WYSZUKAJ.PIONOWO(B2; gp1.$B$2:$D$100; 3; 0))
itd.

PS. Twoja metoda sumuje po całej kolumnie i zawsze zwraca liczbę -- czyli 0 w przypadku nieznalezienia.
Moja metoda zwraca pierwsze (albo którekolwiek) wystąpienie, bez względu na typ danej -- albo błąd, jeśli dopasowania nie ma.
W przypadku tabeli rozgrywek użyłbym wariantu Twojej metody, z funkcją suma.jeżeli() zamiast iloczynu skalarnego.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ