< návrat zpět

MS Excel


Téma: SUMIF a "{}" OR podminka generovana fu rss

Zaslal/a 27.5.2019 3:29

Dobry den,

V priloze je excel, kde pomoci SUM(SUMIF()) scitam cisla ve sloupci C (C6:C13) v zavislosti na hodnotach ve sloupci B (B6:B13) = pricti, pokud je bunka ve sloupci B rovna nektere z preddefinovanych hodnot (B2:B4).

V bunce F3 je vzorec "=SUM(SUMIF($B$6:$B$13, {"AAA","BBB","CCC"}, $C$6:$C$13))", ktery funguje spravne, ale rad bych tu OR podminku "{"AAA","BBB","CCC"}" nahradil funkci, ktera by byla generovana ze zadaneho rozsahu bunek s jednotlivymi podminkami (tedy B2:B4).

Kdyz si dany text "{"AAA","BBB","CCC"}" vygeneruji z bunek B2:B4 pomoci funkce "=CONCATENATE("{",CHAR(34),TEXTJOIN(""",""",TRUE,$B$2:$B$4), CHAR(34), "}")" tak jak tuto funkci mohu pridat k funkci SUM(SUMIF() tak, aby to fungovalo?

Monentalne to mam v bunce F6, ale nefunguje.

Dekuji za odpoved a vysvetleni.

Příloha: xlsx43420_test.xlsx (10kB, staženo 21x)
Zaslat odpověď >

#043421
elninoslov
Skúste to viac objasniť. Ja som vôbec nepochopil, prečo chcete prevádzať oblasť s podmienkami pre súčet, na reťazec napodobujúci reťazec vzorca. To tak nefunguje. Ak máte nejaký text v jednej bunke, a chcete zrátať iba hodnoty v bunkách C, pri ktorých v B je časť daného textu (iba časť!), tak maticový vzorec a FIND/NAJÍT. Ale to by ste musel popisovať Vašu situáciu presne opačne ako ju popisujete. Takto to nedáva zmysel.
Maticový vzorec bez zmyslu (Ctrl+Shift+Enter):
=SUM(IF(NOT(ISERROR(FIND(CHAR(34)&B6:B13&CHAR(34);CHAR(34)&TEXTJOIN(CHAR(34);TRUE;B2:B4)&CHAR(34))));C6:C13))

=SUMA(KDYŽ(NE(JE.CHYBHODN(NAJÍT(ZNAK(34)&B6:B13&ZNAK(34);ZNAK(34)&TEXTJOIN(ZNAK(34);PRAVDA;B2:B4)&ZNAK(34))));C6:C13))
citovat
#043425
avatar
Dobry den,

pro vysvetleni zjednoduseny priklad:

Mam dva listy.

V jednom (List1) jsou definovany skupiny a jejich clenove: napr. jednotlive domy a jejich najemnici:

Dum 1:
Novak (A3)
Svoboda (A4)
Dvorak (A5)

Dum 2:
Pokorny (A7)
Kavan (A8)
Pavlicek (A9)

Ve druhem listu (List2) je velky datovy seznam o nekolika sloupcich: napr. datum, jmeno, rodne cislo, telefon, obdrzena platba, atd.

A v novem liste chci udelat statistiky plateb od jednotlivych obyvatel dle domu.

Tedy bych chtel:

Dum 1: Suma vsech plateb od Novak, Svoboda, Dvorak.

Az potud by to bylo jednoduche, protoze by stacilo dat: =SUM(SUMIF(List2!$B$6:$B$13, List1!$A$3:$A$5, List2!$C$6:$C$13))
Kde List2!B jsou jmena a List2!C platby a List1!A3:A5 je preddefinovany seznam najemniku domu 1. Pokud tohle zadam jako maticovy vzorec (CTRL+SHIFT+ENTER), tak to funguje dobre.

Stejne by bez maticoveho vzorce fungovalo =SUM(SUMIF(List2!$B$6:$B$13, {"Novak", "Svoboda", "Dvorak"}, List2!$C$6:$C$13)). Toto reseni bych preferoval, tedy bez maticove funkce s vypisem jednotlivych podminek pro scitani.

Problem nastava, ze v nekolika pripadech, napr. u Domu 3 z nejakeho duvodu potrebuji pripocitat poplatky od nekoho, kdo uz v listu A neni, byl ze seznamu odstranen, treba "Novotny".

Tedy neco ve smyslu: =SUM(SUMIF(List2!$B$6:$B$13, List1!$A$3:$A$5 + "Novotny", List2!$C$6:$C$13)), abych v temer vsech pripadech pouzil scitani dle definovanych obyvatel pro jednotlive domy v Listu 1, ale v par vyjimkach pridal jmeno, ktere tam uz neni.

Rikal jsem si, ze pokud by bylo soucasti vzorce {"Novak", "Svoboda", "Dvorak", "Novotny"}, tak by to fungovalo spravne, a tedy jsem se snazil vygenerovat dany textovy retezec pomoci funkce,

=CONCATENATE("{",CHAR(34),TEXTJOIN(""",""",TRUE,List1!$A$3:$A$5), CHAR(34), ",", """Novotny""", "}")

ktera mi da pozadovany retezec, tedy '{"Novak", "Svoboda", "Dvorak", "Novotny"}' s tim, ze pouziji definovany seznam najemniku v Listu 1 a pouze na konci pridam potrebne jmeno.

Pokud by tato funkce sla nejak vlozit do vzorce

=SUM(SUMIF(List2!$B$6:$B$13, {"Novak", "Svoboda", "Dvorak", "Novotny"}, List2!$C$6:$C$13))

a nahradit samotny vycet tedy cast "{ ... }", bylo by to presne to, co potrebuji.

Neco ve smyslu:
=SUM(SUMIF(List2!$B$6:$B$13, CONCATENATE("{",CHAR(34),TEXTJOIN(""",""",TRUE,List1!$A$3:$A$5), CHAR(34), ",", """Novotny""", "}"), List2!$C$6:$C$13))

Jen tu generovanou cast nahrazujici seznam v "{ ... }" mi to nebere. To je to oc mi jde, jak nahradit tu cast vzorce textovym vyctem generovanym jinym vzorcem.

Snad uz je to pochopitelnejsi.

Dekuji za odpoved.citovat
#043426
elninoslov
Takto ako by ste to chcel, funkcie v Exceli nefungujú. Nemôžete si poskladať reťazec parametrov, a ten reťazec vložiť ako počítanú hodnotu do vzorca, nech si ho preberie. On potrebuje už samotné parametre, nie reťazec parametrov.

Každopádne, ak by ste nepotreboval to pridané meno, tak by ste mohol použiť Kontingenčnú tabuľku, ktorá je presne na to určená.

Ale keďže požadujete pridať občas nejaké meno, tak proste použite vzorec, ktorý máte na spočítanie podľa obyvateľov domu, ten Vám funguje, a pripočítajte k nemu ešte raz rovnaký vzorec, ale parameter bude to pridané meno. Ale to je stále maticové.

Ďalej je možné tento vzorec (2 vzorce medzi ktorými je "+") vložiť do Definovaného názvu. A potom do listu vkladáte už nematicový Definovaný názov. A basta.

ALE! Prečo teda nemáte v tých dátach jasne identifikovaný Dom. Ak by ste tam mali Dum1, Dum2,... Tak zrátate dom, a je šumák, či tam teda býva (je v zozname), ale tam býval (nieje v zozname).citovat
#043427
avatar
Obecne by slo asi i dotaz formulovat, zda-li existuje nejaka moznost, jak nahradit libovolny parametr kterekoliv funkce textem umistenym v jine bunce.

S INDIRECT to nefunguje.
Příloha: jpg43427_test2.jpg (44kB, staženo 32x)
43427_test2.jpg
citovat
#043428
avatar
a co takto?
https://www.itlektor.cz/microsoft-excel/prevod-textu-na-vzorec-v-excelu-funkci-evaluate/citovat
#043433
avatar
=SUMA(SUMIF($B$6:$B$13; E6:E13; $C$6:$C$13))

V oblasti E6:E13 si vyplňte písmenka.
Vzorec uložte maticově (CSE).

Totéž bez matice:
=SOUČIN.SKALÁRNÍ(SUMIF($B$6:$B$13; E6:E13; $C$6:$C$13))

Tj. výčet se definuje operátorem ":"

Všimněte si, že oblast nemusí být vyplněná.
Pokud potřebujete proměnnou oblast, tak si ji spočtěte vzorcem nebo prostě pro tato data vytvořte tabulku a odkazujte se na sloupec tabulky.

Protože toto řešení uvádíte, nechápu o jaký problém jde. Pokud to chápu potřebujete na volné místo seznamu nebo dynamicky do tabulky připsat dočasně další jméno?citovat
#043434
avatar
Dekuji za odpoved.

Jde mi o to, ze chci pouzit vzorec, kde E6:E13 bude predem definovany seznam, plus k tomu potrebuji pridat jeden extra zaznam (napr. AAA), ale nechci jej pridavat do toho seznamu ve sloupci E. Tedy neco ve smyslu

=SUMA(SUMIF($B$6:$B$13, {$E$6:$E$13, "AAA"}, $C$6:$C$13))citovat
#043438
avatar
Sice nechápu smysl, ala maticově to jde takto:

=SUMA(SUMIF($B$6:$B$13; ZVOLIT({1\2};$E$9:$E$11;$G$9:$G$10); $C$6:$C$13))

V $E$9:$E$11 je první seznam, v $G$9:$G$10 druhý.

Případně

=SUMA(SUMIF($B$6:$B$13; $E$9:$F$11; $C$6:$C$13))
Ve sloupci E je původní seznam, ve sloupci F doplňující.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje