Proszę o pomoc w sprawdzeniu składni formuły...

Użytkowanie arkusza kalkulacyjnego
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

Witajcie.

Mam dość duży problem. Moja macierzysta firma zaimplementowała nowy formularz zamówienia, oczywiście zrobiony w excelu... W dodatku był zablokowany i nie można było podejrzeć formuł. Ale ubłagałem, żeby specjalnie dla mnie odblokowali ten plik. I mam rozblokowany. Z przyczyn oczywistych nie mogę pokazać całego (zabiliby mnie chyba :P)

Kod: Zaznacz cały

=iferror(iferror(iferror(iferror(iferror(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0);WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$'Cennik JGA'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$' Cennik SCAN'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$'Cennik JOTUL'.B$1:C$1048576;2;0));"")
to kuriozum zgłasza błąd #N/D

Myślałem, że wystarczy zmienić iferror na CZY.BŁĄD:

Kod: Zaznacz cały

=CZY.BŁĄD(CZY.BŁĄD(CZY.BŁĄD(CZY.BŁĄD(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0);WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$'Cennik JGA'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$' Cennik SCAN'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$'Cennik JOTUL'.B$1:C$1048576;2;0));"")
Ale nie. Zgłasza błąd 508.

TO może jeszcze co ta formuła powinna robić (i co robi w excelu bezbłędnie i działa nawet w excelu online).

W B16 wpisuje się kod produktu. I wtedy formuła ma znaleźć dany produkt w jednym z podarkuszy. Jak nie znajdzie w jednym to przechodzi do następnego itd. Jak nie znajdzie w ogóle to zwraca wartość zerową.

Proszę o pomoc. Będę zobowiązany bardzo. Myślę że tu gdzieś problem w różnicy składni między exelem a OOO Calc... ale tego drugiego nie znam jeszcze tak dobrze.

Pozdrawiam

Dawid
LO: 5.0.2.2 (x64), Windows 10 Pro.
j59
Posty: 8
Rejestracja: pt lut 19, 2010 6:17 pm

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: j59 »

spróbuj JEŻELI.BŁĄD
LibreOffice 5.0 na Windows 8.1
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

Ja szukałem właśnie takiej funkcji ale znalazłem tylko CZY.BŁĄD
LO: 5.0.2.2 (x64), Windows 10 Pro.
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

Jeszcze post scriptum do mojego posta.

Okazuje się że ta formuła orygnialnie wyglądała inaczej.

Kod: Zaznacz cały

=_xlfn.IFERROR(_xlfn.IFERROR(_xlfn.IFERROR(_xlfn.IFERROR(_xlfn.IFERROR(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;FAŁSZ());WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;FAŁSZ()));WYSZUKAJ.PIONOWO(B16;$'Cennik JGA'.B$1:C$1048576;2;FAŁSZ()));WYSZUKAJ.PIONOWO(B16;$' Cennik SCAN'.B$1:C$1048576;2;FAŁSZ()));WYSZUKAJ.PIONOWO(B16;$'Cennik JOTUL'.B$1:C$1048576;2;FAŁSZ()));"")
W pierwszym poście wklejałem z OneDrive - już pewnie ten excel online ją zmodyfikował. Ale to nie zmienia faktu że działała w excelu online.

ta formuła to już zupełnie magicznie dla mnie wygląda...
LO: 5.0.2.2 (x64), Windows 10 Pro.
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

Spróbowałem zamienić każde CZY.BŁĄD na JEŻELI(CZY.BŁĄD) pilnując nawiasów żeby się zgadzały z oryginałami.

Kod: Zaznacz cały

=JEŻELI(CZY.BŁĄD(JEŻELI(CZY.BŁĄD(JEŻELI(CZY.BŁĄD(JEŻELI(CZY.BŁĄD(JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0);WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;0)));WYSZUKAJ.PIONOWO(B16;$'Cennik JGA'.B$1:C$1048576;2;0)));WYSZUKAJ.PIONOWO(B16;$' Cennik SCAN'.B$1:C$1048576;2;0)));WYSZUKAJ.PIONOWO(B16;$'Cennik JOTUL'.B$1:C$1048576;2;0)));""))
i znów błąd 508
LO: 5.0.2.2 (x64), Windows 10 Pro.
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Jan_J »

Tak to jest. Arkusze kalkulacyjne są lekkie, łatwe i przyjemne. Zakładamy firmę, robimy katalog. Potem oferta się rozrasta, więc rozbudowujemy ad hoc bazę, a z konieczności modyfikujemy formuły. Potem już trudno ogarnąć, ale działa.

W bazie danych nie byłoby iteracji po arkuszach, tylko filtrowanie tabeli. Zresztą nawet, gdyby używać iteracji zamiast wgłębnych wywołań, kod byłby prostszy, a obsługa łatwiejsza. No, ale takie konstrukcje w formułach nie są przewidziane.

Próbuj metodą małych kroków. Sprawdź towar, który leży w I arkuszu. Jeśli wtedy formuła działa, obuduj ją funkcją na okoliczność błędu. Potem w obsłudze błędu wpisz analogiczną funkcję przeszukującą w drugim arkuszu. Itd.

Funkcje _xlfn.... są częścią LibreOffice. Są używane przy otwieraniu arkuszy excelowych, żeby zapobiec niezgodnościom składni funkcji noszących takie same nazwy.
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

A możesz na przykładzie tego mojego kodu dać taki pierwszy mały krok? propozycję? Żebym na czymś się oparł?
LO: 5.0.2.2 (x64), Windows 10 Pro.
Jan_J
Posty: 4583
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Jan_J »

Oczywiście.

Kod: Zaznacz cały

=IFERROR(IFERROR(IFERROR(IFERROR(IFERROR(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;FAŁSZ());WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;FAŁSZ()));WYSZUKAJ.PIONOWO(B16;$'Cennik JGA'.B$1:C$1048576;2;FAŁSZ()));WYSZUKAJ.PIONOWO(B16;$' Cennik SCAN'.B$1:C$1048576;2;FAŁSZ()));WYSZUKAJ.PIONOWO(B16;$'Cennik JOTUL'.B$1:C$1048576;2;FAŁSZ()));"")
Zacznij od uproszczeń. Zamiast funkcji FAŁSZ() wstaw stałą logiczną FAŁSZ albo stałą liczbową 0 (tak naprawdę arkusz nie ma wbudowanego typu logicznego).
Potem weź

Kod: Zaznacz cały

=WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0)
Ma dawać dobre wyniki dla wszystkiego, co leży w katalogu "Cennik Marketing" i błędy dla wszystkich innych wartości. Sprawdź, czy tak jest.
Formuła

Kod: Zaznacz cały

=IFERROR(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0); "kuku")
ma dawać dobry wynik dla wszystkiego, co jest w katalogu, i słowo "kuku" jeśli nie jest.
Dalej rozbuduj frazę do

Kod: Zaznacz cały

=IFERROR(
    WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0);
    WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;0))
Ma dawać dobre wyniki dla "Cennik Marketing", a w przeciwnym razie szukać w "Cennik ATRA". Dopiero jeśli tam nie znajdzie, generuje błąd. Teraz ponawiamy zabieg z obsługą błędu

Kod: Zaznacz cały

=IFERROR(IFERROR(
    WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0);
    WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;0)); "kuku")
Itd.

IFERROR -> CZY.BŁĄD (chyba..., mam pod ręką tylko wydanie anglojęzyczne).
JJ
LO (24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

Udało mi się rozwiązać tą formułę...

Dla zainteresowanych. Nie ma odpowiednika iferror. Albo na 100% nie jest to funkcja CZY.BŁĄD. Zrobiłem to przez połączenie dwóch funkcji: JEŻELI i CZY.BŁĄD.

Daję oryginalną formułę dla przypomnienia:

Kod: Zaznacz cały

=iferror(iferror(iferror(iferror(iferror(WYSZUKAJ.PIONOWO(B16;$'Cennik Marketing'.A$1:B$1048576;2;0);WYSZUKAJ.PIONOWO(B16;$'Cennik ATRA'.A$1:B$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$'Cennik JGA'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$' Cennik SCAN'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B16;$'Cennik JOTUL'.B$1:C$1048576;2;0));"")
Oraz działający odpowiednik w OOO:

Kod: Zaznacz cały

=JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B19;$'Cennik Marketing'.A$1:B$1048576;2;0));JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B19;$'Cennik ATRA'.A$1:B$1048576;2;0));JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B19;$'Cennik JGA'.B$1:C$1048576;2;0));JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B19;$' Cennik SCAN'.B$1:C$1048576;2;0));JEŻELI(CZY.BŁĄD(WYSZUKAJ.PIONOWO(B19;$'Cennik JOTUL'.B$1:C$1048576;2;0));"NIC";WYSZUKAJ.PIONOWO(B19;$'Cennik JOTUL'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B19;$' Cennik SCAN'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B19;$'Cennik JGA'.B$1:C$1048576;2;0));WYSZUKAJ.PIONOWO(B19;$'Cennik ATRA'.A$1:B$1048576;2;0));WYSZUKAJ.PIONOWO(B19;$'Cennik Marketing'.A$1:B$1048576;2;0))

Jeśli ktoś z was znajdzie w OOO "dokładny" odpowienik IFERROR to ozłocę :)

Swoją drogą wydaje się to niemożliwe, żeby w OOO nie było tej funkcji.... Najlogiczniejsze by było JEŻELI.BŁĄD ale nie ma takiej funkcji....
LO: 5.0.2.2 (x64), Windows 10 Pro.
Awatar użytkownika
Horpah
Posty: 7
Rejestracja: wt wrz 29, 2015 4:25 pm
Lokalizacja: Opole
Kontakt:

Re: Proszę o pomoc w sprawdzeniu składni formuły...

Post autor: Horpah »

TEMAT DO ZAMKNIĘCIA.....

Wystarczyło zmienić z OpenOffice na LibreOffice i wszystko zaczęło działać... OOO nie ma funkcji IFERROR - LO go ma i sprawnie działa.

Szkoda tylko że straciłem na to kilka godzin....

Dzięki wszystkim za pomoc :)
LO: 5.0.2.2 (x64), Windows 10 Pro.
ODPOWIEDZ