[SOLVED]Różnica tekstów, wynik godzinowy

Użytkowanie arkusza kalkulacyjnego
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

[SOLVED]Różnica tekstów, wynik godzinowy

Post autor: brex87 »

Dzień dobry.
W jaki sposób mogę uzyskać różnicę z 2 komórek, tak żeby wartość była zwracana w formie godziny bez znaczenia czy w dwóch komórkach jest wprowadzony tekst czy wartość liczbowa (godzina) ?
O ile odejmowanie godzin odbywa się przez wskazanie formatowania godzinowego [HH]:MM i zwracane są poprawne wartośći to w przypadku tekstu niestety to nie działa.
W załączeniu arkusz z łatwiejszym zobrazowaniem efektu końcowego.
Załączniki
Przyklad.ods
(12.08 KiB) Pobrany 133 razy
Ostatnio zmieniony pn cze 17, 2019 12:12 pm przez brex87, łącznie zmieniany 1 raz.
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2256
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Różnica tekstów, wynik godzinowy

Post autor: Jermor »

Co za pytanie?! Nie można uzyskać wyniku odejmowania gdy choćby jeden ze składników wielomianu jest tekstem.
Przykład sugeruje, że chodzi o sytuację, w której gdy zawartością komórki jest tekst (dowolny), to wynikiem powinna być wartość 8.
Trzeba więc zbudować wyrażenie warunkowe.
Najpowszechniej stosowanym jest JEŻELI. dla wyrażenia wierszu drugim byłoby to:

Kod: Zaznacz cały

=JEŻELI(LUB(CZY.TEKST(A2);CZY.TEKST(B2));0,33333;B2-A2)
Ale można zbudować np takie, jeśli ktoś nie lubi funkcji JEŻELI:

Kod: Zaznacz cały

=WYBIERZ(LUB(CZY.TEKST(A2);CZY.TEKST(B2))+1;B2-A2;0,33333)
Użyta tu wartość 0,33333 przy formatowaniu HH:MM zostanie pokazana jako 08:00
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.
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: Różnica tekstów, wynik godzinowy

Post autor: brex87 »

Dziękuję za odpowiedź, rozumiem że nie można wykonać takiej operacji bo jest to matematycznie nielogiczne.
Źle się wyraziłem miałem na myśli zwrócenie wartości jeśli spełnione jest kryterium, w tym przypadku to w dwóch kolumnach tekst.
A czy jest możliwość połączenia zapytania w taki sposób żeby "jeżeli" spełniało dodatkowo jeszcze jedno kryterium lub/i ?
W tej konkretnej formule sprawdza czy znajduje się tekst, a czy można dodać do tego "jeżeli", funkcje konkretnego znaku np. x ?
Ciąg logiczny powinien wtedy zachować się w sposób taki:
Sprawdź czy w kolumnie A2, B2 znajduje się tekst, jeśli tak to zwróć wartość 08:00 w kolumnie C2
oraz dodatkowy warunek, jeśli w kolumnie A2, B2 znajduje się znak "x", jeśli tak to zwróć wartość "x" w kolumnie C2 ?
Dlaczego 0,33333 jest tłumaczone jako 08:00 ??
Po zastosowaniu formuły:

Kod: Zaznacz cały

=JEŻELI(LUB(CZY.TEKST(A2);CZY.TEKST(B2));0,33333;B2-A2)
Suma wierszy w arkuszu 183:59, a nie 184:00, co może być przyczyną złego wyniku ? (nowy przykład w załączniku)
Załączniki
Przyklad.ods
(14.64 KiB) Pobrany 136 razy
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2256
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Różnica tekstów, wynik godzinowy

Post autor: Jermor »

Dlaczego 0,33333? Czas w Calcu jest liczbą, dokładnie ułamkiem odpowiadającym części doby. Dlatego ułamek 0,33333 wyświetlony za pomocą formatu HH:MM pokaże 08:00. Calc w ten sposób zinterpretuje każdy ułamek, który będzie miał przypisany format w rodzaju HH:MM:SS,000, ten z kolei odpowiada jakiejś godzinie, minutom, sekundom i jeszcze ułamkom tych sekund. Godzina 8-ma to tak naprawdę 1/3 doby. Ze szkoły powinniśmy pamiętać, że 1/3 jest ułamkiem niewymiernym, a więc 0,333(3). Wpisana przeze mnie wartość ma za małą dokładność i tak naprawdę odpowiada godzinie 07:59:59,712, dlatego po zsumowaniu wielu takich wartości pojawi się różnica. Sama pojedyncza wartość wyświetlana formatem HH:MM wyświetli 08:00 gdyż zostanie zaokrąglona. Powinno się zatem użyć wartości z pełną dokładnością, 0,333333333333333, (15 trójek), albo wykorzystać funkcję CZAS(8;0;0), która stosowną wartość wstawi.
Formuły warunkowe można rozbudowywać o kolejne testowane składniki. Trzeba to jednak robić umiejętnie. W twoim przypadku należałoby najpierw sprawdzić czy w komórce jest "x", potem czy zawiera tekst. Sprawdzanie warunku w zaproponowanej przez ciebie kolejności nigdy nie wstawiłoby znaku "x", bo znak ten jest przecież tekstem i już pierwszy test zakwalifikowałby go do wpisania 8.
Jak zwykle w takich sytuacjach pojawiają się dalsze problemy. Zawsze trzeba badać dwie komórki. Co ma się stać gdy obie albo jedna z nich będzie pusta?
Funkcję JEŻELI można właściwie dowolnie rozbudowywać. Więcej znajdziesz w wielu miejscach internetowych m. in. także tutaj: https://yestok.pl/ooo/y57.php.
W twoim wypadku zastanowiłbym się nad wykorzystaniem funkcji WARUNKI. Dla twoich obliczeń mogłaby ona mieć taką postać:

Kod: Zaznacz cały

=WARUNKI(I(CZY.LICZBA(A2);CZY.LICZBA(B2));B2-A2;I(CZY.PUSTA(A2);CZY.PUSTA(B2));"";LUB(LITERY.WIELKIE(A2)="X";LITERY.WIELKIE(B2)="X");"X";LUB(CZY.TEKST(A2);CZY.TEKST(B2));0,333333333333333)
Argumentami tej funkcji są naprzemiennie zapisane testy logiczne i działanie jakie ma zostać zapisane gdy test logiczny ma wartość PRAWDA. Argumenty są analizowane od lewej do prawej i wykonane jest działanie dla pierwszego napotkanego testu spełniającego warunek PRADA.
W powyższym przykładzie pierwszy test bada czy w obu komórkach są liczby, jeśli tak to obliczana jest różnica. Drugi test bada czy obie komórki są puste. Jeśli tak to do wynikowej komórki jest wstawiany pusty ciąg, trzeci test sprawdza, czy jedna z komórek nie zawiera znaku "x". Ponieważ nie wiadomo, czy użytkownik wpisze "x" czy "X" w teście użyto funkcji LITERY.WIELKIE. Funkcja wymaga wpisania zawsze pary: Test - Działanie, dlatego chociaż już wiadomo, że jeśli komórki nie zawierają liczb, nie są puste, i nie zawierają znaku "x" to muszą zawierać tekst i to tak wpisujemy test czy chociaż jedna z komórek zawiera tekst i jako działanie przypisujemy 8 godzin.
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.
brex87
Posty: 44
Rejestracja: wt maja 14, 2019 8:34 am

Re: [SOLVED]Różnica tekstów, wynik godzinowy

Post autor: brex87 »

Bardzo dziękuję za cierpliwość i łopatologiczne wyjaśnienie oraz odnośnik do lektury.
LibreOffice 6.2.2.2 (x64)
Awatar użytkownika
Jermor
Posty: 2256
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: [SOLVED]Różnica tekstów, wynik godzinowy

Post autor: Jermor »

Nie wspomniałeś, czy wykorzystasz pomysł z funkcją WARUNKI. Więc jeszcze małe uzupełnienie.
Formalnie należy ją rozbudować o jeszcze jeden test i działanie. Zaproponowane rozwiązanie nie obejmuje bowiem sytuacji gdy tylko do jednej z komórek zostanie wpisana liczba a druga będzie pusta. Dlatego jako ostatni test-działanie należałoby dopisać np.:

Kod: Zaznacz cały

LUB(CZY.LICZBA(A2);CZY.LICZBA(B2));"Brakuje jednej liczby"
Do tego testu obliczenia doszłyby po sprawdzeniu czy w obu komórkach są liczby, czy w obu komórkach jest pusto, czy przynajmniej jedna komórka zawiera znak "x" i czy przynajmniej jedna komórka zawiera jakiś tekst. Przypominam, że pierwszy z tych testów, który ma wartość PRAWDA wyzwoli związane z nim działanie i dalsze testy nie będą już sprawdzane.
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.
ODPOWIEDZ