Wyszukiwanie liczby w zależności od liczby wcześniejszej.

Użytkowanie arkusza kalkulacyjnego
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Wyszukiwanie liczby w zależności od liczby wcześniejszej.

Post autor: JedenGość »

Witam ponownie.

Z jednej strony jestem na siebie zły, ze znowu czegoś nie ogarniam... :oops:

Z drugiej strony fajnie jest tu zaglądać i czerpać wiedzę z od mistrzów tematu.

W załączniku przesyłam plik z dokładną specyfikacją, z czym mam problem.

Liczby czerwone to liczby ujemne. Tak kiedyś zasugerował Jermor w jednej z poprzednich solucji, a ja już tak to zostawiłem.

Z góry dzięki, Panowie.
Załączniki
JedenGosc_20211127.ods
(23.75 KiB) Pobrany 83 razy
Ostatnio zmieniony ndz sty 09, 2022 7:40 pm przez JedenGość, łącznie zmieniany 3 razy.
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Jest już dość późno, masz na razie takie moje rozwiązanka, myślę, że zrobiłem punkt 5 i 6; w kolumnie X pokazałem jak znaleźć ostatnią liczbę więc myślę, że punkty 9 i 10 zdołasz sam opanować.
A kolumnach AA- AC (po skopiowaniu to nawet do AG ) są formuły macierzowe... A i wypadałoby jeszcze zastosować na nich funkcję JEŻELI.BŁĄD()
Pozdrawiam
Ostatnio zmieniony ndz lis 28, 2021 8:42 pm przez Rafkus, łącznie zmieniany 1 raz.
Powód: Usunięcie pliku, poniżej nowa wersja
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Rafkus, dzięki za podjecie tematu.

1. Nie znałem funkcji ZNAJDŹ i ZŁĄCZ.TEKST. Muszę się z nimi zapoznać.
2. W wielu polach pojawia się #ARG!, mimo że są to te same formuły co wiersz wyżej, skopiowane i wklejone jako macierzowe.
... (???)
3. Zauważyłem błąd merytoryczny. Przykładowo wiersz 4. Po pierwsze mają być liczby < -6, a Ty podałeś -6. jak zmieniłem na < -6 i zastosowałem ctrl+shift+enter, pojawia się #ARG!.
Jeżeli jednak przyjmiemy, że nie chodziło mi o mniejsze niż tylko równe -6 to tak czy inaczej jest błąd merytoryczny. Następna liczba wynosi 1, więc kolumna Z wynosi 0, ale kolumna AA powinna wynieść 1, ponieważ ma pokazać tylko jaka jest liczba następująca po poprzedniej dodatniej. Opisałem to w komentarzach.
4. Ad. 6 < -6.
5. Nie rozumiem stosowania tych nazw "ab", czy "gdzie61". Gdzie mogę to zamienić na standardowo pisane formuły?
6. Być może faktycznie Ad. 9 i 10 dam rade stworzyć sam... :roll: Nie dam raczej rady jeśli te wcześniejsze punkty nie będą na 100%.

Porozkminiam te funkcje znajdź i złącz.tekst, tylko zastanawiam sie, czy to co opisałem w pkt. 3 powyżej będę mógł uzyskać dzięki nim, czy też jakieś inne wejdą w drogę.

Jeszcze raz dzięki i, jeśli to możliwe, proszę o dalszą pomoc w rozwiązaniu problemu.
Pozdrawiam.
Załączniki
JedenGosc_20211127_2.ods
(29.15 KiB) Pobrany 83 razy
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Ad 2. dlatego napisałem wcześniej:
Rafkus pisze:A i wypadałoby jeszcze zastosować na nich funkcję JEŻELI.BŁĄD()
Błąd powstaje wtedy, gdy w danym zakresie nie znalazło dokładnie tej pary liczb: -6 w jednej komórce i zaraz w następnej 1. A skoro tu już powstał błąd do przenosi się on do zewnętrznych formuł: funkcja PRZESUNIĘCIE nie potrafi określić zakresu danych dla funkcji LICZ.JEŻELI
ad 3. w dokumencie pisałeś :
W kolumnie AA powinno być: ile razy po -6 i dalej następującej dodatniej 1 wystąpiła liczba -1
a według komentarzy interesuje cię tylko pierwsza liczba (chyba że chodzi o to, że musi znowu być pojawić się zestaw liczb -6,1, i -1?)
ad 5. "ab" to poszukiwany tekst. Po prostu zamieniłem wszystkie cyfry na literę: -6 = a, 1 = b, wszystkie inne to c i połączyłem je wszystkie w jeden tekst, w którym szukałem właśnie podanego wystąpienia. Jego położenie odpowiadało w której komórce znajduje się liczba -6 i zaraz po niej 1.
gdzie61 to nazwa zakresu zwracająca właśnie numer komórki z wartością -6 i 1 zaraz po niej, w danym wierszu. W ten sposób nieco sobie uprościłem formułę (wydaje mi się, że to właśnie ty pisałeś że nie lubisz nazywanych zakresów). Oryginalna formuła znajduje się w kolumnie AA. Tak coś czułem, że źle coś zrozumiałem i dlatego też jest ona niedopracowana... a teraz wychodzi że może być błędna.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Rafkus pisze:Ad 2. dlatego napisałem wcześniej:
Rafkus pisze:A i wypadałoby jeszcze zastosować na nich funkcję JEŻELI.BŁĄD()
Błąd powstaje wtedy, gdy w danym zakresie nie znalazło dokładnie tej pary liczb: -6 w jednej komórce i zaraz w następnej 1. A skoro tu już powstał błąd do przenosi się on do zewnętrznych formuł: funkcja PRZESUNIĘCIE nie potrafi określić zakresu danych dla funkcji LICZ.JEŻELI
ad 3. w dokumencie pisałeś :
OK. To rozumiem.
Rafkus pisze:
W kolumnie AA powinno być: ile razy po -6 i dalej następującej dodatniej 1 wystąpiła liczba -1
a według komentarzy interesuje cię tylko pierwsza liczba (chyba że chodzi o to, że musi znowu być pojawić się zestaw liczb -6,1, i -1?)
ad 5. "ab" to poszukiwany tekst. Po prostu zamieniłem wszystkie cyfry na literę: -6 = a, 1 = b, wszystkie inne to c i połączyłem je wszystkie w jeden tekst, w którym szukałem właśnie podanego wystąpienia. Jego położenie odpowiadało w której komórce znajduje się liczba -6 i zaraz po niej 1.
gdzie61 to nazwa zakresu zwracająca właśnie numer komórki z wartością -6 i 1 zaraz po niej, w danym wierszu. W ten sposób nieco sobie uprościłem formułę (wydaje mi się, że to właśnie ty pisałeś że nie lubisz nazywanych zakresów). Oryginalna formuła znajduje się w kolumnie AA. Tak coś czułem, że źle coś zrozumiałem i dlatego też jest ona niedopracowana... a teraz wychodzi że może być błędna.
Chodziło mi o dokładnie pierwszą liczbę ujemną po < -6, lub pierwszą dodatnią >1 po < -6.

W załączniku przesyłam jeszcze raz pierwotny plik. Poglądowo kolorami zaznaczyłem, o które liczby się rozchodzi.
Załączniki
JedenGosc_20211127_3.ods
(18.77 KiB) Pobrany 76 razy
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Możesz sprawdzić, ja jednak nie potrafię zrozumieć punktu 9...
Ostatnio zmieniony pn lis 29, 2021 10:54 pm przez Rafkus, łącznie zmieniany 1 raz.
Powód: Usunięcie pliku, poniżej nowa wersja
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Genialne!!!... z pominięciem pkt. 9.

Od 5 do 8 jest ok. Nie rozumiem tylko co to jest "222". W kolumnie AA też jest to samo. W sumie to mnożenie przez 2, "łącznik" &... nie ogarniam tego... a chciałbym zrozumieć.

Jeśli chodzi o pkt. 9 to podsyłam jeszcze raz plik z dokładnie (tak mi się wydaje) opisanym tym o co mi się rozchodzi.

Jeszcze raz dzięki!
Załączniki
JedenGosc_20211127_5.ods
(29.07 KiB) Pobrany 81 razy
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Formułę w kolumnie AG3 poprawiłem:

Kod: Zaznacz cały

=LICZ.JEŻELI(($A3:$W3<-6)*2 & ($B3:$X3=1)*2 & ($C3:$Y3<AF$2)*2;"222") +(INDEKS($A3:$W3;1;ILE.LICZB($A3:$W3))<-6)
jest to formuła macierzowa więc należy zatwierdzić poprzez CTRL+SHIFT+ENTER.
Wzór do kolumny AH, pomyślę nad nim - sądzę że już wiem o co w nim chodzi, mam już pewną koncepcję.

Weźmy na warsztat wzór z kolumny Z.

Kod: Zaznacz cały

=LICZ.JEŻELI((A3:W3<-6)*2 & (B3:X3>1)*2;"22")
Napisałeś:
W kolumnie Z powinno być: ile razy po < -6 wystąpiła liczba >1.
Okazało się, że w pewnym zestawie danych zawierającym zawierającym naprzemiennie liczby dodatnie i ujemne, poszukujesz dwóch sąsiadujących ze sobą specyficznych liczb. Pierwsza cyfra musi być mniejsza niż -6, a druga musi być większa od 1. Aby znaleźć taką odpowiednią liczbę połączyłem odpowiednio przesuwając zakresy (dla przykładu skrócę je): (A3:C3) & (B3:D3) . Znak & oznacza że de dwie liczby mają zostać połączone w jedno (alternatywa dla funkcji ZŁĄCZTEKST).

Kod: Zaznacz cały

DANE:	-6	1	-9	1 
po połączeniu (A3:C3) & (B3:D3):	-61	1-9	-91	10
i chciałeś poznać ile w tak powstałym zakresie jest liczb jest mniejszych niż -61, ALE druga cyfra (albo i ostatnia jeżeli pierwsza wyniosłaby np: -11) miała być większa niż 1 dlatego liczba -91 jest błędna. Zatem trzeba zrobić to nieco inaczej.
Przypominam warunki: pierwsza liczba z zakresu musi być: (A3:C3<-6) i druga liczba z zakresu musi być (B3:D3>1). Wynikiem wyrażeń z nawiasów może być prawda lub fałsz albo 1 i 0. Aby wynik był bardziej przewidywalny i krótki oba nawiasy przemnożyłem przez liczbę 2. W ten sposób otrzymam (a przynajmniej mam taką nadzieję) zawsze 0 lub 2.

Kod: Zaznacz cały

DANE:	-6	1	-9	1 
po połączeniu (A3:C3<-6)*2 & (B3:D3>1)*2:	00	00	20	00
, no cóż nieco za bardzo skróciłem te zakresy, ale możesz mi wierzyć dla liczb -7 i 2 otrzymałbyś wynik 22. No i z tak utworzonego zbioru danych interesuje cię ile razy wystąpiła liczba - a raczej tekst "22".
Podobnie ma się sprawa z formułami w kolumnach AA - AG, tylko tam muszą być sprawdzone 3 kolejne liczby - stąd tekst "222"
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Rafkus, jesteś P-R-Z-E-G-O-Ś-Ć!

To jest genialne. Poza tym tak to wytłumaczyłeś, że zrozumiałem, o co c'mon. Wedle tego co wykombinowałeś Ty, zacząłem kombinować i ja, co z kolumną AH. Jednak za mały jestem na to...

Edit. Nie wiem tylko, co daje mnożenie przez 2. Jak W kolumnie AA skasowałem mnożenie przez 2 i zamieniłem "222" na "111" wynik wyszedł taki sam... :?:
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Wpisz do jakiś komórek następujące równania:

Kod: Zaznacz cały

=3=5
=(3=5)*3
i zobacz co otrzymasz w wyniku. Ja nie sprawdziłem, tylko od razu założyłem, że w wyniku połączenia np. takiego wyrażenia: (-9<-6) & (2=1) otrzymany wynik może wyglądać tak: PRAWDAFAŁSZ...
Wiedziałem, że mnożąc te nierówności przez 2(lub jakąś inną liczbę), otrzymam w wyniku jakeś kombinacje cyfr 0 i 2.

PS. Nad ostatnią ostatnią formułą pomyślę jak znajdę czas, dopiero co wróciłem do domu, zaraz będzie obiad, potem odebrać dziecko z przedszkola - po prostu ŻYCIE...
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Faktycznie. Rozumiem. Aby uniknąć gdzieś wykrzaczenia się, lepiej przemnożyć.

Z tą kolumną AH to spokojnie. Nie pali się.

Pozdrawiam.
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Ostatnia formuła dla komórki AH3, narazie dość toporna:

Kod: Zaznacz cały

=LUB(I(INDEKS($A3:$W3;1;ILE.LICZB($A3:$W3)-1)=1;  INDEKS($A3:$W3;1;ILE.LICZB($A3:$W3)-2)<-6); 
  I(INDEKS($A3:$W3;1;ILE.LICZB($A3:$W3))=1;  INDEKS($A3:$W3;1;ILE.LICZB($A3:$W3)-1)<-6))
muszę pomyśleć czy można ją uprościć np REGEX-em ...

Ta formuła wygląda strasznie, ale w zasadzie robi niewiele. Sprawdza czy został spełniony jeden z dwóch warunków (funkcja LUB()):
  • Warunek 1. Sprawdza czy ostatnie trzy dwie cyfry przed ostatnią spełniają określone warunki (funkcja I()):
  • ostatnia liczba ma być mniejsza niż 0 jeżeli przedostatnia liczba jest dodatnia to ostatnia będzie mniejsza od zera, więc ten warunek jest zbędny
  • przedostatnia liczba ma być równa 1
  • przed przedostatnia liczba ma być mniejsza niż -6
  • Warunek 2. Sprawdza czy ostatnie dwie cyfry spełniają określone warunki (funkcja I()):
  • ostatnia liczba ma być równa 1
  • przedostatnia liczba ma być mniejsza niż -6
Ostatnio zmieniony pn lis 29, 2021 6:10 pm przez Rafkus, łącznie zmieniany 2 razy.
Powód: poprawiona formuła, jeden warunek zbędny
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Tu chyba trzeba znowu coś przemnożyć bo wychodzi PRAWDA lub FAŁSZ.
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Albo zaznaczyć te komórki i zmienić formatowanie komórki/komórek na Standard (pojawią się 0 i 1). Ja w kodzie liczby wpisałem znak # - ukrywa zera.
Co do formuły AH... choć wymyśliłem inne to wcale nie były prostsze. Zostawiam ją taką jaka jest.
Ostatnio zmieniony śr gru 01, 2021 11:48 am przez Rafkus, łącznie zmieniany 1 raz.
Powód: Usunięcie pliku, poniżej nowa wersja
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Działa.

Tylko, że formuły w kolumnach od AA do AF (chyba nawet AG) dalej zliczają wartości, które są w AH, defacto je dublując.

Gdy w kolumnie AA dodam pomijanie ostatniej liczby

Kod: Zaznacz cały

=LICZ.JEŻELI(($A3:$W3<-6)*2 & ($B3:$X3=1)*2 & ($C3:$Y3=AA$2)*2;"222")-INDEKS($A3:$W3;1;ILE.LICZB($A3:$W3))
wyświetlają się nieprawidłowe dane.

Jak sobie z tym poradzić?
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

Chciałbym przedstawić swoje spojrzenie na ten temat.
Przedstawiam je w zwrotnym pliku w arkuszu Arkusz2.
Dla każdego wiersza danych utworzyłem znormalizowany ciąg znakowy złożony z liczb zawartych w kolumnach A do W.
Normalizacja polega na przekształcenia każdej liczby w liczbę dwucyfrową oraz rozdzieleniu poszczególnych liczb znakiem kropki.
Do obliczenia ilości wystąpień wykorzystałem różnicę między długością ciągu oryginalnego a ciągiem otrzymanym funkcją REGEX zastępującą poszukiwane ciągi ciągiem pustym. Ta różnica podzielona przez długość szukanego ciągu to ilość wystąpień.
W przedstawionym rozwiązaniu wiersz 2. zawiera wyrażenie regularne wyszukiwanego ciągu natomiast wiersz 3. liczbę poszukiwanych znaków.


Ponadto wyznaczyłem ostatnią i przedostatnią liczbę w każdym ciągu. Nie tworzyłem formuły, bo opis:
9. Jeżeli przedostatnia liczba w wierszu wynosi <6 to: w kolumnie AH powinno się znaleźć 1 jeżeli ostatnią liczbą w wierszu jest 1 lub 1jeżeli ostatnia liczba w wierszu wynosi >= -6.
jest dla mnie niejasny. Mając jednak te liczby, można utworzyć właściwą formułę.
Ostatnio zmieniony wt lis 30, 2021 11:25 pm przez Jermor, łącznie zmieniany 1 raz.
Powód: Usunąłem załącznik. Poprawiona wersja znajduje się w poście poniżej.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

No tak, był taki warunek - to oto w nim chodziło...

Jeśli chodzi o twoją próbę poprawki to dobrze patrzysz, lecz źle kombinujesz... działałoby gdybyś próbował zmienić zakresy w tych wyrażeniach: ($A3:$W3<-6)*2 & ($B3:$X3=1)*2 & ($C3:$Y3=AA$2)

Widzę że używasz LO i całe szczęście. Proponuję w tych kolumnach podmienić funkcję z LICZ.JEŻELI na LICZ.WARUNKI. Jeden warunek już znasz, teraz drugi. W twoim pliku w wierszu 3 jest 13 liczb. Ostatnie 3 cyfry (11 12 i 13) są sprawdzane formułą z kolumny AH. Zatem nowy warunek to taki aby były sprawdzane liczby tylko z pozycji mniejszej niż 11. A więc nowa formuła będzie wyglądać tak:

Kod: Zaznacz cały

=LICZ.WARUNKI(
($A3:$W3<-6)*2 & ($B3:$X3=1)*2 & ($C3:$Y3=AA$2)*2;
"222";
KOLUMNA($A3:$W3);
"<" & (ILE.LICZB($A3:$W3)-2)
)
Dla czytelności: rozbiłem formułę na wiersze: Warunek1, Kryterium1 oraz Warunek2, Kryterium2.
Wyrażenie KOLUMNA($A3:$W3) da nam ponumerowane, kolejne wartości odpowiadającym numerom pozycji z zakresu, natomiast to: "<" & (ILE.LICZB($A3:$W3)-2) tworzy kryterium, że interesuje nas zakres o numerach pozycji o dwie mniejsze od wszystkich liczb z zakresu.
Spróbuj sam poprawić formuły, jakby co to mogę później dostarczyć plik.
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

Połapałem się w końcu co do punktu 9 i 10.
Jeżeli poniższy opis określa zasadę wyznaczania wartości w AH
9. Jeżeli przedostatnia liczba w wierszu wynosi < -6 to: w kolumnie AH powinno się znaleźć 1 jeżeli ostatnią liczbą w wierszu jest 1 lub 1 jeżeli ostatnia liczba w wierszu wynosi <= -6.
10. Jeżeli ostatnią liczbą w wierszu jest < -6 wtedy wartość w kolumnie Y i AH powiększa się o 1.
to w odniesieniu do poprzednio przedstawionej propozycji, (w Arkusz2) właściwą formułą będzie:

Kod: Zaznacz cały

=WARUNKI(L4<=-6;1;I(M4<-6;L4=1);1;1=1;0)+(L4<-6)
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

@Jermor z ciekawością wgryzłem się w twoje rozwiązanie. Przyznam, że w ogóle mam problem z wyrażeniami regularnymi więc proszę wyjaśnij mi czy ten zapis: -0[7-9]\. znajdzie liczbę np.: -11.? W końcu jest ona mniejsza niż -6...

We wcześniejszych propozycjach również bawiłem się z podmianą liczb na tekst tylko że ja zamieniałem liczby: <-6 na "a", = 1 na "b", wszystkie inne na "c"

Kod: Zaznacz cały

=ZŁĄCZ.TEKST(WYBIERZ(1+($A3:$W3<-6)+($A3:$W3=1)*2;"c";"a";"b"))
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

Muszę zweryfikować swoją propozycję. Nie działa ona dobrze, we wszystkich kolumnach. Wydaje mi się, że dobrze funkcjonuje dla kolumn od Z do AF, lecz wymaga modyfikacji ciągu wyszukiwanego. Zamiast dotychczasowego: -0[7-9]\. należy w tym miejscu wprowadzić: -(0[7-9]|[1-9][0-9])\.
Stary zapis wykrywał liczby <-6, lecz tylko wtedy gdy były to liczby jednocyfrowe. Wymagana reguła nie jest prawidłowo wykonywana dla kolumny AG w sytuacji gdy ciąg liczb ma np. układ -8 1 -7 1 -7.
Może coś wymyślę.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

Witam @Rafkus. Twoje spostrzeżenie odkryłem wcześniej i powyżej opisałem poprawkę. Zastosowane przeze mnie rozwiązanie to usunięcie ciągów spełniających warunki. Niestety w kolumnie AG ciągi mogą się "zazębiać" i usunięcie znalezionego fragmentu usunie zarazem pierwszą część tego następnego. Jednak @JedenGość napisał, że Y to suma od Z do AH, zatem AG to różnica Y-suma (Z:AF)-AH
Jednak ten algorytm chyba nie został dobrze opisany. Weźmy ostatni wiersz danych. Są tam dwie interesujące nas wartości -7 i -6. pojawi się liczba wystąpień liczb mniejszych od -6, jest to 1 (tylko -7). Taka jedynka pojawi się też w kolumnie AF (w przykładzie podanym przez @JedenGość tego nie ma).
Teraz zgodnie z opisem pkt 9. jeśli ostatnią wartością w wierszu jest liczba <=6 w AH ma pojawić się 1. W tym momencie przestaje zgadzać się wartość Y z sumą Z:AH. Ostatni punkt, 10. nakazuje zwiększyć Y i AH o 1 wtedy, gdy ostatnia liczba jest mniejsza od -6. W tym przypadku zwiększenie nie nastąpi.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

Przyjrzałem się swojemu plikowi. Poprawiłem niepoprawnie zbudowane wyrażenia regularne i przesyłam ponownie swój projekt, który w Arkusz2 przedstawia rozwiązanie problemu.
Wyrażenia regularne. Przykładowe objaśnienie.

Kod: Zaznacz cały

-((0[7-9])|([^0].))\.01\.-01\.
Wyszukiwany ma być ciąg złożony ze znaku minus, po którym ma wystąpić cyfra 0 a po niej jedna z cyfr 7, 8 lub 9 albo znak inny niż 0, po którym wystąpi jeszcze jeden dowolny znak, po tym wariancie ma pojawić się znak kropki, cyfry 0 i 1, znowu znak kropki, znak minus, cyfry 0 i 1 i kończący ten ciąg znak kropki. Łącznie wyszukiwany ciąg zawiera 11 znaków (minus, dwie cyfry, kropka, dwie cyfry, kropka, minus, dwie cyfry, kropka).
Funkcja REGEX żąda znalezienia takiego wzorca i usunięcie go z wyniku we wszystkich znalezionych miejscach. Uzyskany ciąg będzie krótszy o tyle krotności 11 znaków, ile ich znaleziono w przeszukiwanym ciągu.
Zmodyfikowałem regułę wyznaczającą obliczanie wartości w kolumnie AH w ten sposób, że w pkt. 9. przyjąłem, iż jeśli ostatnią wartością ciągu jest liczba <-6 ( a nie <=-6), to AH ma przyjąć wartość 1.
Arkusz2 przedstawia metodę zrealizowania tego problemu. Wykorzystanie zależy od użytkownika.
Dołączam poprawioną wersję tego projektu. Mam nadzieję, że usunąłem wszystkie błędy.
Załączniki
JedenGosc_20211127 Jermor_2.ods
(29.96 KiB) Pobrany 84 razy
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Dostarczam plik z poprawionymi formułami, podczas ich korekty dopadły mnie wątpliwości co do poprawności wyników w kolumnie AG oraz AH - popatrz w komentarze. W kolumnie AJ oraz AK są wyniki jakby moje obawy były słuszne.
Ostatnio zmieniony pt gru 03, 2021 6:50 pm przez Rafkus, łącznie zmieniany 1 raz.
Powód: Usunięcie pliku, poniżej nowa wersja
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Dzięki Panowie. Niestety wczoraj i dzisiaj mam mnóstwo innej pracy. Zapoznam się dokładnie i wieczorem odpiszę.
Libre Office 7.5.4.2 / Windows 11
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

Do @Rafkus. Formuła nakazująca dodać 1 gdy ostatnia liczba w wierszu jest <-6 lub przedostatnia jest <-6 a ostatnia =1 dotyczy kolumny AH. Ty ją zastosowałeś w kolumnie AG, stąd taki wynik.
Ja w swoim rozwiązaniu uznałem, że AH jest różnicą między Y a sumą AA:AF+AH. To znacznie uprościło obliczenia. Wg mnie pkt 10. jest niepotrzebny, gdyż Y zawiera właściwą liczbę wartości <-6 a AH otrzymuje 1 wtedy, gdy ostatnia wartość jest, <-6 lub przedostatnia <-6 a ostatnia to 1, czyli wtedy gdy nie można już sprawdzić sekwencji trzech kolejnych liczb, gdyż takiej już nie ma.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Jermor pisze:Do @Rafkus. Formuła nakazująca dodać 1 gdy ostatnia liczba w wierszu jest <-6(...) Ty ją zastosowałeś w kolumnie AG, stąd taki wynik.
Bo w pewnym momencie było takie życzenie @JedenGość-a.

Obecnie myślę, że w tej ostatniej kolumnie mógłby być taki warunek:
  • Jeżeli ostatnie trzy liczby tworzą sekwencję: [<-6] [=1] [i któraś z tych: -1,-2, ..., -6] to przepisywana jest ostatnia liczba
  • Jeżeli ostatnie dwie liczby tworzą sekwencję: [<-6] [=1] to wpisywana jest cyfra 1 bo w sekwencji brakuje jednej liczby
  • Jeżeli ostatnia liczby jest <-6 to wpisywana jest cyfra 2 bo brakuje dwóch liczb do sekwencji
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
Awatar użytkownika
Jermor
Posty: 2238
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Jermor »

W kolumnie AH wstawiłem u siebie formułę WARUNKI(), ale po przeanalizowaniu sytuacji wystarczy tam następująca formuła o ogólnej postaci:

Kod: Zaznacz cały

=(ostatnia<-6)+I(przedostatnia<-6;ostatnia=1)
gdyż w tej kolumnie może pojawić się tylko 1 albo 0.
Nadal uważam, że wartości w AG najwygodniej jest obliczyć przez odjęcie od ilości liczb [<-6] (kolumna Y) wartości wyliczone w kolumnach Z:AF i AH (chyba w poprzednich postach pisałem ciągle, że od AA:AF, ale w swojej formule użyłem właściwych zakresów).
W moim rozwiązaniu nie analizuję warunku wystąpienia ciągu liczb [<-6] [=1] [<-6].
Ponieważ obliczamy ilość wystąpień liczby [<-6], ilość wystąpień ciągu liczb [<-6] [>1] oraz ilości wystąpień [<-6] [=1] [-1, ..., -6] a w AH pojawia się informacja o uwzględnieniu niepełnego ciągu, to wspomniana przeze mnie różnica jest ilością wystąpień ciągu liczb [<-6] [=1] [<-6].
Rafkus pisze:Jeżeli ostatnie trzy liczby tworzą sekwencję: [<-6] [=1] [i któraś z tych: -1,-2, ..., -6] to przepisywana jest ostatnia liczba
Ta sytuacja w twoim rozwiązaniu jest wykrywana przez jedną z formuł od AA:AF.
Liczba [<-6] na końcu lub końcowy układ [<-6][=1] wlicza liczbę ujemną do ilości w Y, ale nie ma ona dopasowania do żadnego innego ciągu, więc w AH wstawiane jest 1.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
Awatar użytkownika
Rafkus
Posty: 513
Rejestracja: czw kwie 12, 2018 10:26 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: Rafkus »

Na podstawie wiadomości zostawionych w przykładach przez @JedenGość zrozumiałem, że:
  • dane w kolumnach A-W są stale aktualizowane, przy czym zmienia się albo ostatnia liczba albo dochodzi nowa z przeciwnym znakiem
  • W związku z powyższym taka zmienna sekwencja nie ma być brana pod uwagę w kolumnach podsumowujących AA-AF, tylko właśnie w AH ma się pojawić informacja że takie cudo się pojawiło albo może się pojawić
Widziałem twoją propozycję i uważam, że właśnie tą kolumnę masz niedopracowaną. Twoje wyniki nie zgadzają się z zaprezentowanymi wynikami. Sam miałem z nią problem też nie rozumiałem tego punku 9 w opisie, dopiero w którymś kolejnym (JedenGosc_20211127_5.ods) było to bardziej rozpisane...
LibreOffice 7.4.6 (preferowany) oraz OpenOffice 4.1.6. Widows 10
OpenOffice 4.1.3. oraz Libre 4.2.5.2 Windows XP
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Sprawdziłem rozwiązanie @Rafkus.

Muszę posypać głowę popiołem. Od natłoku tych cyferek, sam pogubiłem się w swoich zamiarach. Oczywiście S19 i I18 nie powinny być brane pod uwagę, ponieważ poprzednie liczby ujemne są >=-6. W tej sytuacji formuła w AJ jest poprawna, ale w AK nie, niepotrzebnie zliczyło -7 z S19 i -7 z I18. W pozostałych polach AK jest ok.
Dotychczas byłem przekonany, że LUB() oraz I() musi występować łącznie z JEŻELI. A tu niespodzianka...
Rozkminiam już, co wykasować z tej formuły, aby nie zliczało ostatnich liczb, jeśli poprzednia ujemna była >=-6.

@Jermor, teraz przyjrzę się Twojemu rozwiązaniu i odpiszę w kolejnym poście.
Libre Office 7.5.4.2 / Windows 11
JedenGość
Posty: 195
Rejestracja: czw mar 07, 2019 6:54 pm

Re: Wyszukiwanie liczby w zależności od liczby wcześniejszej

Post autor: JedenGość »

Jermor pisze:Teraz zgodnie z opisem pkt 9. jeśli ostatnią wartością w wierszu jest liczba <=6 w AH ma pojawić się 1. W tym momencie przestaje zgadzać się wartość Y z sumą Z:AH. Ostatni punkt, 10. nakazuje zwiększyć Y i AH o 1 wtedy, gdy ostatnia liczba jest mniejsza od -6. W tym przypadku zwiększenie nie nastąpi.
I tu znowu mój błąd merytoryczny. Zamiast <=6 powinno być >=6. To klawisz obok na klawiaturze, a ja nie sprawdziłem co napisałem... Przepraszam.

To co napisałem w tabeli było właściwe. Mamy do czynienia z jedną liczbą <-6, czyli -7 z N20. Następna dodatnia =1 i kolejna ujemna jest >=-6 (dokładnie -6). W tej sytuacji kolumna AH powiększa się o 1.

Prawdopodobnie ten mój błąd w opisie spowodował, że Twoje rozwiązanie wylicza nieprawidłowe dane. Jeszcze raz przepraszam.

Dla jasności przesyłam jeszcze raz poprawioną tabelę z POPRAWNYMI WARTOŚCIAMI (mam nadzieję, że jakiś chochlik znowu czegoś nie namieszał).

Kolumna AI wszędzie pokazuje PRAWDA i tak powinno być, zgodnie z formułą:

Kod: Zaznacz cały

JEŻELI(INDEKS($A3:$W3;ILE.LICZB($A3:$W3))>=-6;JEŻELI(Y3=SUMA(Z3:AH3));JEŻELI(Y3=SUMA(Z3:AH3))-1)
Załączniki
JedenGosc_20211127_8.ods
(18.59 KiB) Pobrany 70 razy
Libre Office 7.5.4.2 / Windows 11
ODPOWIEDZ