[ janponican @ 12.04.2010. 00:24 ] @
Potreban mi je makro za automatsko sortiranje tabele po više kolona.
Npr.
- prvo, po "A" koloni (Ascending),
- drugo, po "B" koloni (Ascending), i
- trece, po "C" koloni (Descending).
Molim za pomoć i hvala unapred!
[ maliradoznalac @ 12.04.2010. 06:59 ] @
ako imas potrebu da sortiras "samo" po tri kolone to mozes iz verzije 2003 postici upotrebom opcije Sort koja se nalazi u Data meniju
[ neptuncokg @ 12.04.2010. 10:24 ] @
Ako sam dobro razumeo, potreban je macro za sortiranje kolona. Takve stvari se najjednostavnije rešavaju - snimanjem (record) macroa. Uključiš snimanje, odradiš sortiranje po želji, zaustaviš snimanje i zapamtiš urađeno. O snimanju macroa ima na forumu obilje tema, kao i na celom netu. Samo malo potraži...
[ janponican @ 13.04.2010. 22:40 ] @
Citat:
maliradoznalac: ako imas potrebu da sortiras "samo" po tri kolone to mozes iz verzije 2003 postici upotrebom opcije Sort koja se nalazi u Data meniju


Citat:
neptuncokg: Ako sam dobro razumeo, potreban je macro za sortiranje kolona. Takve stvari se najjednostavnije rešavaju - snimanjem (record) macroa. Uključiš snimanje, odradiš sortiranje po želji, zaustaviš snimanje i zapamtiš urađeno. O snimanju macroa ima na forumu obilje tema, kao i na celom netu. Samo malo potraži...


Naveo sam primer sa malom tabelom, medjutim moja tabela sadrži blizu 500 redova i 30 kolona gde imam potrebe za sortiranjem po 5 kolona. Za sada koristim Data/Sort ali zbog čestih izmena moram selektovati celokupnu tabelu i sortirati samo po 3 kolone. No, bez obzira, ipak vam hvala na odgovorima iako mi niste baš pomogli.
pozz
[ neptuncokg @ 13.04.2010. 23:37 ] @
Pa teško je iz tvoje tabele razumeti celu problematiku. Nešto si pobrkao sa "A" kolonom, koja je prazna... Dobro, evo jednog makroa koji ja koristim da sortiram "po nazivu" kolonu "A", a sami tim i ceo dokumenat u opsegu "A1 : F50000". Znači, 50000 redova. Vidi možeš li to da prilagodiš svojim potrebama.

Sub Sortiranje()
'Sortira “dokumenat” po “nazivu”, tj. kolonu “A” u opsegu “A1:F50000”

Application.ScreenUpdating = False

Columns("A:A").Select
Range("A1:F50000").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A1").Select
End Sub

I da se razumemo, nisam ovaj makro sam napisao, već sam ga SNIMIO. Pa ga koristim kao ideju za sva druga sortiranja. Pozdrav.

[ janponican @ 14.04.2010. 00:12 ] @
Citat:
neptuncokg: Pa teško je iz tvoje tabele razumeti celu problematiku. Nešto si pobrkao sa "A" kolonom, koja je prazna... Dobro, evo jednog makroa koji ja koristim da sortiram "po nazivu" kolonu "A", a sami tim i ceo dokumenat u opsegu "A1 : F50000". Znači, 50000 redova. Vidi možeš li to da prilagodiš svojim potrebama.


Nisam ništa pobrkao nego sam kolone potrebne za sortiranje imenovao sa "A" (Ascending), "B" (Ascending) i "C" (Descending), a sortiranje samo po "A" (Ascending) koloni mi ne rešava problem. Da li je moguće dopuniti makro pa da sortira i ostale kolone i to po Ascending-u i Descending-u? Pokušaću to da uradim ali se plašim da je to ipak malo komplikovanije a nisam ni stručan za pisanje makroa. Ipak hvala.
pozz
[ neptuncokg @ 14.04.2010. 10:55 ] @
Ovaj makro je samo primer, ali podložan promenama i prilagođavanju.
1) Ako hoćeš da sortiraš po "B" ili "C" koloni, u makrou promeni Columns("A:A").Select, u - ...("B:B"), ili u ("C:C"), itd
2) I u nastavku ...Range("A2"), u - ("B2"), ("C2"), itd
3) U delu makroa ..."xlAscending", u - ..."xlDescending" (po želji)

I nema razloga za strah od greške, jer i ako pogrešiš vba će ti ukazati na grešku, a sa F1 ulaziš u najbolji help na svetu. Pozdrav
[ timmy @ 14.04.2010. 11:08 ] @
Kao sto je neptuncokg rekao funkcija kakva tebi treba moze da se SNIMI.
Pa recimo sortiranje po prvih 6 kolona u rastuci niz bi bila:

Code:
Sub SortBy6Columns()
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A22") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("B2:B22") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C2:C22") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("D2:D22") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("E2:E22") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("F2:F22") _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    
   With ActiveWorkbook.Worksheets("Sheet1").Sort
        .SetRange Range("A1:L22")
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub


Obrati paznju da se ovde vrsi dodavanje (.Sort.SortFields.Add Key) za svako naredno sortiranje
pa tako 6 puta za svaku kolonu po kojoj treba da se zada kriterijum sortiranja, a tek zatim kada
se svi uslovi zadaju tek tada se poziva komanda za sortiranje tabele. Takodje obrati paznju na
to da sam se ja igrao sa tabelom koja ima 22 reda i da adekvatno promenis ovu brojku.

Pozdrav
[ janponican @ 15.04.2010. 15:43 ] @
Hvala vam. Probaću da uradim po datim instrukcijama i javiću kakav je rezultat.
pozz