Szukam prostego rozwiązania

Użytkowanie arkusza kalkulacyjnego
kseiko
Posty: 3
Rejestracja: pt cze 08, 2012 12:10 pm

Szukam prostego rozwiązania

Post autor: kseiko »

Hey

Mam pewnie dość prosty problem nad którym się głowie cały czas, a mianowicie:

Posiadam plik CSV z różnymi danymi (alfa-numeryczne) przedstawione w tablicy. Z tego pliku importuję po przez zewnętrzne odwołanie bezpośrednio do danej komórki z tablicy do Calca 2 kolumny - do 6 000 wierszy.
(wczytywanie danych do calc następuje po przez aktualizacje łącza).

Jak już wspomniałem w Calcu są 2 kolumny do 6 000 wierszy, w pierwszej kolumnie wczytywana jest nazwa jakiegoś produktu (z pliku zewnętrznego csv), a w drugim wczytywany jest kod produktu (również z zewnętrznego pliku csv).

Następnie inne 2 kolumny - zawierają takie same dane pod względem typu, jednak ich wartość jest zróżnicowana (stan magazynowy z każdego dnia), również są one importowane po przez łącza z zewnętrznego pliku csv.

Chciałbym utworzyć w 5 kolumnie Calca porównanie ze sobą poszczególnych wartości ale uwaga - nie chodzi tu o porównanie stałe np. =JEŻELI(a5=b5;"";b5); tylko w całym zakresie od a1 do a6000 i porównanie z b1 do b6000.
Jeśli wartości są takie same to ma pozostać puste pole, jeśli inne to ma wyświetlić wartość komumny b.

Problem w tym że zawartość pierwszego pliku csv jest dynamiczna i nie równa pod względem wierszy z drugim plikiem csv. Przez co sortowanie wg danej kolumny w obydwóch plikach csv nie rozwiązuje problemu. :?

Prosiłbym o dokładne i najlepsze rozwiązanie tego problemu bo już mi się skończyły pomysły :(
KKP-GEZLER
OpenOffice 3.3.0
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Szukam prostego rozwiązania

Post autor: Jan_J »

Dla każdej wartości z pewnej kolumny trzeba by sprawdzić, czy jest ona wpisana w innej kolumnie.
Radziłbym użyć funkcji wyszukaj albo wyszuka.pionowo, w ostateczności pary funkcji podaj.pozycję i indeks.

Patrz też http://user.services.openoffice.org/pl/ ... 9+wyszukaj

W bazach danych odpowiednią operacją jest join, i robi to sprawniej.

Dopóki pozostajemy na pewnym poziomie doraźności, wykorzystanie arkusza może się wydawać wygodne. Jednak na dłuższą metę warto zainteresować się bazami danych, zwłaszcza jeżeli projekt ma się rozrastać.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
kseiko
Posty: 3
Rejestracja: pt cze 08, 2012 12:10 pm

Re: Szukam prostego rozwiązania

Post autor: kseiko »

Kurcze właśnie wiem - czyli krótko mówiąc potwierdziłeś to co cały czas wiedziałem - trzeba uczyć się PHP i SQL :P
No jak na razie mam problem z samymi csvkami na szczęście, dla tego szukam rozwiązania w miarę opcjonalnego co do problemu.

Szukaj pionowo jedynie wyszukuje i spełnia warunek, wiem że tego próbowałem kiedyś i nie dało rady - już nie pamiętam czemu...

Podobnie jak w tym temacie:
http://user.services.openoffice.org/pl/ ... ?f=9&t=224

A możesz jakiś przykład polecenia zrobić - jak by to mniej więcej powinno wyglądać?
KKP-GEZLER
OpenOffice 3.3.0
Jan_J
Posty: 4653
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Szukam prostego rozwiązania

Post autor: Jan_J »

Jeżeli w A1:A10000 są nazwy i w B1:B10000 są nazwy, a w C chcę spytać, czy bieżąca nazwa z B występuje gdzieś w A, to

Kod: Zaznacz cały

=czy.liczba(Podaj.pozycję(B1;A$1:A$10000;0)
Wariant z powtórzeniem wartości z B do C

Kod: Zaznacz cały

=Wyszukaj.pionowo(B1;A$1:A$10000;1;0)
przy czym niedopasowane wpisy będą generować błąd N/A. Usunięcie tego błędu wymaga dwuetapowego postępowania

Kod: Zaznacz cały

w D1: =Wyszukaj.pionowo(B1;A$1:A$10000;1;0)
w C1: =jeżeli(czy.liczba(D1);indeks(A$1:A$10000;D1;1);"")
o ile chcemy uniknąć powtórnego wyszukiwania: jednego w warunku, drugiego w dostępie do danych.

Oczywiście, każdy wariant wymaga powtórzenia (przeciągnij albo wklej) jednej albo dwóch formuł wzdłuż całej kolumny B.
Jeżeli chcesz tego uniknąć, stosuj składnię wektorową:

Kod: Zaznacz cały

=WYSZUKAJ.PIONOWO(B1:B10000;A$1:A$10000;1;0)
z zatwierdzeniem przez Ctrl+Shift+Enter.
JJ
LO (26.2) ∙ Python (3.13|3.10) ∙ Unicode 17 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
MQs
Posty: 10
Rejestracja: ndz lip 19, 2009 9:58 pm

Re: Szukam prostego rozwiązania

Post autor: MQs »

Nie wiem czy dobrze zrozumiałem, ale z działania powyższego przykładu wnioskuję, że da się to zrobić przez policzenie ilości wystąpień (i sprawdzenie czy jest więcej od 0):

Kod: Zaznacz cały

=JEŻELI(LICZ.JEŻELI(A$1:A$1000;B1)>0;B1;"")
kseiko
Posty: 3
Rejestracja: pt cze 08, 2012 12:10 pm

Re: Szukam prostego rozwiązania

Post autor: kseiko »

No właśnie podobnie też myślałem ale u mnie zabrakło opcji porównywania z "licz.jeżeli"
Dziś będę miał więcej czasu to się za to zabiorę bo nie daje mi to spać po nocach, jak na razie stokrotne THX dla was za pomoc - napiszę czy udało się w ten sposób co proponujecie czy też nie.
KKP-GEZLER
OpenOffice 3.3.0
MQs
Posty: 10
Rejestracja: ndz lip 19, 2009 9:58 pm

Re: Szukam prostego rozwiązania

Post autor: MQs »

Zdaje mi się, że mój sposób nie zadziała, bo chcesz zrobić coś więcej niż porównanie dwóch kolumn. Funkcja WYSZUKAJ.PIONOWO będzie użyteczna jeżeli problem wygląda np. tak: znajdź dany w określonej komórce (sąsiedniej) kod towaru w kolumnie z nieuporządkowanymi kodami i pobierz do porównania odpowiadający mu stan magazynowy z innej kolumny tego wiersza. Wtedy dopiero działasz na tym, co wyciągnąłeś i porównujesz/liczysz różnicę... względem stanu poprzedniego itp.

Najlepiej wrzuć jakieś przykładowe dane (z ręcznie wpisanym oczekiwanym wynikiem) jako załącznik, bo na razie widzę te kolumny tak: NAZWA:KOD:ILOŚĆ1:ILOŚĆ2:WYNIK(???) - każda z innymi danymi, więc nie wiem co chcesz ze sobą porównać (jak je sparować).
martaposty1
Posty: 12
Rejestracja: wt lip 02, 2013 2:20 pm

Re: Szukam prostego rozwiązania

Post autor: martaposty1 »

Spróbuj wykorzystać funkcję wyszukaj albo wyszukaj.pionowo, a w ostateczności pary funkcji podaj.pozycję i indeks.

może zadziała.
Spójrz praw­dzie w oczy i po­wiedz, że to kłamstwo...
ODPOWIEDZ