[SOLVED]Różnica tekstów, wynik godzinowy
[SOLVED]Różnica tekstów, wynik godzinowy
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.
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)
Re: Różnica tekstów, wynik godzinowy
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:
Ale można zbudować np takie, jeśli ktoś nie lubi funkcji JEŻELI:
Użyta tu wartość 0,33333 przy formatowaniu HH:MM zostanie pokazana jako 08:00
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)
Kod: Zaznacz cały
=WYBIERZ(LUB(CZY.TEKST(A2);CZY.TEKST(B2))+1;B2-A2;0,33333)
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.
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: Różnica tekstów, wynik godzinowy
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:
Suma wierszy w arkuszu 183:59, a nie 184:00, co może być przyczyną złego wyniku ? (nowy przykład w załączniku)
Ź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)
- Załączniki
-
- Przyklad.ods
- (14.64 KiB) Pobrany 136 razy
LibreOffice 6.2.2.2 (x64)
Re: Różnica tekstów, wynik godzinowy
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ć:
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.
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)
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.
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: [SOLVED]Różnica tekstów, wynik godzinowy
Bardzo dziękuję za cierpliwość i łopatologiczne wyjaśnienie oraz odnośnik do lektury.
LibreOffice 6.2.2.2 (x64)
Re: [SOLVED]Różnica tekstów, wynik godzinowy
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.:
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.
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"
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.
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.