Prosím o vytvoření makra v excelu.

Momoa [62.204.241.xxx], 19.04.2017 19:18, Programování, 14 odpovědí (930 zobrazení)
Zdravím, potřeboval bych vytvořit makro a ještě nikdy jsem to nedělal :/. Potřeboval bych makro, které vezme sloupec, např sloupec B, projede ho a udělá to, že sečte všechny buňky, které začínají A, poté zvlášť ty které začínají B a ještě ty, které začínají C. Výsledky těch počtů uloží do konkrétních buněk. Takže počet buněk, kde obsah začíná A je 10 a těch 10 tedy uloží do nějaké buňky zvlášť a to udělá u dalších buněk sloupce, které začínají B a C. Tohle by třeba nemuselo být tak těžké, pokud to někdo udělá a i vysvětlí, budu vděčný, rád se přiučím. Pokud by to bylo tedy lehké, ještě je zde jedna věc. Potřeboval bych ty výsledky dále "rozsekat". Ve sloupci C mám k těmto datům také čas např. 10:40 10:45 11:30 12:35 atd. Šlo by, aby to makro projelo nejprve první písmeno ve sloupci B, zde zjistilo, zda začátek odpovídá A, B nebo C, a pokud ano, tak by ještě mrknul na čas a zařadil do nějaké buňky, abych poznal, zda to bylo např. mezi 10 a 11, nebo mezi 11 a 12 nebo mezi 12 a 13 .... A prostě mi to seřadil pod sebe i podle času? Má teorie je, že by nějak mrknul do sloupce B, (countA, countB, countC =0) zde by jel if první písmeno je A, then přičti countA+1, or if první písmeno je B, then přičti countB+1, or if první písmeno je C, then přičti countC+1, else nic nedělej. Pak by vracel hodnoty countA, countB a countC zapsané do určitých buněk. S těmy časy bych vůbec nevěděl ani jak to nějak pobrat, aby to dokázalo vzít. Možná kdyby se jel řádek po řádku, a jel to tak, že by nejprve vzal, zda je v sloupci B na začátku A, B nebo C, udělal by si mezipoznámku, že to bylo třeba A a přitom by mrkl na čas, v kolik to bylo např. 10:35, v tu chvíli by ten čas porovnal nějak if time = 10:xx then je to mezi 10 a 11 a zařadí to do příslušné nové buňky na základě jak prvního písmene ze sloupce B, tak i na základě toho času. Ale já fakt nevím, ani nevím jak ve Visual Basicu dělat. Věděl by někdo nějak poradit a klidně logicky vysvětlit? Moc děkuji.

Odpovědět


PředmětAutorDatum
Re: Prosím o vytvoření makra v excelu. touchwood19.04.2017 19:35
Re: Prosím o vytvoření makra v excelu. Momoa19.04.2017 19:40
Re: Prosím o vytvoření makra v excelu. robert1320.04.2017 08:21
Re: Prosím o vytvoření makra v excelu. touchwood20.04.2017 08:45
Re: Prosím o vytvoření makra v excelu. robert1320.04.2017 09:06
Re: Prosím o vytvoření makra v excelu. touchwood20.04.2017 09:56
Re: Prosím o vytvoření makra v excelu. robert1320.04.2017 11:07
Re: Prosím o vytvoření makra v excelu. Momoa20.04.2017 14:57
Re: Prosím o vytvoření makra v excelu. robert1320.04.2017 15:24
Re: Prosím o vytvoření makra v excelu. touchwood20.04.2017 18:56
Re: Prosím o vytvoření makra v excelu. Machr5520.04.2017 08:26
Re: Prosím o vytvoření makra v excelu. robert1321.04.2017 11:51
Re: Prosím o vytvoření makra v excelu. robert1321.04.2017 14:28
Re: Prosím o vytvoření makra v excelu. poslednírobert1322.04.2017 08:23

Re: Prosím o vytvoření makra v excelu.

Administrátor touchwood, 19.04.2017 19:35
na první problém ti stačí funkce countif - na to makro FAKT nepotřebuješ, to je jedna z úplně základních funkcí Excelu.

Na druhý problém můžeš použít seřazení datové oblasti nejprve podle vypočtené buňky/sloupce pomocí vzorce ZLEVA, která vezme první znak) ze sloupce B a následně (sekundárně) podle sloupce času. Taky celkem triviální.
11110110110 ----- Chcete-li soukromě využít našich služeb, obraťte se na placenou službu http://it.poradna.net

↑ Odpovědět


Re: Prosím o vytvoření makra v excelu.

Momoa [62.204.241.xxx], 19.04.2017 19:40
Na countif jsem koukal, ale dělat ho pokaždé u stovek excelů, které tu mám, mi nepřijde zrovna zjednodušení :/.

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Bronzový rádce robert13, 20.04.2017 08:21
Ako je myslených "stovky Excelov"?
Potrebuješ to aplikovať na stovkách PC alebo na jednom PC so stovkami súborov na spracovanie? Na stovkách PC by si totiž musel tiež doplniť do ich súborov modul s makrom a to je pri tak jednoduchej úlohe skoro tak "náročné" ako tam doplniť vzorce...
Ale áno, dá sa to...
Predtým však dávam na zváženie jedno elegantné a veľmi rýchle riešenie prostredníctvom kontingenčnej tabuľky. Prikladám ukážku princípu, ktorý rieši to, čo potrebuješ.
Máš to pozoskupované podľa písmen aj podľa časov... máš k dispozícii celkové súčty a možnosť filtrácií...
Nemusíš riešiť vzorce či funkcie, len do príslušného hárka nadefinuješ pár klikmi parametre kontingenčnej tabuľky.

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Administrátor touchwood, 20.04.2017 08:45
kontingenčka je na toto hotový kanon na vrabce. :-)
11110110110 ----- Chcete-li soukromě využít našich služeb, obraťte se na placenou službu http://it.poradna.net

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Bronzový rádce robert13, 20.04.2017 09:06
ale rýchly, bez vzorcov a robí, čo potrebuje.
Keď nemám vzduchovku ale mám kanón zdarma, ktorý škody nenarobí, prečo to nevyužiť ;-):beer:

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Administrátor touchwood, 20.04.2017 09:56
kromě toho, že v zadání ty stovky excelů nebyly, tak rovnou říkám, že na to je Excel špatný nástroj. Neříkám, že to v něm udělat nejde, ale není to elegantní, ani účelné.
11110110110 ----- Chcete-li soukromě využít našich služeb, obraťte se na placenou službu http://it.poradna.net

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Bronzový rádce robert13, 20.04.2017 11:07
nechápem Tvoj názor, ale neberiem Ti ho.
Na to, čo popísal, nevidím jednoduchší a dostupnejší nástroj ako bežne používaný Excel.

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Momoa [62.204.241.xxx], 20.04.2017 14:57
Děkuji mnohokrát, hned na to mrknu. Jde o sdílenou složku, kam chodí ty excely a dívá se tam jen pár PC.

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Bronzový rádce robert13, 20.04.2017 15:24
Osobne by som na to asi išiel makrom nadradeného "analyzačného súboru", ktoré by do radu ťahalo údaje zo všetkých čiastkových súborov zdieľanej zložky a vytváralo súhrnnú tabuľku, ktorej riadkami by boli identifikátory autorov dielčích súborov a stĺpcami by boli súčty podľa písmen a hodín...
Po Tvojej doplňujúcej informácii však dávam za pravdu Touchwoodovi, čím sa mu ospravedlňujem (touchi :beer:). Excel je v takomto prípade akýmsi "núdzovým" riešením, ale keďže inými nástrojmi ani znalosťami nedisponujem, tiež by som si to vyriešil Excelom. Za jednoznačnej nutnosti dodržiavania pravidiel autormi čiastkových vstupných súborov! V opačnom prípade by sa riešenie komplikovalo exponenciálne k nedisciplinovanosti autorov zdrojov.

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Administrátor touchwood, 20.04.2017 18:56
:beer:

ano, Excel je v tomto případě "Poor man's choice" :-)
11110110110 ----- Chcete-li soukromě využít našich služeb, obraťte se na placenou službu http://it.poradna.net

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Machr55 [217.64.9.xxx], 20.04.2017 08:26
Při tvorbě vzorců můžeš mít zapnutý záznam makra - pak se vše, co vytvoříš v sešitu, zaznamená do VBA a můžeš to použít opakovaně ve více sešitech (pravděpodobně po mírných úpravách). Tím se taky seznámíš se syntaxí jazyka VBA.
Jinak na studium (nejen) VBA doporučuji tenhle web.

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu.

Bronzový rádce robert13, 21.04.2017 11:51
Tak ak by Ťa to ešte zaujímalo (veľmi to na to nevyzerá), tak nasledujúce makro z X vstupných súborov v zdieľanom adresári s rovnakou štruktúrou dát v hárku s názvom "zdroj" (vystaval som to na niekoľko kópií mojej vzorovej tabuľky, ktorú som prikladal minule) vytvorí X hárkov kontingenčných tabuliek v "analyzačnom súbore" KT.xlsm, ktorý sa musí nachádzať tiež v onom zdieľanom adresári a ktorý obsahuje toto makro.
T.j. v súbore KT.xlsm sa spustením makra vytvárajú hárky kontingenčných tabuliek, zodpovedajúce príslušným vstupným čiastkovým súborom, pričom každý hárok dostane pridelený názov podľa názvu zdrojového súboru.
Nie je vylúčené vyhotovenie jednej sumarizačnej kontingenčnej tabuľky namiesto týchto individuálnych, ale keďže si sa neozval kvôli ďalším doplňujúcim informáciám, tak som narýchlo zbuchol takúto ukážku.
Po zmene vstupných údajov sa kontingenčné tabuľky samé neaktualizujú. Tu je to však vyriešené nie formou aktualizácie, ale vyhotovením celej analýzy nanovo, keďže k dispozícii môžu byť už iné súbory...

Sub Vypisy_KT()

    On Error GoTo Chyba
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False

    ChDir ActiveWorkbook.Path
    
    If ActiveWorkbook.Sheets.Count > 1 Then
        For i = 1 To ActiveWorkbook.Sheets.Count - 1
            Sheets(1).Delete
        Next i
    End If
    
    Application.DisplayAlerts = True
    
    Set fs = CreateObject("Scripting.FileSystemObject")
    Set f = fs.GetFolder(ActiveWorkbook.Path)
    Set fc = f.Files
    
    i = 1
    j = 1
    
    For Each f1 In fc
    
        If f1.Name = "~$KT.xlsm" Or f1.Name = "KT.xlsm" Then GoTo Dalsi

        Sheets(j).Select
        Range("A1").Select

        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="[" & f1.Name & "]zdroj!R1C1:R10C3", _
        Version:=xlPivotTableVersion14).CreatePivotTable TableDestination:=Range("A1"), TableName:="KT" & i, DefaultVersion:=xlPivotTableVersion14
        ActiveSheet.Name = Left(f1.Name, Len(f1.Name) - 5)
        With ActiveSheet.PivotTables("KT" & i).PivotFields("názov")
            .Orientation = xlRowField
            .Position = 1
        End With
        ActiveSheet.PivotTables("KT" & i).AddDataField ActiveSheet.PivotTables("KT" & i).PivotFields("počet"), "Súčet z počet", xlSum
        With ActiveSheet.PivotTables("KT" & i).PivotFields("čas")
            .Orientation = xlRowField
            .Position = 2
        End With
        Cells(3, 1).Group Start:=True, End:=True, Periods:=Array(False, False, True, False, False, False, False)
        Sheets.Add After:=Sheets(Sheets.Count)

        j = j + 1
    
Dalsi:
        i = i + 1
    Next
    Sheets(1).Select
    Exit Sub

Chyba:
    MsgBox "Chyba"

End Sub

↑ Odpovědět


Re: Prosím o vytvoření makra v excelu.

Bronzový rádce robert13, 21.04.2017 14:28
P.S. samozrejme, vo vyššie uvedenom príklade ide o ukážku pre odskúšanie na skúšobných súboroch.
Pri skúšaní je potrebné si uvedomiť napr. to, že hárky súboru KT.xlsm sú pomenovávané názvami vstupných súborov a keďže dĺžka názvu hárku je obmedzená, musia tento fakt rešpektovať i názvy vstupných súborov.

Nasledujúce prílohy si ulož do spoločného adresára, otvor súbor KT.xlsm (povoliť spúšťanie makier) a spusti v ňom makro Vypisy_KT...

Môžeš si vytvoriť dalšie súbory zdroj..., pomeniť v nich údaje a spúšťať makro...

P.S. P.S. Ako vidím, v prílohe sa zmenila veľkosť písma v názve súboru. Po stiahnutí budeš musieť premenovať súbor kt.xlsm na KT.xlsm

↑ ← Odpovědět


Re: Prosím o vytvoření makra v excelu. poslední

Bronzový rádce robert13, 22.04.2017 08:23
Ospravedlňujem sa, po opätovnom prečítaní dotazu som zistil, že sa nemá jednať o súčet hodnôt v stĺpci tabuľky "počet", ale o počet výskytov podľa zoskupinovaného času. Týmpádom je v kontingenčnej tabuľke potrebné definovať dvakrát stĺpec času, raz v poli menoviek riadkov a raz v poli výpočtov, stĺpec B zdrojovej tabuľky je bezpredmetný.
Dielčia kontingenčná tabuľka má teda vyzerať ako v priloženom súbore.
V tomto zmysle je potrebné zmeniť i makro, čo urobím, ak je dotaz ešte aktuálny, najskôr však v pondelok (som na inej verzii Excelu)

↑ ← Odpovědět


TOPlist