Witam. Chciałabym stworzyć automatyczną formułę, która będzie zliczać ilość zer w ciągu do czasu, aż spotka pierwszą jedynkę (lub pierwszą napotkaną inna liczbę niż zero - byłoby to bardziej wszechstronne, ale na razie mam dane tylko z 0 i 1, wiec wystarczyłoby mi na razie to).
Żeby lepiej zrozumieć, dodaję załącznik.
Zazwyczaj stosuję zwyczajne proste funkcje, nie umiem makr i nie wiem, jak się je wstawia, byłoby super, gdyby rozwiązanie opierało się na zwyczajnych komendach/funkcjach. Będę bardzo wdzięczna za pomoc.
Zliczanie zer
Zliczanie zer
- Załączniki
-
- zliczanie zer.png (12.45 KiB) Przejrzano 505 razy
OpenOffice 4.1.3 na Windows 7
Re: Zliczanie zer
Numery porządkowe ciągu przyrastają o 1 z każdym wyrazem. Przyjęło się wizualizować tę zasadę schodząc „w dół”, jak wiersz po wierszu w tabeli albo na kartce. Niby żadna różnica, ale w funkcjach bibloitecznych służących do wyszukiwania ta notacja też jest przestrzegana.
Wobec tego w Twoich przykładach chodzi raczej o to, ile końcowych wyrazów ciągu ma wartość 0.
W przypadku liczenia od początku sprawę da się rozwiązać dość prosto przy użyciu składni tablicowej (wektorowej). Załóżmy, że kolumna A zawiera ciąg liczb pisanych od początku bez żadnej luki. Może ich być 100 lub mniej niż 100.
Jeśli mamy pewność, że ciąg zawiera cokolwiek oprócz zer, odpowiedź da formuła:
Bez tej pewności wyszukiwanie może doprowadzić do błędu N/A. Więc go obsłużymy, podając wtedy łączną liczbę wyrazów + 1:
Formuły tablicowe działają wg innej składni niż „zwykłe”. Zatwierdza się je przez <Ctrl>+<Shift>+<Enter>.
Przy zliczaniu „od końca” trzeba się trochę pogimnastykować, ponieważ wbudowane funkcje biblioteczne chcą liczyć od początku.
Wykorzystanie dodatkowej kolumny roboczej pozwoli zarówno na liczenie „od końca”, jak na przejście na „zwykłe” formuły. Ale nie wiem, czy jest to dopuszczalna opcja.
Realizacja tego wariantu — pisanego na szybko, wymagającego dopracowania, korzysta z formuły:
Wymagana jest cała kolumna takich obliczeń; największa wartość w tej kolumnie — uzupełnionej zerem na wypadek startu od (-1) — będzie równa liczbie końcowych zer.
Załącznik z działającym przykładem:
Wobec tego w Twoich przykładach chodzi raczej o to, ile końcowych wyrazów ciągu ma wartość 0.
W przypadku liczenia od początku sprawę da się rozwiązać dość prosto przy użyciu składni tablicowej (wektorowej). Załóżmy, że kolumna A zawiera ciąg liczb pisanych od początku bez żadnej luki. Może ich być 100 lub mniej niż 100.
Jeśli mamy pewność, że ciąg zawiera cokolwiek oprócz zer, odpowiedź da formuła:
Kod: Zaznacz cały
=MATCH(1; A1:A100<>0; 0)
Kod: Zaznacz cały
=IF(ISERROR(MATCH(1; A1:A100<>0; 0)); COUNT(A1:A100)+1; MATCH(1; A1:A100<>0; 0))
Przy zliczaniu „od końca” trzeba się trochę pogimnastykować, ponieważ wbudowane funkcje biblioteczne chcą liczyć od początku.
Wykorzystanie dodatkowej kolumny roboczej pozwoli zarówno na liczenie „od końca”, jak na przejście na „zwykłe” formuły. Ale nie wiem, czy jest to dopuszczalna opcja.
Realizacja tego wariantu — pisanego na szybko, wymagającego dopracowania, korzysta z formuły:
Kod: Zaznacz cały
=IF(ISBLANK(A1); 0; IF(ISBLANK(A2); IF(A1=0;1;-1); IF(A1=0;IF(G2>=0;G2+1;G2);-1)))
Załącznik z działającym przykładem:
JJ
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (24.2|7.6) ∙ Python (3.12|3.11|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Zliczanie zer
Mój pomysł jest inny, także wykorzystuje formułę macierzową, czyli zatwierdzenie skrótem CTRL+SHIFT+ENTER.
Dopiero po realizacji zorientowałem się, że @ulaR korzysta z Apache OpenOffice, a pomysł jest do wykorzystania tylko w LIbreOffice, gdyż z zastosowanych funkcji tylko DŁ() jest dostępna w Apache OpenOffice.
Idea jest następująca:
Wyznaczam ciąg tekstowy ze wszystkich komórek zakresu zawierający wynik sprawdzenia, czy komórka zawiera wartość 0. To jest ta część macierzowa i ma postać: ZŁĄCZ.TEKST(A1:A11=0) Wynikiem będzie ciąg zer i jedynek, w którym 1 oznacza wartość zerową.
Z tego ciągu funkcją REGEX wyodrębniam ostatnie jedynki.
REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$")
A długość tego ciągu to liczba zer na końcu.
Dł(REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$"))
Pozostaje problem tego, gdy na końcu nie ma zera, funkcja REGEX() zwróci wówczas błąd #N/D, dlatego ostateczna postać znajduje się w funkcji JEŻELI.BŁĄD():
JEŻELI.BŁĄD(Dł(REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$"));0)
i należy ją zatwierdzić wspomnianym skrótem klawiaturowym.
Formuły takiej nie można kopiować przez zwykłe przeciągnięcie, należy przytrzymać przy przeciąganiu klawisz CTRL, albo skorzystać z operacji "Kopiuj" i "Wklej".
Uwaga: komórka "pusta" jest traktowana jak zawierająca 0.
Dopiero po realizacji zorientowałem się, że @ulaR korzysta z Apache OpenOffice, a pomysł jest do wykorzystania tylko w LIbreOffice, gdyż z zastosowanych funkcji tylko DŁ() jest dostępna w Apache OpenOffice.
Idea jest następująca:
Wyznaczam ciąg tekstowy ze wszystkich komórek zakresu zawierający wynik sprawdzenia, czy komórka zawiera wartość 0. To jest ta część macierzowa i ma postać: ZŁĄCZ.TEKST(A1:A11=0) Wynikiem będzie ciąg zer i jedynek, w którym 1 oznacza wartość zerową.
Z tego ciągu funkcją REGEX wyodrębniam ostatnie jedynki.
REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$")
A długość tego ciągu to liczba zer na końcu.
Dł(REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$"))
Pozostaje problem tego, gdy na końcu nie ma zera, funkcja REGEX() zwróci wówczas błąd #N/D, dlatego ostateczna postać znajduje się w funkcji JEŻELI.BŁĄD():
JEŻELI.BŁĄD(Dł(REGEX(ZŁĄCZ.TEKST(A1:A11=0);"1+$"));0)
i należy ją zatwierdzić wspomnianym skrótem klawiaturowym.
Formuły takiej nie można kopiować przez zwykłe przeciągnięcie, należy przytrzymać przy przeciąganiu klawisz CTRL, albo skorzystać z operacji "Kopiuj" i "Wklej".
Uwaga: komórka "pusta" jest traktowana jak zawierająca 0.
AOO 4.1.15, LO 24.8.2 (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.
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.
Re: Zliczanie zer
Zmodyfikowałem formułę końcową. Nie musi ona być ubrana w JEŻELI.BŁĄD(), wystarczy zmienić sposób wyszukiwania końcowego ciągu jedynek. Zmodyfikowana formuła to: =DŁ(REGEX(ZŁĄCZ.TEKST(A1:A10=0);"1*$"))
No ale jak już wspomniałem dotyczy to tylko Calc w LibreOffice i dlatego zachęcam do przejścia na niego.
No ale jak już wspomniałem dotyczy to tylko Calc w LibreOffice i dlatego zachęcam do przejścia na niego.
AOO 4.1.15, LO 24.8.2 (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.
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.