jan.pozvazny
17.05.16,13:41
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.
PaloPa
17.05.16,13:16
Napríklad takto:


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:




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)
jan.pozvazny
17.05.16,17:06
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.
mepex
18.05.16,04:53
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.
jan.pozvazny
18.05.16,10:10
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
18.05.16,11:24
Ú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.
PaloPa
18.05.16,12:18
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.
jan.pozvazny
24.05.16,15:26
Ahojte mepex a PaloPa. Dakujem za vsetky rady. Zvolil som si tie filtre. Vdaka este raz.