Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Poradíte lepší řešení probému v Excelu?

Se spoustou věcí už si dokážu poradit, ale tohle se mi zatím nedaří...
Neznáte nějakou (pro mě zatím neznámou) funkci nebo fintu, jak nemuset psát tolik funkcí KDYŽ, kolik je položek v seznamu? Navíc se občas počet položek může změnit, chtělo by to tedy nějaké obecnější řešení (ale pokud možno ne makrem).
Více viz ukázka v příloze, jedná se o sloupeček "Seznam položek 5"...

Řešení:

Předmět Autor Datum
Funkce UNIQUE() https://office.lasakovi.com/excel/funkce-nove/UNIQUE-funkce-unikatni-data-v-Excel/
Jan Fiala 08.04.2022 04:45
Jan Fiala
Ahoj, díky za radu, ale buď jsem tuto funkci nepochopil, nebo ji neumím využít, ale pro sichr jsem z…
JoDiK 08.04.2022 07:20
JoDiK
Tohle už je spíš na VBA a trošku programování. Tady máš upravený vzorec, který vychází z jedné buňk…
Jan Fiala 08.04.2022 08:56
Jan Fiala
Páčilo by sa Ti viac napr toto: ? do bunky S3 (a do ostatných skopírovať): =SUBSTITUTE(TRIM(INDEX(…
robert13 08.04.2022 11:15
robert13
Děkuji, taky zajímavé řešení, asi to bez makra jednodušeji opravdu nepůjde...
JoDiK 08.04.2022 13:29
JoDiK
Půjde pomocí maticového vzorce.
Siki83 08.04.2022 13:35
Siki83
Witaj Siki! Už som čakal na Teba a Tvoje maticové riešenie ;-) Ja som na to tiež chcel ísť s maticam…
robert13 08.04.2022 14:01
robert13
Ahoj, jakou máš verzi Excelu? Funkce TEXTJOIN by měla být dostupná od verze 2016.
Siki83 08.04.2022 14:13
Siki83
Mám 2016... Tak to bude asi od vyššej... Alebo... nemáš to nejaký externý doplnok?
robert13 08.04.2022 14:17
robert13
Ne ne, Excel 2019 bez doplňků.
Siki83 08.04.2022 20:11
Siki83
Jo... V mojej 2016 to nie je podporované (pred funkciou mi aj vypíše "_xlfn")... poslední
robert13 08.04.2022 20:37
robert13
Děkuji, tak nějak jsem si to představoval. Teď už jen pochopit ty podivné maticové vzorce, abych to…
JoDiK 08.04.2022 14:09
JoDiK
Matice bych si nechal do Matlabu, jen jsem neměl tu odvahu to tu navrhnout (matlab nepatří k běžnému…
ml1 08.04.2022 17:34
ml1
Tie funkcie nakoniec nie sú kratšie a jednoduchšie, než Tvoje niekoľkonásobné KDYŽ... A makro? Probl…
robert13 08.04.2022 14:04
robert13
No nakonec jsem to přecejen zkusil s tím makrem a vlastní funkcí: Function PREDMETY5(kde) p5 = "" F…
JoDiK 08.04.2022 14:12
JoDiK
Aha, vidíš, dobrý nápad... výsledok funkcie nespôsobuje prepočet :beer:
robert13 08.04.2022 14:16
robert13

Ahoj, díky za radu, ale buď jsem tuto funkci nepochopil, nebo ji neumím využít, ale pro sichr jsem zkusil všechny čtyři kombinace těch druhých dvou parametrů, ale moje zadání to nevyřešilo...
Potřebuji vypsat jen ty kódy, pod kterými se nachází číslo 5.
UNIQUE, jak jsem to já pochopil, vypisuje buď dvojice, které se vyskytují právě jenom jednou, případně se vyhodí zdvojené hodnoty. Ani jedna varianta ale neřeší moje zadání.

Tohle už je spíš na VBA a trošku programování.

Tady máš upravený vzorec, který vychází z jedné buňky a vše ostatní si "dopočítává". Šlo by jej jednoduše volat v cyklu 9x a poskládat výsledek.

=KDYŽ(POSUN(B3;0;0)=POSUN($L$1; 0; 0);POSUN(B3;-1;0)&", ";"")
&KDYŽ(POSUN(B3;0;1)=POSUN($L$1; 0; 0);POSUN(B3;-1;1)&", ";"")
&KDYŽ(POSUN(B3;0;2)=POSUN($L$1; 0; 0);POSUN(B3;-1;2)&", ";"")
&KDYŽ(POSUN(B3;0;3)=POSUN($L$1; 0; 0);POSUN(B3;-1;3)&", ";"")
&KDYŽ(POSUN(B3;0;4)=POSUN($L$1; 0; 0);POSUN(B3;-1;4)&", ";"")
&KDYŽ(POSUN(B3;0;5)=POSUN($L$1; 0; 0);POSUN(B3;-1;5)&", ";"")
&KDYŽ(POSUN(B3;0;6)=POSUN($L$1; 0; 0);POSUN(B3;-1;6)&", ";"")
&KDYŽ(POSUN(B3;0;7)=POSUN($L$1; 0; 0);POSUN(B3;-1;7)&", ";"")
&KDYŽ(POSUN(B3;0;8)=POSUN($L$1; 0; 0);POSUN(B3;-1;8)&", ";"")
&KDYŽ(POSUN(B3;0;9)=POSUN($L$1; 0; 0);POSUN(B3;-1;9)&", ";"")

Přidáním dalšího sloupce jen přidáš další řádek a zvedneš 9 na 10
Pokud chceš přidat sloupec, kde vypisujes počet pro 4, 3 atd. tak zase jen inkrementuješ sloupec v druhém výskytu POSUN(). Viz příloha. Tohle je připravené pro použití ve VBA, kde do argumentu POSUN() dáváš proměnnou cyklu.
Takže cyklus na Sloupce Počet 5 .. Počet 1 a v něm vnořený cyklus na projítí 9 sloupců.

Je to složitější než tvůj zápis, ale jednodušší na údržbu - máš pouze jeden vzorec.
Místo druhého posun by šel použít zápis adresy: L$1 (nechat absolutní pouze řádek). Pak bys mohl jednoduše vzorce kopírovat do sloupce pro hodnoty Počet 4 .. Počet 1, pokud trváš na vzorcích

=KDYŽ(POSUN(B3;0;0)=L$1;POSUN(B3;-1;0)&", ";"")
&KDYŽ(POSUN(B3;0;1)=L$1;POSUN(B3;-1;1)&", ";"")
&KDYŽ(POSUN(B3;0;2)=L$1;POSUN(B3;-1;2)&", ";"")
&KDYŽ(POSUN(B3;0;3)=L$1;POSUN(B3;-1;3)&", ";"")
&KDYŽ(POSUN(B3;0;4)=L$1;POSUN(B3;-1;4)&", ";"")
&KDYŽ(POSUN(B3;0;5)=L$1;POSUN(B3;-1;5)&", ";"")
&KDYŽ(POSUN(B3;0;6)=L$1;POSUN(B3;-1;6)&", ";"")
&KDYŽ(POSUN(B3;0;7)=L$1;POSUN(B3;-1;7)&", ";"")
&KDYŽ(POSUN(B3;0;8)=L$1;POSUN(B3;-1;8)&", ";"")
&KDYŽ(POSUN(B3;0;9)=L$1;POSUN(B3;-1;9)&", ";"")

Není to automat, ale při změně struktury stačí upravit jeden vzorec a vzorce jednoduše rozkopírovat

Páčilo by sa Ti viac napr toto: ?

do bunky S3 (a do ostatných skopírovať):

=SUBSTITUTE(TRIM(INDEX(B1:B2;(B3=L$1)+1;) & " " & INDEX(C1:C2;(C3=L$1)+1;) & " " & INDEX(D1:D2;(D3=L$1)+1;) & " " & INDEX(E1:E2;(E3=L$1)+1;) & " " & INDEX(F1:F2;(F3=L$1)+1;) & " " & INDEX(G1:G2;(G3=L$1)+1;) & " " & INDEX(H1:H2;(H3=L$1)+1;) & " " & INDEX(I1:I2;(I3=L$1)+1;) & " " & INDEX(J1:J2;(J3=L$1)+1;));" ";", ")

v českej verzii:

=DOSADIT(PROČISTIT(INDEX(B1:B2;(B3=L$1)+1;) & " " & INDEX(C1:C2;(C3=L$1)+1;) & " " & INDEX(D1:D2;(D3=L$1)+1;) & " " & INDEX(E1:E2;(E3=L$1)+1;) & " " & INDEX(F1:F2;(F3=L$1)+1;) & " " & INDEX(G1:G2;(G3=L$1)+1;) & " " & INDEX(H1:H2;(H3=L$1)+1;) & " " & INDEX(I1:I2;(I3=L$1)+1;) & " " & INDEX(J1:J2;(J3=L$1)+1;));" ";", ")

:-D

Matice bych si nechal do Matlabu, jen jsem neměl tu odvahu to tu navrhnout (matlab nepatří k běžnému vybavení domácího počítače)


cisla=randi(5,1,10)
popisky={'KC'	'KY'	'R'	'C'	'L'	'IGT'	'CMOS'	'FET'	'SD' 'X9' 'X10'}
ind=find(cisla==5)
popisky(ind)

bylo by programátorsky čistčí použít strukturu, ale dva vektory jeden s čísly a jeden s popisky je jednodušší. Funkce find vrátí indexy položek, které se dají přímo použít k indexování. Počet by potom byl numel(ind). A dá se s tím dělat spousta dalších věcí. A je úplně jedno, jestli je těch položek 10 nebo milion. A přitom je to rychlé i pro 10 milionů prvků, což je množství, které excel ani nenačte.

Tie funkcie nakoniec nie sú kratšie a jednoduchšie, než Tvoje niekoľkonásobné KDYŽ...
A makro? Problémom by bolo, že každým zápisom výsledku, získaného makrom, by sa hárok prepočítaval.
Musel by si generovať nový Random obsah manuálne, inak by sa ti zápisom výsledku makra vygenerovali nové vstupy a vyhodnotenie by sa vzťahovalo k predošlej variácii...

No nakonec jsem to přecejen zkusil s tím makrem a vlastní funkcí:

Function PREDMETY5(kde)
    p5 = ""
    For i = 0 To kde.Columns.Count - 1
         If Cells(kde.Row + 1, kde.Column + i).Value = 5 Then
            p5 = p5 + Cells(kde.Row, kde.Column + i).Value + ", "
         End If
    Next i
    If p5 <> "" Then p5 = Left(p5, Len(p5) - 2)
    PREDMETY5 = p5
End Function

Ale s tím maticovým vzorcem výše to je elegantnější...

Zpět do poradny Odpovědět na původní otázku Nahoru