Excel - vzorec nefunguje
Ahoj, mám vzorec
=KDYŽ(JE.ČISLO(SOUČIN.SKALÁRNÍ(IFERROR((MOD(SLOUPEC(E5:Q5)-4;6)=1)*(E5:Q5);0)));SVYHLEDAT(10;B3:B4;1);"")
ale nefunguje, protože je v buňce B5, tj. na stejném řádku. Když ho dám na jiný řádek funguje.
Jde to vyřešit jinak?
Děkuji
a čo tak napísať, čo by to malo robiť?
Takže =KDYŽ(JE.ČISLO(SOUČIN.SKALÁRNÍ(IFERROR((MOD(SLOUPEC(E5:Q5)-4;6)=1)*(E5:Q5);0)));SVYHLEDAT(10;B3:B4;1);"")
SVYHLEDAT vyhledá poslední hodnotu ve sloupci - funguje
SOUČIN.SKALALÁRNÍ - vyhledává zda je v daných buňkách hodnota, od sloupce E a pak každý šestý sloupec až po sloupec Q, pokud ano JE.ČÍSLO zjistí zda tam je číselná hodnota, PRAVDA - NEPRAVDA
a ten SOUČIN.SKALÁRNÍ NEFUNGUJE
Nepochopili sme sa.
Viem, čo robia jednotlivé funkcie, ale čo by to malo robiť ako komplet?
Mne to nedáva zmysel z viacerých dôvodov.
Napr čo iné ako číslo by mal byť výsledok SOUČIN.SKALÁRNÍ, keď aj prípad, keď nastane chyba, je nahradený funkciou IFERROR za nulu?
Za ďalšie SOUČIN.SKALÁRNÍ má len jeden argument, takže načo je dobrý namiesto SUM?
Za ďalšie, keďže nikdy iné, než číslo nevyjde, vždy bude výsledkom funkcia SVYHLEDAT.
Za ďalšie, čo chceš dosiahnuť funkciou SVYHLEDAT bez štvrtého argumentu? Približnú hodnotu?
Proste svojim dotazom som chcel spoznať praktický význam, čo chceš dosiahnuť, aby som vedel poradiť, lebo zrejme potrebuješ úplne iný multivzorec
Takže toto SOUČIN.SKALÁRNÍ(IFERROR((MOD(SLOUPEC(E5:Q5)-4;6)=1)*(E5:Q5);0)) mi zde jednou poradil Siki83 a funguje to. Jde o to že potřebuju sečíst každou x-tou buňku v řádku.
IFERROr tam je proto že mizi tím jsou i buňky s textem a chybu to nahradí nulou, to je v pořádku.
Pokud SOUŘIN.SKALÁRNÍ nahradím např. JE.ČÍSLO(E5) tak celý ten vzorec funguje bez problému. Ale co když bude číslo ne v E5, ale v Q5? Ano to jsou tři buňky E5, K5 a Q5, ale těch buněk tam bude min. 100 spíš více.
Takže jak jinak zjistit zda součet těch buněk je 0 nebo nějaké (lhostejno jaké) číslo? Vypisovat to do vzorce fakt nebudu.
V SVYHLEDAT je čtvrtý argument nepovinný.
Snad jsem na nic nezapomněl.
Problem je, ze cele to JE.ČISLO(SOUČIN.SKALÁRNÍ(IFERROR((MOD(SLOUPEC(E5:Q5)-4;6)=1)*(E5:Q5);0))) vzdycky vrati TRUE, cili je tam naprosto zbytecne a IF vzdy vyhodi vysledek SVYHLEDAT.
Níže v diskuzi mám upravený vzorec na SOUČIN.SKALÁRNÍ(IFERROR((MOD(SLOUPEC(E5:Q5)-4;6)=1)*(E5:Q5);0))<>0, a to mi vysledek SVYHLEDAT už nehází.
SVYHLEDAT ti ale nehleda posledni hodnotu ve sloupci. To ti hleda cislo 10 v poli B3:B4 a kdyz to najde desitku, vrati to hodnotu z prvniho sloupce daneho pole (vzhledem k tomu, ze pole je jeden sloupec, tak to vrati prave tu nalezenou 10). Nemas 4 parametr TRUE/FALSE, takze to prakticky hleda 10 nebo nizsi cislo, pokud neni v poli 10 a nizsi cislo, dostanes error. Navic vysledkem vzorce je vzdy to, co vyhodi SVYHLEDAT, to vse pred tim nedela prakticky nic (resp. je vzdy stejny vysledek a spusti to SVYHLEDAT).
Ano, čtvrtou hodnotu tam nemám, je nepovinná, a v tomhle případě to najde poslední hodnotu, používám to tak už hodně let a funguje mi to. Pokud to tak nemá fungovat, tak to Excel neví.
Kdyz ji nemas, Excel ma defaultne asi TRUE, a vysledek v tvem pripade je, ze ti vrati posledni hodnotu z daneho pole ktera je 10 ci mensi. Pokud tam neni zadna, dostanes error. Nevis ani k cemu ta funkce je a to jak ji pouzivas funguje jen za urcitych podminek.
Větší hodnota tam být nemůže to mám ošetřeno pomocí Ověřování dat. Já neříkám že tomu rozumím, já říkám že mi to funguje. A TRUE to má defaultně to je pravda. A když to má defaultně proč bych to tam měl psát, když i Mrkvosoft uvádí že to je nepovinné?
A podle mě, každá funkce něco dělá jen za určitých podmínek, ale možná to tak není, nejsem v Excelu expert, ale jen BFU.
A pokud tedy potřebuji poslední hodnotu, jakou funkci mám použít? Rád se nechám poučit, nevím všechno.
Pokud potrebujes posledni hodnotu z B3:B4, proc tam proste nedas primo jen B4? Celej ten tvuj vzorec vypada jako brutalni slatanina a ani nedokazes rict co by ten vzorec mel delat, co by z nej melo vylezt. Rekneme, ze B3=6, B4=7 a E5:Q15 bude vyplneno postupne cisly 1-13. Co by melo byt jako vysledek v B5 a proc?
Neanalyzujem jednotlivé odpovede, lebo v tom mám chaos...
Keď potrebuješ súčet čísel v každom n-tom stĺpci s ošetrením voči tomu, keď sa v niektorej bunke nachádza nečíselná hodnota, tak to ti splní tento vzorec:
=SUMA(KDYŽ(JE.ČISLO(E5:Q5);(E5:Q5);0)*(MOD(SLOUPEC(E5:Q5)-4;6)=1))
zadaný ako maticový (nahradzuje skalárny súčin). T.j. vzorec zadáš nielen stlačením ENTER, ale stlačením SHIFT+CTRL+ENTER
Parametre vo funkcii MOD určujú každý šiesty stĺpec počítajúc od piateho stĺpca (stĺpec E=1).
Čo ďalej? Aký účel tam má mať SVYHLEDAT?
To SVYHLEDAT tam ma pry proto, aby mu to vratilo posledni udaj v poli...
Stále neposkytuje dostatok informácií k tomu, aby človek vedel, čo vlastne chce.
Pak-u, kam ten vzorec napíšeš, tam Ti to vypočíta výsledok z tvojho poľa E5 až Q5 (môžeš rozšíriť na ľubovoľný počet stĺpcov)
Nejak netusim k cemu je tenhle krkolomny vzorec dobry, ale pokud nemas v B3 ani v B4 cislo tak to nemas nijak osetreno a hodi to error.
V B3 je vždy číslo. Ale ano, chyba tam byla. Takto to funguje, jen ne v ve stejném řádku v kterém se hledá.
=KDYŽ(A(JE.ČISLO(A5);SOUČIN.SKALÁRNÍ(IFERROR((MOD(SLOUPEC(E5:Q5)-4;6)=1)*(E5:Q5);0))<>0;POČET(E$3:E4)=POČET2(H$3:H4));SVYHLEDAT(9,99999999999999E+307;B$3:B4;1);"")
OMG, to je skoro to isté, len úplne iné...
Poradím: urob si to najprv čiastkovo, po stupňoch, aby si zistil, kde robíš chybu, až potom to skladaj. Stále mi to vychádza za nezmysel
Chyba je v tom, že ten vzorec v jiném řádku funguje jen ne v tom řádku číslo 5. Viz výše vzorec. A tam potřebuju aby to fungovalo.
Jo, pridat do vzorce nekonecno je genialni. Nejjednodussi bude napsat co potrebujes aby vzorec delal, popripade prihodit primo ukazku (klidne pres google sheets kterej je pro obycejne veci prakticky jako online excel)
ono je to totiž celé zbytočné, je to úplne to isté, akoby tam nič iné nebolo, len SVYHLEDAT, navyše upozorňujem na tri argumenty, čiže výsledok bude najbližšia hodnota
Když už sem tu byl zmíněn.
Předchozí tazatelův dotaz ZDE
Zda je to to samé co řeší nyní, nikdo neví.
Witaj chlape!
Tiež som si spomínal, ale nechcelo sa mi hľadať, aj tak nič ďalej nevieme
Hlavne, že to nie je Mati aj keď aj ten znova pokúša osud
Dobře, zkusím to znovu.
1. Jsem samouk a BFU.
2. Daný vzorec bude v buňce B5.
3. Potřebuju zjistit zda v buňkách E5, K5, Q5 je číslo nebo jsou prázdné. Myslel jsem že ty Buňky sečtu a použiju funkci JE.ČÍSLO. Ale pak jsem zjistil, že i když jsou buňky prázdné, vypadne z toho číslo 0. Proto jsem to pak porovnával s nulou <>0.
Myslel jsem že tato funkce která to zjišťuje bude jako podmínka u funkce KDYŽ.
Takže potřebuju zjistit zda v daných buňkách je číslo nebo ne. Není tam žádný vzorec.
Pak si to rozšířím podle potřeby.
4. Pokud podle bodu 3. zjistím, že tam není žádné číslo, popř. to sečte 0 tak podmínka u funkce KDYŽ bude Ne a do buňky B5 se zapíše "".
5. Pokud podle bodu 3. zjistím, že tam je jakékoliv číslo větší než 0 a rovno nebo menší než 10 tak pomocí funkce SVYHLEDAT najdu poslední hodnotu ve sloupci B a ta se zapíše do buňky B5.
Někdo tu psal ať to nezjišťuju a dám tam kopírovat buňku B4.
Já většinou každý den do jednoho řádku do buněk E5, K5, Q5 budu psát čísla. 1 řádek = 1 den. Ale některé dny tam nic psát nebudu. Předem nevím, které dny to budou. Jak pak zjistím jaká je poslední hodnota ve sloupci B?
Já na to používám funkci SVYHLEDAT, ale bylo mi tu vysvětleno že není k tomu určena. Také jsem dříve používal Funkce INDEX a POČET, nevý jestli jsou na to určeny.
6. Teď tu někdo napáše, aby sem nahrál tabulku. Ano to mohu. Ale jediné to v té tabulce bude je vzorec:
=KDYŽ(A(JE.ČISLO(A5);SUMA(KDYŽ(JE.ČISLO(E5:Q5);(E5:Q5);0)*(MOD(SLOUPEC(E5:Q5)-4;6)=1))<>0;POČET(E$3:E4)=POČET2(H$3:H4));SVYHLEDAT(9,99999999999999E+307;B$3:B4;1);"")
popřípadě
=KDYŽ(A(JE.ČISLO(A5);SUMA(KDYŽ(JE.ČISLO(E5:Q5);(E5:Q5);0)*(MOD(SLOUPEC(E5:Q5)-4;6)=1))<>0;POČET(E$3:E4)=POČET2(H$3:H4));SVYHLEDAT(9,99999999999999E+307;B$3:B4;1);"")
v buňce B5.
7. Ano, máte pravdu, zapomněl jsem sem napsat že mi to hází chybu ...sešit obsahuje cyklický odkaz...
Myslel jsem že bude stačit napsat co jsem napsal do dotazu tj.
ale nefunguje, protože je v buňce B5, tj. na stejném řádku. Když ho dám na jiný řádek funguje.
Myslel jsem že to bude jasné.
8. Čekám odpověď, tohle nebudu číst, ale kratším slohem to popsat neumím.
9. Snad jsem to popsal dost podrobně. Pokud to bude stále málo informací, už nevím co bych k tomu napsal.
3. Musi byt v kazde bunce (E5,K5,Q5) cislo aby byla podminka splnena, nebo je podminka splnena pokud je alespon v jedne bunce cislo?
Podmínka je splněna pokud alespoň v jedné buňce je číslo.
Rozumiem tomu dobre, že stačí, ak v jednej z x-tých buniek rozsahu E÷Q bude číslo od 0 do 10 a v tom prípade bude v bunke B aktuálneho riadka zapísané najbližšie vyššie uvedené číslo v stĺpci B (pričom ono číslo udáva číslo predchádzajúceho riadka, v ktorom bola splnená podmienka pre ono predchodzie pole E÷Q?)
Pokiaľ platí moja predošlá odpoveď, tak tu máš výsledok (ktorý naplníš ako CSE do bunky B2 a potiahneš toľko nadol, koľko potrebuješ):
=IF(OR(IF(ISNUMBER(E2:Q2)*((E2:Q2)>0)*((E2:Q2)<10);1;0)*(MOD(COLUMN(E2:Q2)-4;6)=1));MAX(ROW($B$1:INDIRECT("B"&ROW()-1))*(($B$1:INDIRECT("B"&ROW()-1))<>""));"")
Čo to robí?:
Ak aspoň v jednej z x-tých buniek v rozsahu stĺpcov E až Q aktuálneho riadka je číslo, ktoré je v intervale (0;10), tak výsledkom v bunke B aktuálneho riadka bude číslo riadka, v ktorom je toto všetko splnené pre predošlý prípad
V prílohe máš ukážku. Toľko by si mohol dokázať, aby si aspoň natvrdo dokázal takto demonštrovať požiadavku...
Inak, je dosť drsné napísať, že si to po sebe ani nebudeš čítať, či je to zrozumiteľné. To Ti naša práca na rade pre Teba ani nestojí za to, skontrolovať po sebe zrozumiteľnosť a presnosť textu?
Ak by sa Ti nechcelo ani prekladať funkcie, tak aj to Ti posielam:
Anglická verzia:
=IF(OR(IF(ISNUMBER(E2:Q2)*((E2:Q2)>0)*((E2:Q2)<10);1;0)*(MOD(COLUMN(E2:Q2)-4;6)=1));MAX(ROW($B$1:INDIRECT("B"&ROW()-1))*(($B$1:INDIRECT("B"&ROW()-1))<>""));"")
Česká verzia
=KDYŽ(NEBO(KDYŽ(JE.ČISLO(E2:Q2)*((E2:Q2)>0)*((E2:Q2)<10);1;0)*(MOD(SLOUPEC(E2:Q2)-4;6)=1));MAX(ŘÁDEK($B$1:NEPŘÍMÝ.ODKAZ("B"&ŘÁDEK()-1))*(($B$1:NEPŘÍMÝ.ODKAZ("B"&ŘÁDEK()-1))<>""));"")
A to som pozrel po sebe ešte i druhýkrát... aj keď... zaslaný príklad to preloží automaticky...
Opakujem: zadať ako maticový vzorec!
Díky, funguje to skvěle.
Dík hlavně za trpělivost.
Značím vyřešeno.
robert13 napsal: Inak, je dosť drsné napísať, že si to po sebe ani nebudeš čítať, či je to zrozumiteľné. To Ti naša práca na rade pre Teba ani nestojí za to, skontrolovať po sebe zrozumiteľnosť a presnosť textu?
8. Čekám odpověď, tohle nebudu číst, ale kratším slohem to popsat neumím.
To jsme se nepochopily, já to myslel tak, že mi někdo napíše, že ten můj sloh někdo číst nebude a napíše mi že to je moc dlouhý a číst to nebude. Pokud to bylo pochopeno jinak tak se omlouvám.
Jinak děkuji jdu to vyzkoušet.
To sme sa naozaj nepochopili, takže beriem späť...
Odvolávám, co jsem odvolal a slibuji co jsem slíbil...
Naozaj neviem, či si chcel mať v stĺpci B to, čo som tam dal, alebo tam má byť nejaký výsledok vyplývajúci z poľa E÷Q z posledného vyššieho riadka, spĺňajúceho kritériá...
Ale myslím, že už sme aspoň bližšie...
Súhlasím s Dwaynem, nepíšeš, či sa vyhodnocuje, či sú všetky x-té bunky v poli E÷Q riadka prázdne alebo stačí, pokiaľ je jedna prázdna.
Potom v bode 5 píšeš, že je tam akékoľvek číslo... kde? V súčte? Alebo v tých x-tých bunkách riadka? Má byť súčet medzi 0 a 10 alebo tie jednotlivé bunky? Všetky x-té v riadku?
Ako nájdeš riadok najbližšie vyššie vyplnenej bunky v stĺpci B?:
Pokiaľ sa nechceš zacykliť, nemôžeš do vzorca zahrnúť rozsah, v ktorom sa nachádza bunka, v ktorej má byť výsledok. Preto vymyslíš vyhodnocovanie, ktoré bude dynamicky poskytovať rozsah len po predošlý riadok.
Do bunky B2 napíš vzorec:
=IF(AND(D2>0;D2<10);MAX(ROW($B$1:INDIRECT("B"&ROW()-1))*(($B$1:INDIRECT("B"&ROW()-1))<>""));"")
Zadaj ho ako CSE (Ctrl+Shift+Enter, t.j. maticový vzorec) a potiahni nadol.
Tento vzorec vyhodnocuje, či je v bunke D2 hodnota v intervale (0;10) a keď áno, v bunke stĺpca B bude uvedené číslo najbližšieho vyššieho riadka v stĺpci B, v ktorom bola splnená podmienka, že v bunke D toho riadka bude číslo v intervale (0;10).
Bunku D som zaviedol ako pomocnú, kvôli tomu, že stále nevieme vyhodnotenie poľa E÷Q. Pokiaľ budeme vedieť, ako vyhodnotiť pole E÷Q, tak týmto vyhodnotením sa nahradí odkaz na bunku D vo vzorci