Strona 1 z 1

Błąd #ARG! przy funkcji JEŻELI

: wt lip 12, 2022 11:38 pm
autor: llukaszku
Cześć, mam do zrobienia operację liczącą warunki i wszystko było dobrze do momentu gdy liczby były całkowite, problem powstał gdy powstała liczba niecałkowita.

Kod: Zaznacz cały

=JEŻELI(E3="Auto";(J3/1,23*AD3+AF3)*$AE$1;JEŻELI(AE3>=0;(J3/1,23*AD3+AF3+5*AE3)*$AE$1;" "))
odwołanie do pola ED3

Kod: Zaznacz cały

=LEWY(R3;4)
gdy funkcja LEWY zwracała liczbę całkowitą (np. 1) funkcja JEŻELI zwracała prawidłową wartość, natomiast gdy funkcja LEWY zwraca liczbę niecałkowitą (np. 0,75) to funkcja JEŻELI zwraca błąd #ARG!

Jak to poprawić żeby funkcja JEŻELI w tym przypadku zwracała prawidłowy wynik?

Pozdrawiam

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 9:23 am
autor: Jan_J
Testowanie zawiłych formuł w całości bywa równie zawiłe.
Sprawdź w osobnych komórkach, co dają formuły

Kod: Zaznacz cały

=E3="Auto"
=(J3/1,23*AD3+AF3)*$AE$1;
=JEŻELI(AE3>=0; (J3/1,23*AD3+AF3+5*AE3)*$AE$1; " ")
Jeśli to cię nie naprowadzi, zrób podobnie z wewnętrznym rozgałęzieniem

Kod: Zaznacz cały

=AE3>=0
=J3/1,23*AD3+AF3+5*AE3)*$AE$1

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 9:46 am
autor: Jermor
Kolega Jan_J podpowiedział jak sprawdzić częściowe działania.
Ja chciałbym zwrócić ci uwagę na to, że funkcja LEWY() nie zwraca żadnej liczy całkowitej, lecz tekst złożony z tylu pierwszych znaków ile podano w drugim parametrze tej funkcji.
W twojej formule nie widzę, gdzie zawartość pola ED3 jest podstawiana, więc nie ma ono wpływu na twoją formułę JEŻELI().
Błąd #ARG! oznacza błędną wartość argumentu użytego w funkcji. Domyślając się powodu, zakładam, że w komórce R3 znajduje się liczba dziesiętna zapisana ze znakiem kropki, a nie przecinka. Funkcja LEWY() zwraca ciąg tekstowy zawierający kropkę i wyrażenie to nie może zostać przekształcone na wartość arytmetyczną, gdyż aby tak się stało znakiem dziesiętnym powinien być przecinek.
Jeśli dobrze trafiłem z diagnozą to zamiast twojej formuły LEWY() napisz taką:

Kod: Zaznacz cały

=PODSTAW(LEWY(R3;4);".";",")
W podpisie swego postu umieściłeś "OpenOffice 3.1". Ta wersja programu już od dawna jest przestarzała. Taki wpis tak naprawdę nic nie mówi o użytej aplikacji. Obecnie w użyciu są dwie: Apache OpenOffice w wersji 4.1.12 oraz LibreOffice w wersji 7.2.7 (stabilna) lub 7.3.4 (świeża).
W Libre office napisanie twojej formuły JEŻELI() jest znacznie prostsze, gdyż w tej wersji dostępna jest nowa funkcja WARUNKI(), która zastosowana do twojego obliczenia mogłaby wyglądać tak:

Kod: Zaznacz cały

=WARUNKI(E3="Auto";(J3/1,23*AD3+AF3)*$AE$1;AE3>=0;(J3/1,23*AD3+AF3+5*AE3)*$AE$1;1;" ")
Opis ciekawych funkcji obliczeniowych m.in. znajdziesz tutaj: https://yestok.pl/lbo/y63.php

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 11:55 am
autor: Rafkus
Wynikiem funkcji LEWY jest tekst i OpenOffice nie dokonuje automatycznej konwersji tekstu na liczbę przecinkową (LibeOffice to potrafi).
W OO musiałbyś jeszcze zastosować funkcje WARTOŚĆ:

Kod: Zaznacz cały

=WARTOŚĆ(LEWY(R3;4))
Ponadto, czemu do liczby stosujesz funkcję tekstową? Zamiast niej możesz użyć funkcji zaokrąglającej do określonego miejsca po przecinku:

Kod: Zaznacz cały

=ZAOKR(R3; 3)

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 12:07 pm
autor: Jan_J
Mały test na LO 7.2.7.2 rpm 64-bit

A1: 123,45 → (liczba)
B1: =lewy(a1; 6) → 123,45 (jako tekst)
C1: =a1=b1 → FAŁSZ (wskutek niezgodności typów)
Nie dostałem błędu #ARG!, ale być może Apache OO w tej sytuacji taki błąd generuje.
Jeśli zaś w A1 wpisać jakikolwiek TEKST o długości co najwyżej 6 znaków, zgodnie z oczekiwaniem wynikiem jest PRAWDA.

Poleganie na zgodności/niezgodności typów w arkuszach kalkulacyjnych jest uciążliwe.
Specyfikacja zachowań nie jest pełna (albo jest dostępna tylko w wysoko specjalistycznej dokumentacji) i różni się między systemami, a czasem nawet między wersjami.

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 12:49 pm
autor: Jermor
Sprawdziłem w Apache OpenOffice. Tekst przedstawiający liczbę całkowitą może zostać użyty do działań arytmetycznych np. =2*"3".
Tekst zawierający liczbę dziesiętną (=2*"3,2") generuje błąd #ARG!.
W LibreOffice oba przykłady wykonają się obliczając wynik.

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 1:37 pm
autor: llukaszku
Jermor pisze: śr lip 13, 2022 9:46 am Kolega Jan_J podpowiedział jak sprawdzić częściowe działania.
Ja chciałbym zwrócić ci uwagę na to, że funkcja LEWY() nie zwraca żadnej liczy całkowitej, lecz tekst złożony z tylu pierwszych znaków ile podano w drugim parametrze tej funkcji.
- tak to prawda, wiem o tym.
Jermor pisze: śr lip 13, 2022 9:46 am W twojej formule nie widzę, gdzie zawartość pola ED3 jest podstawiana, więc nie ma ono wpływu na twoją formułę JEŻELI().
Błąd #ARG! oznacza błędną wartość argumentu użytego w funkcji. Domyślając się powodu, zakładam, że w komórce R3 znajduje się liczba dziesiętna zapisana ze znakiem kropki, a nie przecinka. Funkcja LEWY() zwraca ciąg tekstowy zawierający kropkę i wyrażenie to nie może zostać przekształcone na wartość arytmetyczną, gdyż aby tak się stało znakiem dziesiętnym powinien być przecinek.
Jeśli dobrze trafiłem z diagnozą to zamiast twojej formuły LEWY() napisz taką:

Kod: Zaznacz cały

=PODSTAW(LEWY(R3;4);".";",")
- liczba dziesiętna jest ze znakiem przecinka i niestety wyrzuca błąd ARG. Tak na marginesie te same formuły w excelu działają bez problemu.

Re: Błąd #ARG! przy funkcji JEŻELI

: śr lip 13, 2022 1:47 pm
autor: llukaszku
Rafkus pisze: śr lip 13, 2022 11:55 am Wynikiem funkcji LEWY jest tekst i OpenOffice nie dokonuje automatycznej konwersji tekstu na liczbę przecinkową (LibeOffice to potrafi).
W OO musiałbyś jeszcze zastosować funkcje WARTOŚĆ:

Kod: Zaznacz cały

=WARTOŚĆ(LEWY(R3;4))

Kod: Zaznacz cały

=WARTOŚĆ(LEWY(R3;4))
- to jest rozwiązaniem problemu :-) bardzo dziękuję za pomoc