Zavrieť

Porady

EXCEL - triedenie dat

Pomoc s triedenim dat

Ahojte, neviem si poradit s triedenim dat v Exceli. Pre lepsie pochopenie posielam jednoduchy priklad.
V strlpci A v zosite "Zdroj" sa nachadza 9 udajov nazvanych ako oznacenie a k nim v stlpci B cislo.
Potrebujem vytriedit tieto data do zositov nazvanych "L", "W" a "Y".
Ak si vsimnete, udaje v stlpci A maju v sebe zakotvene tieto pismena - podla nich sa bude triedit.
Samozrejme, LEFT() a RIGHT() poznam, len neviem ako to zapisat tak, aby nezostavali prazne riadky, atd.
Makro musi vediet rozoznat a zapisat len stanovene data.


Dakujem, s pozdravom Jano.
Naposledy upravil jan.pozvazny : 17.05.16 at 19:07
Pravidlá a tipy
  • Každý móže napísať len 1 odpoveď. Neskor mozete svoju odpoveď vylepšiť.
  • Odpoveď má priniesť riešenie na otázku, vyvarujte sa hodnotenia otázky.
  • Odpoveď má byť viac o faktoch ako o názoroch.
Dalšie pravidla a tipy
    Ak potrebujete v otázke niečo upresniť, najskôr sa spýtajte na podrobnosti.
    Koncept slúži na uloženie rozpracovanej odpovede, koncept sa zobrazuje len Vám, až kým ho nezverejníte.
    Ak máte podobnú otázku, založte Novú otázku alebo Súvisiacu otázku.
    ❤ Buďte priateľskí ❤
    Sme súčasťou jednej komunity, ktorá si chce vzájomne pomáhať, rozdieľnosť je vítaná ak neubližuje!
    Usporiadať podľa času

    PaloPa je offline (nepripojený) PaloPa

    PaloPa
    Napríklad takto:
    Code:
    Sub Triedit()
    Dim x As String, a, i As Byte
    
        x = "L,W,Y"
        a = Split(x, ",")
        For i = LBound(a) To UBound(a)
            Call PoListoch(CStr(a(i)))
        Next i
        
        Sheets("Zdroj").Select
        Range("A1").Select
        Selection.AutoFilter
    End Sub
    
    Sub PoListoch(xList As String)
        On Error GoTo xErr
        
        Sheets(xList).Range("A1:B60000").ClearContents '"L"
        
        Sheets("Zdroj").Select
        Range("A1").Select
        Selection.AutoFilter
        
        Range(Range("A1"), Range("B60000").End(xlUp)).Select
        Selection.AutoFilter Field:=1, _
            Criteria1:="=*_" & xList & "*", _
            Operator:=xlAnd
            
        Selection.Copy
    
        Sheets(xList).Activate
        Range("A1").Select
        ActiveSheet.Paste
        Range("A1").Value = xList
        
    xErr:
    End Sub
    P.

    Doplnenie - Priklad_02

    Doplnenie - Priklad_03

    Ak by sa doplnili dva riadky v zdroji, kde by sa zadali kritéria pre rozšírený filter,
    dalo by sa to urobiť i cez jednoduchšie makro:

    Code:
    Sub FilterCopyToOtherSheet()
    Dim xSht As String
        xSht = Mid(Sheets("Zdroj").Range("A2").Text, 3, 1) ' do ktoreho listu to pojde
        Sheets(xSht).Range("A1:X60000").ClearContents
        
        Sheets("Zdroj").Range(Range("A4"), Range("A60000").End(xlUp)).AdvancedFilter _
        Action:=xlFilterCopy, _
        CriteriaRange:=Sheets("Zdroj").Range("A1:A2"), _
        CopyToRange:=Sheets(xSht).Range("A1"), _
        Unique:=False
    
    End Sub
    Ak by bolo "Unique:=True", filter by vybral iba jedinečné hodnoty (ako Pivot table)
    Naposledy upravil PaloPa : 18.05.16 at 15:31
    jan.pozvazny Ahoj, dakujem, vazim si tvoju pomoc. Mohol by som ta poziadat o vytvorenie toho, ze bude do dalsich sheetov kopirovat len udaje zo stlpca A? Pripajam Excel subor v priponou _v02.

    Da sa to spravit aj bez makra? Ak nie, mozem Ta poziadat o maly tutorial. Ak nie, budem povdacny za kazdu radu.


    Dakujem, Jano.
    PaloPa Ahoj Jano,
    Bez makra je to najjednoduchšie ako navrhol Mepex - cez Pivot tabuľky (resp jednu). Makro som upravil stačilo upraviť len riadky kde je "Range("B60000")" na "Range("A60000")", resp rozsah, ktorý treba najskôr v cieľovom liste premazať (Range("X60000")). Makro možno spustiť tlačidlom na zdrojovom liste, alebo cez ALT+F8. ALT+F11 otvorí okno s kódom. Dá sa to doplniť i o vloženie VLOOKUP funkcie.

    mepex je offline (nepripojený) mepex

    mepex
    Ponúkam riešenie bez programovania, pomocou kontingenčných tabuliek na listoch L, W a Y. Dopočítal som si stĺpec znak v tabuľke Data, a tento je použitý ako filter pre kt. Aktualizácia kt (na jednotlivých listoch) pomocou Alt+F5.
    3 komentáre - rozbaľ     zbaliť
    jan.pozvazny Ahoj, dakujem. Stoji za zvazeine, v jednoduchosti je krasa :-) Rozmyslam nad tym. Tych dat mam vsak dost vela a chcel by som sa zbavit manualnej prace, co najviac. Poznas aj iny sposob? Ako som pisal vyssie, staci mi, ked prekopiruje mi do dalsich sheetov to oznacenie, nic viac mi netreba, lebo ostatne veci si tam prenesiem VLOOKUP-mi.

    Vdaka, Jano.
    mepex Údaje je možné vložiť do zdrojovej tabuľky ako hodnoty prvé stĺpce okrem vzrocového. Celá tabuľka sa automaticky zväčší (resp. je treba odstrániť zvyšné riadky) a potom už len na listoch je potrebné dať aktualizáciu kt Alt+F5. Nechápem potrebu čo písmeno to list, ale stačí odkopírovať dáky vytvorený list, premenovať ho a zmeniť filter na iné písmeno. Všetko by sa dalo robiť v jednej kontingenčnej tabuľke, len je potrebné prepínať jej filtrovacie písmeno. Kopírovanie listu najjednoduchšie D&D (drag and drop) listu s ctrl pred pustením tlačidla myši.
    Vlookup je fajn do 5000 riadkov jeden stĺpec, potom Vám vyhľadávací výpočet zabyje procesor. Lepšie je jeden stĺpec match, ktorým najdete riadok a indexom vypisovať hodnoty zo stĺpcov. A keby aj to bolo náročné match nahradiť hodnotami. Toto všetko hravo spraví kt, stačí len definovať požiadavky zobrazenia, ak sa údajové tabuľky prepoja cez hľadaný kľúč, resp do zdrojov aj tabuľky stačí doplniť požadované vzorce index a match.
    jan.pozvazny Ahojte mepex a PaloPa. Dakujem za vsetky rady. Zvolil som si tie filtre. Vdaka este raz.
      zbaliť

    EXCEL - triedenie dat

    Porady, ktoré by vás mohli zaujímať

    Prihláste sa a sledujte len tie Porady, ktoré Vás zaujímajú.