Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Výčet prvků - Excel

Dobrý den,
potřeboval bych pomoci s jednou vychytávkou do Excelu. Vysvětlím o co jde. Podívejte se na obrázek níže.

http://imageshack.us/photo/my-images/525/vstieko.j pg/

Jde o jednoduchý výdajový doklad. Do toho žlutého sloupečku se píší jednotlivé firmy. Řekněme třeba: McDonald, Coca Cola, DHL, Tesco. Potřebuji, aby se přenesli do první buňky vyznačeného červeného řádku. To samozřejmě umím udělat pomoc "&" ale často se stává, že se nějaká firma opakuje. Potřebuji to tedy udělat tak, aby pokud bude nějaká z firem dvakrát, tak jí to dvakrát neopsalo. Nevím, ale jak.

Děkuji, a doufám, že jsem to vysvětlil srozumitelně.

Předmět Autor Datum
Je možné vybrat ze skupiny dat pouze unikátní hodnoty? Úlohu lze vyřešit více způsoby. Dobrým progr…
touchwood 15.01.2012 10:34
touchwood
Touchwood, pokud to mám udělat takto, tak potřebuji pomoct, protože jsem nikdy filtry nepoužíval. Je…
Ondra HP 15.01.2012 10:57
Ondra HP
promiň, mám rád své soukromí ;-) BTW nikdo ti za "neznalost" tady hlavu neutrhne, naopak poradna je…
touchwood 15.01.2012 11:03
touchwood
Jasně, promiň Každopádně víc se mi líbí ta matice od siki83. Tam se aspoň chytám. Zkusím to přes ní…
Ondra HP 15.01.2012 11:27
Ondra HP
Private Sub Akce_Click() Range("C6:C11").Select Range("C6:C11").AdvancedFilter Action:=xlFilterCopy,…
touchwood 15.01.2012 11:43
touchwood
pomocí maticového vzorce takto:
Siki83 15.01.2012 10:39
Siki83
Nerad ti kazím radost Siki83, ale tvoje matice nefunguje. Schválně si zkus zadat dvě různé a pak dvě…
Ondra HP 15.01.2012 10:51
Ondra HP
upozorňuju, že targetcell a buňky pod ním bude cílem sady záznamů (tj. umístit někam na jiný list, n…
touchwood 15.01.2012 10:55
touchwood
Jo, už funguje. Dokážeš mi ji udělat pro 8 políček. To já asi nesvedu.
Ondra HP 15.01.2012 11:05
Ondra HP
Tak mi napiš z jakých buněk (rozsah např A8:A15 nebo C1:C8) chceš tahat data.
Siki83 15.01.2012 11:38
Siki83
a87 až a94 a vkládat do c7. Myslíš, že bude fungovat tohle: ? {=(CONCATENATE (KDYŽ(NEBO(DÉLKA(C8)=0…
Ondra HP 15.01.2012 11:47
Ondra HP
Po dopsání vzorce kombinace CTRL+SHIFT+ENTER
Siki83 15.01.2012 11:53
Siki83
Díky, ale přeci jen budu potřebovat to od tebe vytvořit. To moje nefunguje. Uděláš mi to, prosím? St…
Ondra HP 15.01.2012 11:58
Ondra HP
Už jsem to rozchodil díky moc všem za rady.
Ondra HP 15.01.2012 12:34
Ondra HP
Než to naklovu tak to máš hotový. Nu což hlavně ať to jede podle představ :-) poslední
Siki83 15.01.2012 12:47
Siki83

Je možné vybrat ze skupiny dat pouze unikátní hodnoty?

Úlohu lze vyřešit více způsoby. Dobrým programátorským návykem však je používat v maximální míře vestavěné algoritmy Excelu. Ty jsou totiž odladěny a kompilovány v prostředí jazyka C+ a jsou tedy rámcově 10x rychlejší než příslušné postupy založené na VBA.
V našem případě využijeme objekt AdvancedFilter představující pokročilý filtr přístupný pomocí nabídky "Data" v uživatelské obrazovce Excelu, který umožňuje selekci unikátních hodnot v oblasti dat.

Sub FindUniqueValues(SourceRange As Range, TargetCell As Range)
'SourceRange - oblast dat, ve které hledáme unikátní hodnoty
'TargetCell - první buňka (levý horní roh) oblasti, do které kód zapíše nalezené unikátní hodnoty
  SourceRange.AdvancedFilter Action:=xlFilterCopy, CopyToRange:=TargetCell, Unique:=True
End Sub

dataspectrum.cz

Touchwood, pokud to mám udělat takto, tak potřebuji pomoct, protože jsem nikdy filtry nepoužíval. Je možné se najít někde přes gmailchat, icq, skype, facebook? Budu to potřebovat vysvětlit krok po kroku a nechci svojí totální neznalostí špinit poradnu.

promiň, mám rád své soukromí ;-)

BTW nikdo ti za "neznalost" tady hlavu neutrhne, naopak poradna je postavena jako znalostní báze, tedy každý vyřešený problém slouží pro budoucí tazatele jako "odrazový můstek"

Navíc se necítím jako nějaký superodborník na excel (znám, používám, ale jsou tu ještě chytřejší a schopnější).

IMHO (netestoval jsem) to uděláš tak, že si uděláš ovládací prvek tlačítko, který provede ten kód a třeba jej i rovnou sloučí. moment, zkusím si to sám.

Private Sub Akce_Click()
    Range("C6:C11").Select
    Range("C6:C11").AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("E6:E11"), Unique:=True
    Range("A1").Value = Range("E6").Value
    
    For i = 1 To 6
        Range("A1").Value = Range("A1").Value & " " & Range("E6").Offset(i, 0).Value
    Next
    Range("E6:E11").Delete
End Sub

Tady máš akci na "tlačítko" (stačí si vyrobit ovl. prvek a dát mu tento kód).

V podstatě:
C6-C11 jsou buňky zdrojové (s duplikáty, můžeš si to rozšířit dle libost)
E6-E11 jsou výsledky (dočasné, budou nakonec smazány, zvol si místo někde zcela mimo, např. AX1:AX20, počet by měl být stejný jako u zdroje pro případ, že všechny zdrojové budou unikátní)
A1 je pole, kde se objeví výsledek
Ve For cyklu je tolik iterací (běhů), kolik je zdrojových buněk.

Nerad ti kazím radost Siki83, ale tvoje matice nefunguje. Schválně si zkus zadat dvě různé a pak dvě stejné věci. Vypíše ti to jen ty různé.
Navíc, nejsem si jist, zda ji budu umět udělat pro 8 budněk...:-/
Na ten druhý způsob koukám teď... napíši za moment.

a87 až a94 a vkládat do c7. Myslíš, že bude fungovat tohle: ?

{=(CONCATENATE
(KDYŽ(NEBO(DÉLKA(C8)=0;C9:C15=C8);"";C8&", ")
;KDYŽ(NEBO(DÉLKA(C9)=0;C10:C15=C9);"";C9&", ")
;KDYŽ(NEBO(DÉLKA(C10)=0;C11:C15=c10);"";C10&", ")
;KDYŽ(NEBO(DÉLKA(C11)=0;C12:C15=c11);"";c12&", ")
;KDYŽ(NEBO(DÉLKA(C12)=0;C13:C15=c12);"";c12&", ")
;KDYŽ(NEBO(DÉLKA(C13)=0;C14:C15=c14);"";c13&", ")
;KDYŽ(NEBO(DÉLKA(C14)=0;C15=C14);"";C14&", ")
;KDYŽ(DÉLKA(C15)=0;"";C15)))}

Je to analogicky udělané z toho tvého. Pro rozsah c8 až c15 vkládání do c1. Každopádně už jsem zapomněl, jak se "ze vzorce dělala matice". Asi jsem to taky uměl, ale už si to nepamatuji. Když vložím je "{" na začátek a "}" na konec, tak ho samozřejmě nefunguje. :-D:-(. Nějaký fígl na to byl. Myslím, že jak jsem to udělal já, tak by to mělo fungovat, stačí mi říct, jak z toho udělat matici.

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