< návrat zpět

MS Excel


Téma: četnost - pomocí VBA rss

Zaslal/a 23.5.2016 8:13

Dobrý den
můj problém navazuje na http://wall.cz/index.php?m=topic&id=31463 (Díky xlnc za inspiraci 1 ).
Vše je popsáno v příloze, proto jen stručně:
- zjistit četnost výskytu "čísel" ve sloupci, v buňce jich je několik /jako text/(nutno počítat pouze s jedinečnými "čísly")
3.1.1, 3.1.3, 3.1.3 počítá se pouze 3.1.1, 3.1.3

- řádků bude v jedné tabulce (měsíci) kolem stovky
- Výsledkem by měla být tabulka "četnosti" na zvláštním listu
- listy mají názvy 01-12 (měsíce)
Napadlo mne: vybrat sloupce G,H, zkopírovat mimo viditelnou oblast (AA), H -> "text do sloupců" a potom "nějak" v cyklu projít řádky a odebrat duplicity. Následně vyloučit (vymazat) řádky s 9 ve sl.G a "nějak" spočítat četnosti...
Jenže těch nějak je na mne moc :-)
Máte někdo nápad jak to řešit?
Díky

Příloha: zip31589_cetnost.zip (12kB, staženo 26x)
Zaslat odpověď >

#031595
Hav-Ran
Nejaký náznak je v priloženej Kontingenčnej tabuľke.
Najprv som vymazal z reťazcov v "H"stlpci " ", čím vznikli spojené kódy a v pomocnom stlpci som "vytiahol" posledných 5 znakov. Následne urobil z oblasti KT, a ide o list 05=máj, som do tabuľky z KT našiel hodnoty podľa záhlaví Súhrnnej tabuľky.
Takto treba urobiť všetky mesiace, aktualizovať cez CTRL-Alt-F5 všetky KT na všetkých listoch, čím sa následne prepočíta Súhrnná tabuľka.
Příloha: zip31595_cetnost_ha.zip (21kB, staženo 26x)
citovat
#031596
avatar
Díky Hav-Ran ale "pomhačko" není správně, např. H16 - 3.1.1,3.1.3,3.1.3 nemůže být výsledek 3.1.3 ALE 3.1.1, 3.1.3 - všechny jedinečné hodnoty v buňce.
Souhrná tabulka bude jedna.citovat
icon #031601
eLCHa
Na to stačí vzorec=COUNTIF($H$2:$H$73;"*"&O$1&"*")Pokud to musí být VBA, použijte Evaluate nebo vložte vzorec a pak převeďte na hodnotycitovat
#031608
elninoslov
Tie dáta v H je pekná prasárna. Raz sú tam medzery, raz nie, raz vbLf, raz vbCrLf. Tieto dáta musia byť ako TEXT, lebo sa môže stať, že Vám to Excel interpretuje ako dátum.
Tu máte jedno komplikované riešenie komplet cez VBA aj s jedinečnými hodnotami, zoradením a výpisom výsledku.

Ten vzorec od eLCHa je krásny - jednoduchý. Dúfam, že len kvôli zle zadaným dátam v H mi dáva na liste 05 pri "3.1.1" počet 23, a makro dá 22. Ak je to kvôli niečomu inému, tak mám chybu v kóde. Inak kód trvá zlomok sekundy.
Příloha: zip31608_cetnost.zip (65kB, staženo 26x)
citovat
#031616
avatar
Díky oběma, jdu studovat a zkoušet...citovat
#031621
avatar
elninoslov
To už je vyšší dívčí :-)
Požádal bych doplnění komentářů ke kódu, rád bych mu více porozuměl a mohl si ho pak i upravit.
Doplnění - upravil jsem sloupec H, data budou bez mezer pouze oddělena čárkou 3.1.1,3.1.3,3.1.3.
Tabulka četnosti má definovaný první řádek - viz v přiloženém souboru.
Představa, je že v každém listu bude "tlačítko" /to si tam samozřejmě dodělám 1 / pro spuštění makra a výpočet proběhne JEN pro ten daný měsíc (dle názvu listu).
Příloha: zip31621_cetnost_elnino.zip (59kB, staženo 26x)
citovat
#031624
elninoslov

GeorgeK napsal/a:

"...výpočet proběhne JEN pro ten daný měsíc..."

To je logický nezmysel. Vy máte spoločnú tabuľku četností všetkých listov. Spoločnú tabuľku so spoločným zoznamom jedinečných hodnôt zo VŠETKÝCH listov ! A do tejto vkladáte výsledok četnosti. Nemôžete to len tak nastaviť aktuálne podľa jedného listu. Čo ak ten nebude obsahovať hodnotu, ktorá ale v niektorom inom liste je ? Čo ak bude obsahovať hodnotu, ktorá inde nieje, posunú sa ostatné (teda ďalšie zoraďovanie, alebo sa pridá na koniec (doprava). Takže kontrolovať neustále jedinečný zoznam hodnôt daného listu s jedinečným zoznamom všetkých listov doteraz, vytvoriť z toho tretí jedinečný zoznam, ktorý bude slúžiť pre četnost ? A to treba pri zmene poradia jedinečných hodnôt, myslieť na to, že nechcete aktualizovať iné hodnoty četnosti, okrem daného listu, teda treba posúvať doterajšie hodnoty četností iných listov, na pozíciu, na ktorej sa práve nachádza daná hodnota počas zoraďovania. Čo ak to náhodou spustíte na nevyplnenom H stĺpci, zoznam jedinečných hodnôt bude prázdny, čo potom, zmaže celú tabuľku ? ...
Priveľké množstvo nelogickostí, ktorých riešením sa mi nechce tráviť deň. ... a to som ani nedomýšľal do konca.

Napíšte prosím, prečo je problém, že sa to automaticky aktualizuje pre všetky listy naraz napr. pri aktivácii listu "Četnost".citovat
#031628
avatar
Na rok je definováno "co se může vyskytovat" - první řádek tabulky četnosti (pevná posloupnost). Myslel jsem si, že bude nejednodušší pokud si "makro" bude brát údaje z tohoto řádku. (Mohlo by se stát, že by nějaký údaj do toho řádku přibyl).

Zkusil jsem odebrat listy 6-12, makro počítá i bez nich, to znamená že je schopno fungovat i při postupném přidávání listů = > takže ne, nemusí se spouštět JEN pro daný měsíc :-)

Čo ak to náhodou spustíte na nevyplnenom H stĺpci, zoznam jedinečných hodnôt bude prázdny, čo potom, zmaže celú tabuľku?
Pokud je řádek vyplněný NEMŮŽE SE STÁT, že by byl sl. H prázdný.

Takže bych jen požádal o komentář programu a zda by šlo udělat (pokud by to nebylo moc komplikované) aby se v 1. řádku Tabulky četnosti vyskytovaly všechny možnosti, i když se může stát, že se za celý rok nevyskytnou ani jednou.
Děkuji elninoslov za trpělivost 1citovat
#031633
elninoslov
Trpezlivosť je jedna vec, ale to že je to úplne zbytočné, je vec druhá. Ak totiž nechcete aby Vám to zisťovalo a vypísalo iba jedinečné hodnoty z celého zošitu, ale chcete si ich tam pridať sám aj kvôli tomu, aby tam boli aj hodnoty, ktoré sa možno nevyskytnú nikdy (napr. kvôli tomu aby bolo vidieť, ktoré sa nepoužili ... neviem), tak makro absolútne stráca zmysel. Ale aby ste nepovedal, že Vám nechcem popísať svoje makro, tak som Vám to popísal, najlepšie ako viem (najlepšie ako sa mi chce :) ), len preto aby ste zo zaujímavosti vedel ako funguje.

Zo začiatku som nechápal, prečo chcete aktualizovať iba niektorý list samostatne, ale teraz už viem, že ste len zle vyjadril to, že nechcete aby došlo k chybe ak tam niektorý list nebude.

Každopádne tu máte príklad na vzorcové riešenie, ktoré Vám odporúčal už eLCHa, len som ho trošku upravil. Zohľadňuje podmienku, že ak je v stĺpci G=9 tak sa nepočíta, a celé je to v INDIRECT/NEPŘÍMÝ.ODKAZ aby sa vzorec neprepísal na chybu #ODKAZ! keď mu bude chýbať list. A kvôli jednoduchosti zisťovania počtu riadkov si zmente tabuľky na Tabuľky. Pritom pri postupnom dopĺňaní mesiacov dbajte na to, aby vzorce odkazovali na správny názov Tabuľky. Ja som ich nazval
Tabulka01
Tabulka02
Tabulka03
....
A tak sú aj použité vo vzorcoch. Excel Vám ich tak pekne číslovať nebude.
Ďalej si dajte pozor na názvy stĺpcov, teraz sa Vám volajú "g" a "h", tak sa Vám ale v reále volať určite nebudú, a preto je nutné si podľa toho reálneho názvu upraviť vzorce v stĺpci B v Četnost
=IFERROR(COUNTIFS(INDIRECT("Tabulka01[[g]:[g]]");"<>9";INDIRECT("Tabulka01[[h]:[h]]");"*"&B$1&"*");"")
=CHYBHODN(COUNTIFS(NEPŘÍMÝ.ODKAZ("Tabulka01[[g]:[g]]");"<>9";NEPŘÍMÝ.ODKAZ("Tabulka01[[h]:[h]]");"*"&B$1&"*");"")

kde za
[g]:[g] a [h]:[h]
napíšte reálne názvy stĺpcov (hlavičky Tabuľky). Napr. :
[Kód]:[Kód] a [Šarže]:[Šarže]

POZOR: Tým, že je to v INDIRECT (vyššie spomenutý dôvod), tak Vám Excel žiadne automatické premenovanie Tabuliek či Hlavičiek vo vzorcoch neurobí !

Teda konečné odporúčanie:
(toto urobíte iba raz)
-Použite vzorcovú metódu, alias eLCHa.
-Nahodte si reálnu Tabuľku v listoch ktoré tam chcete mať (asi 01-05), s reálnym umiestnením a reálnymi Hlavičkami, reálnymi dátami.
-Zmente si vzorce v B2:B13 v liste Četnost.

(toto urobíte raz za rok)
- Vyplnte si možné hodnoty B1:XYZ1
- Roztiahnite si vzorce z B2:B13 potiahnutím na toľko stĺpcov doprava, koľko je pre daný rok hodnôt. Kludne si hodnotu doplnte ak treba, len si k nej pretiahnete vzorce zo všetkých riadkov.

(toto urobíte raz za mesiac)
- Vytvorte list, odznova, alebo kopírovaním
- Upravte v danom mesiaci, názov Tabuľky, aby korešpondoval s názvom Tabuľky vo vzorci v danom riadku podľa mesiaca. Teda ak vytvoríte Tabuľka14, zmente to na Tabulka06 (v prípade júna/června)

To je odo mňa všetko...
Příloha: zip31633_cetnost.zip (112kB, staženo 29x)
citovat
#031634
avatar
elninislov moc díky, to bude na delší studium :-)citovat

Uživatelské menu

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

Menu

On-line nástroje

Formulář Faktura

Formulář Faktura IV

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

Aktivní diskuse

Čas od do

lubo • 19.4. 16:30

Makro smyčka

MilanKop • 19.4. 10:46

Makro smyčka

elninoslov • 19.4. 9:02

Čas od do

elninoslov • 19.4. 8:46

Čas od do

jarek1111 • 18.4. 13:46

Čas od do

lubo • 18.4. 11:13

Čas od do

jarek1111 • 18.4. 8:32