[SOLVED] Część wspólna
[SOLVED] Część wspólna
Witam
Próbuję w programie Calc znaleźć sposób na sprawdzenie czy w danym zbiorze elementy się powtarzają. Część z nich traktowanych jest jako tekst, a część jako liczby.
Zależy mi na tym, aby sprawdzić czy dane z komórek nie powtarzają się w innych.
Proszę o pomoc
Próbuję w programie Calc znaleźć sposób na sprawdzenie czy w danym zbiorze elementy się powtarzają. Część z nich traktowanych jest jako tekst, a część jako liczby.
Zależy mi na tym, aby sprawdzić czy dane z komórek nie powtarzają się w innych.
Proszę o pomoc
Open Office 3.1.1 (Win XP)
Re: Część wspólna
* jedna wartość, podaje numer albo błąd: podaj.pozycję(wartość; zakres; 0);
* jedna wartość, zwraca tak/nie: nie(czy.błąd(podaj.pozycję(wartość, zakres; 0))) -- można zapytać wzdłuż jednego siągu o przynależność do drugiego ciągu;
* wiele wartości, ciąg tak/nie: nie(czy.błąd(podaj.pozycję(wartości, zakres; 0))) zatwierdzane Ctrl+Shift+Enter -- w zasadzie to samo, tyle że jednym ruchem;
* zawartość części wspólnej obu spisów: filtr na podstawie wartości True z tej ostatniej formuły. Nie da się tego łatwo zrobić jedną formułą, chociaż można zestawem formuł.
Wydajność tych operacji nie powala: są to wielokrotne przeszukiwania liniowe.
Jeżeli danych jest dużo, radzę wessać je do bazy danych (niekoniecznie do Base), i spytać o coś w rodzaju SELECT * FROM dane1 INTERSECT SELECT * FROM dane2;
albo SELECT jakieś pola 1 FROM dane WHERE warunek1 INTERSECT SELECT jakieś pola 2 FROM dane WHERE warunek2;
Jak widać jest dużo prościej -- tylko że Base zdaje się ma alergię na operacje UNION, INTERSECT i EXCEPT.
* jedna wartość, zwraca tak/nie: nie(czy.błąd(podaj.pozycję(wartość, zakres; 0))) -- można zapytać wzdłuż jednego siągu o przynależność do drugiego ciągu;
* wiele wartości, ciąg tak/nie: nie(czy.błąd(podaj.pozycję(wartości, zakres; 0))) zatwierdzane Ctrl+Shift+Enter -- w zasadzie to samo, tyle że jednym ruchem;
* zawartość części wspólnej obu spisów: filtr na podstawie wartości True z tej ostatniej formuły. Nie da się tego łatwo zrobić jedną formułą, chociaż można zestawem formuł.
Wydajność tych operacji nie powala: są to wielokrotne przeszukiwania liniowe.
Jeżeli danych jest dużo, radzę wessać je do bazy danych (niekoniecznie do Base), i spytać o coś w rodzaju SELECT * FROM dane1 INTERSECT SELECT * FROM dane2;
albo SELECT jakieś pola 1 FROM dane WHERE warunek1 INTERSECT SELECT jakieś pola 2 FROM dane WHERE warunek2;
Jak widać jest dużo prościej -- tylko że Base zdaje się ma alergię na operacje UNION, INTERSECT i EXCEPT.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Część wspólna
dzięki za szybką odpowiedź.
Zdaje się, że jednak niebardzo ogarniam
Może na przykładzie będzie łatwiej. Załóżmy, że w kolumnie B1;B10 mam wartości. Chciałbym aby w komórce c1 (o ile to możliwe, by to była jedna komórka) zwróciło wartości z obszaru B1;b10, które się powtarzają (dwa lub więcej razy). Rozwijając przykład chciałbym aby z przykładowego zbioru <1;3;4;1;2;6;7;3;1;5> w komórce C1 pojawiły się cyfry 1 oraz 3.
W moim przypadku jest w tej chwili 400 pozycji (a będzie więcej) liczb dziewięciocyfrowych i bardzo mi zależy żeby się pozbyć powtórzeń.
Zdaje się, że jednak niebardzo ogarniam
Może na przykładzie będzie łatwiej. Załóżmy, że w kolumnie B1;B10 mam wartości. Chciałbym aby w komórce c1 (o ile to możliwe, by to była jedna komórka) zwróciło wartości z obszaru B1;b10, które się powtarzają (dwa lub więcej razy). Rozwijając przykład chciałbym aby z przykładowego zbioru <1;3;4;1;2;6;7;3;1;5> w komórce C1 pojawiły się cyfry 1 oraz 3.
W moim przypadku jest w tej chwili 400 pozycji (a będzie więcej) liczb dziewięciocyfrowych i bardzo mi zależy żeby się pozbyć powtórzeń.
Open Office 3.1.1 (Win XP)
Re: Część wspólna
W jednej komórce nie opłaca Ci się mieć wielu wartości. O wiele lepiej jest mieć ich spis w kolumnie.
Sprawdź załącznik. Zrobiłem tam to, o czym napisałem wyżej.
Hej, ale w poście piszesz o unikaniu powtórzeń, a w tytule o części wspólnej. To są inne zadania! Ja pisałem o wyznaczaniu części wspólnej 2 spisów, sugerując się tytułem. Zmień temat pierwszego postu, dla potomności.
W bazie danych: banalne SELECT DISTINCT * FROM spis;
W arkuszu: sprawdź http://forum.openoffice.org/pl/forum/se ... aj%C4%85ce -- jak nie wystarczy, napisz, pokombinujemy.
Sprawdź załącznik. Zrobiłem tam to, o czym napisałem wyżej.
Hej, ale w poście piszesz o unikaniu powtórzeń, a w tytule o części wspólnej. To są inne zadania! Ja pisałem o wyznaczaniu części wspólnej 2 spisów, sugerując się tytułem. Zmień temat pierwszego postu, dla potomności.
W bazie danych: banalne SELECT DISTINCT * FROM spis;
W arkuszu: sprawdź http://forum.openoffice.org/pl/forum/se ... aj%C4%85ce -- jak nie wystarczy, napisz, pokombinujemy.
- Załączniki
-
- intersect.ods
- (11.05 KiB) Pobrany 265 razy
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Część wspólna
nie całkiem o tym myślałem. odnosząc się do Twojego przykładu, zależałoby mi raczej na sprawdzeniu, czy aby w pierwszej kolumnie nie ma np "ala" dwa razy (lub więcej), niż na porównaniu dwóch kolumn.
Przykład w załączniku
Przykład w załączniku
- Załączniki
-
- przykład.ods
- (13.27 KiB) Pobrany 239 razy
Open Office 3.1.1 (Win XP)
Re: Część wspólna
Najprościej to będzie zaznaczyć cały zakres komórek, wybrać z menu Format → Formatowanie warunkowe → Formatowanie warunkowe, w nowym oknie Dodaj i na listach rozwijanych ustawić Wartość komórki jest, duplikat. Potem wybrać jakiś styl z listy. Po kliknięciu OK wszystkie komórki mające takie same wartości zostaną oznaczone danym stylem.
Przy czym w LibreOffice 3.5 oraz wcześniejszych, a także w OpenOffice.org/Apache OpenOffice, to okienko wygląda inaczej niż opisałem. Zasada działania jest jednak identyczna.
Gorzej, jeżeli chcesz zaznaczyć duplikaty wartości w danym miejscu kolumny (czyli dopiero drugie i kolejne wystąpienia mają być zaznaczone). W takim wypadku musisz już skorzystać z formuły. Np. taka wklejona w komórce B2 i kolejnych da pożądane efekty:
Wyszukuje ona wartość sąsiedniej komórki w zbiorze danych od pierwszego wiersza do wiersza tuż nad komórką.
Przy czym w LibreOffice 3.5 oraz wcześniejszych, a także w OpenOffice.org/Apache OpenOffice, to okienko wygląda inaczej niż opisałem. Zasada działania jest jednak identyczna.
Gorzej, jeżeli chcesz zaznaczyć duplikaty wartości w danym miejscu kolumny (czyli dopiero drugie i kolejne wystąpienia mają być zaznaczone). W takim wypadku musisz już skorzystać z formuły. Np. taka wklejona w komórce B2 i kolejnych da pożądane efekty:
Kod: Zaznacz cały
=JEŻELI(WYSZUKAJ.PIONOWO(A2;$A$1:A1;1;0);"Powtarza się";"")
Mój blog o używaniu LibreOffice
LibreOffice 4.2.6, Debian testing amd64
LibreOffice 4.2.6, Debian testing amd64
Re: Część wspólna
Hej
Dzięki za odpowiedzi. Nie rozwiązałem jeszcze problemu. M.in. dlatego, że w mojej wersji OO w Formatowaniu warunkowym nie ma opcji "duplikat" - w załączniku zrzut z ekranu. Próbowałem to zrobić w ustawieniach "równy", ale bez efektu.
Czy ja dobrze rozumiem, że w miejscu na adres komórek należy podać zakres, który chciałbym sprawdzić na powtarzanie się w nim pewnym danych?
Dzięki za odpowiedzi. Nie rozwiązałem jeszcze problemu. M.in. dlatego, że w mojej wersji OO w Formatowaniu warunkowym nie ma opcji "duplikat" - w załączniku zrzut z ekranu. Próbowałem to zrobić w ustawieniach "równy", ale bez efektu.
Czy ja dobrze rozumiem, że w miejscu na adres komórek należy podać zakres, który chciałbym sprawdzić na powtarzanie się w nim pewnym danych?
Open Office 3.1.1 (Win XP)
Re: Część wspólna
uff.. Udało się
Pokombinowałem trochę z tą formułą i dopasowałem do mojego pliku i ładnie zaznacza powtórzenia.
Dzięki wielkie za pomoc
Pokombinowałem trochę z tą formułą i dopasowałem do mojego pliku i ładnie zaznacza powtórzenia.
Dzięki wielkie za pomoc
Open Office 3.1.1 (Win XP)
Re: Część wspólna
U mnie w LO 3.5.5 jest tam pozycja „wartości zdublowane” (jak widać, w 3.6 zmieniło się tłumaczenie). Może dodali to dopiero w LibreOffice? Albo w OOo 3.2 lub 3.3? Trudno mi ocenić. Byłem przekonany, że opcja ta jest już od dłuższego czasu, ale widać się myliłem.JKrzysio pisze:Dzięki za odpowiedzi. Nie rozwiązałem jeszcze problemu. M.in. dlatego, że w mojej wersji OO w Formatowaniu warunkowym nie ma opcji "duplikat" - w załączniku zrzut z ekranu. Próbowałem to zrobić w ustawieniach "równy", ale bez efektu.
Na taki problem mogę co najwyżej doradzić aktualizację pakietu — 3.1 to dość archaiczna wersja.
Mój blog o używaniu LibreOffice
LibreOffice 4.2.6, Debian testing amd64
LibreOffice 4.2.6, Debian testing amd64
Re: [SOLVED] Część wspólna
Witam ponownie.
Ostatnim razem wskazówki okazały się bardzo przydatne. Dzięki jeszcze raz.
Mam jeszcze jeden problem. Nieco innej natury. Jak wcześniej wspominałem, tych danych jest sporo (mam około tysiąca). Kolejną partię chciałbym wpisywać w Arkusz2, dla odznaczenia źródła.
Czy da się zrobić, aby np w komórce B1 arkuszu2 był cały "pion" B1:b1000. Tak żebym po wpisywaniu danych w komórkę b2 i niższe sprawdzał czy powtarzają się z danymi z komórki b1 (czyli całym arkuszem1) i między sobą (jak wcześniej)
Ostatnim razem wskazówki okazały się bardzo przydatne. Dzięki jeszcze raz.
Mam jeszcze jeden problem. Nieco innej natury. Jak wcześniej wspominałem, tych danych jest sporo (mam około tysiąca). Kolejną partię chciałbym wpisywać w Arkusz2, dla odznaczenia źródła.
Czy da się zrobić, aby np w komórce B1 arkuszu2 był cały "pion" B1:b1000. Tak żebym po wpisywaniu danych w komórkę b2 i niższe sprawdzał czy powtarzają się z danymi z komórki b1 (czyli całym arkuszem1) i między sobą (jak wcześniej)
Open Office 3.1.1 (Win XP)
Re: [SOLVED] Część wspólna
A po co dublować dane? przecież w arkuszu 2 możesz się odwołać do kolumny danych z arkusza 1. Czy to w formułach, czy to w formatowaniu warunkowym.
Upychanie wielu danych w jednej komórce, nawet jeżeli czasami możliwe technicznie, zawsze prowadzi do kłopotów przy próbie ich wyłuskania.
Upychanie wielu danych w jednej komórce, nawet jeżeli czasami możliwe technicznie, zawsze prowadzi do kłopotów przy próbie ich wyłuskania.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: [SOLVED] Część wspólna
Próbowałem zrobić odwołanie w komórce b1 arkuszu 2 (=Arkusz1.B1:B991) a w komórkach poniżej (b2,b3,b4..) wpisywać dalsze wartości. w komórce c2 arkuszu 2 wpisuje poprzednią formułę, która tak dobrze spisywała się poprzednio - (=JEŻELI(WYSZUKAJ.PIONOWO(B2;$B$1:B1;1;0);"Powtarza się";"")
o ile dane wpisane "ręcznie" podlegaja tej formule między sobą, to komórka b1 (w arkuszu 2) nie jest brana pod uwagę. specjalnie wpisałem wartość, która była w przedziale b1:b991 arkusza1, aby to sprawdzić.
o ile dane wpisane "ręcznie" podlegaja tej formule między sobą, to komórka b1 (w arkuszu 2) nie jest brana pod uwagę. specjalnie wpisałem wartość, która była w przedziale b1:b991 arkusza1, aby to sprawdzić.
Open Office 3.1.1 (Win XP)