
To chcete zoradiť rovno položky v kolekcii?
Ak tam máte aj vyhľadávací kľúč, tak to priamo nepôjde. Lebo ten kľúč neskopírujete. Pretože je potrebné to preklopiť cez pole alebo inú kolekciu, a ten kľúč by ste musel mať ešte súbežne uložený v ďalšom poli alebo kolekcii, aby bol dohľadateľný a priradený položke v novovznikajúcej zoradenej kolekcii.
Ak chcete zoradený iba výpis (a kolekcia ostane tak ako je), to ide celkom ľahko.
Ak chcete zoradiť kolekciu ale bez kľúča, tak to tiež pôjde. Obe posledné spomínané cez pomocnú kolekciu.
Najlepšie by ale bolo, to zoradiť jednoducho už pri vytváraní kolekcie.
Treba napísať čo presne je potrebné urobiť. Nech to nerobím zbytočne. Resp. to sa bude dať určo aj vygoogliť.

Ja by som to zoradil hneď pri napĺňaní.
Sub Naplnit_a_zoradit_naraz()
Dim Col As New Collection, D(), i As Long, y As Long, bKoniec As Boolean
With Worksheets("razeni")
D = .Range("C4:C11").Value2
For i = 1 To UBound(D, 1)
bKoniec = True
For y = 1 To Col.Count
If Col(y) > D(i, 1) Then bKoniec = False: Col.Add D(i, 1), CStr(D(i, 1)), y: Exit For
Next y
If bKoniec Then Col.Add D(i, 1), CStr(D(i, 1))
Next i
ReDim D(1 To Col.Count, 1 To 1)
For i = 1 To Col.Count
D(i, 1) = Col(i)
Next i
.Range("D4").Resize(Col.Count).Value = D
End With
End Sub

Ale čoby bolo. Predstavte si množinu M{5,1,6}. Vytvorím novú prázdnu množinu N, do ktorej budeme zoraďovať. Z M si budeme postupne vyťahovať čísla. Prvé je 5. Teraz skontrolujeme po jednom čísla v N, a hľadáme prvé z N, ktoré je väčšie ako 5. Žiadne ešte nieje, tak 5 pridáme a máme N{5}. Berieme ďalšie číslo z M, teda 1. A zase hľadáme v N prvé väčšie ako 1. A ejhľa, číslo 5 z N je väčšie ako 1 z M, tak pridáme do zoradenej množiny N číslo 1 pred pozíciu tej 5 čo tam už je. Takže máme N{1,5}. A berieme ďalšie z M, teda 6. A znovu porovnávame už zoradenú novú N, a hľadáme prvé väčšie. Bác, žiadne nieje, tak pridáme na koniec. A máme N{1,5,6}. Toľko základný princíp, lebo kolekcia umožňuje vložiť položku Before alebo After alebo na koniec.
Blbé je, ak máme vyhľadávacie kľúče. Tie nezistíme, ak ich nemáme ešte niekde uložené. Zvolil som teda spôsob, že kolekcia nebude obsahovať len samotnú hodnotu, ale aj vyhľadávací kľúč, ktorý je na začiatku pri plnení priradíme. A ako pridáme do kolekcie položku z 2-mi hodnotami (hodnota aj kľúč)? No strelíme do nej pole. Array(položka, kľúč). to je prvá malá komplikácia v kóde.
Druhá malá komplikácia, ktorá Vás bude miasť, je prehadzovanie porovnávaných položiek pri prehodení vzostupného/zostupného radenia. Aby to nebolo komplikované, môžete si urobiť jednoducho 2 samostatné cykly, vykonávané podmienene podľa voľby zoradenia. Či už cez If alebo Select Case.
No a to, že je tam pridaný aj index zoraďovacieho poľa, to je len taký bonus. Ono totiž môže byť niekedy treba do kolekcie natrepať aj širšie pole, a potom môže byť takýto index užitočný. Ale ak to má byť variabilné treba myslieť na to jedným krátkym cyklom ešte, ale to som tam nedával, lebo ak viete, že máte pole 4-och údajov a radiť podľa 3. z nich, tak rovno pri napĺňaní budete plniť poľom o veľkosti 5 položiek (5. je ten kľúč). A áno ak to má byť UNI, treba doplniť o ten cyklus. Tu sa už ale dostávame do bodu, kedy je zrejmé, že makrá sú vo väčšine špecializované, a snaha urobiť niečo absolútne UNI, to len zneprehľadňuje.