< návrat zpět

MS Excel


Téma: Seradit data nahrane do kolekce a vypsat rss

Zaslal/a 2.2.2021 16:21

Merlin99Zdravim vsechny
chci se zeptat zda je mozne data nahrane do kolekce seradit od nejmensiho po nejvetsi (pripadne pokud by byl text tak od A po Z) a nasledne kolekci vypsat.

viz priklad příloha.

Příloha: rar49664_kolekcerazeni.rar (31kB, staženo 13x)
Zaslat odpověď >

#049665
elninoslov
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ť.citovat
#049668
Merlin99
elninoslov
děkuji za dotaz, měl jsem za to že bych naplnil první kolekci MAT dle dané oblasti a následně by se vytvořila nová kolekce SORT kam by se záznamy z kolekce MAT už naplnili tak aby byly data seřazena od nejmenšího čísla po největší a následně by se jen SORT kolekce vysypala zpět na list.
Doufám že to takto dává smysl
Děkuji za radu 1citovat
#049669
elninoslov
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
citovat
#049670
elninoslov
Pridávam príklad radenia kolekcie, a to tak, že ostáva stále možnosť hľadania cez kľúč. Aj keď to očividne nepotrebujete, lebo chcete asi iba zoradiť data. Stratu kľúča som obišiel tak, že kolekcia neobsahuje len potrebné dáta, ale obsahuje pole, skladajúce sa z dát a z kópie kľúča). Tým pádom potom pri zoraďovaní môžeme daným položkám naspäť priradiť ich kľúč. Zakomponoval som voľbu indexu v poli dát, smerodatného pre to ktorá položka poľa je dátová a navyše zoraďujúca. A tiež som zakomponoval možnosť otočiť zoradenie.
Takže tento príklad iba demonštruje, lepšie by bolo to urobiť asi na mieru daného problému, teda vycucnúť iba potrebné.
Příloha: zip49670_kolekcerazeni.zip (42kB, staženo 17x)
citovat
#049689
Merlin99
elninoslov
v rychlosti jsou to prošel a funguje to dokonale, večer si to krok po kroku projdu a pokusim se pochopit ale je to mega slozity tak se uvidi 5 5 9
Děkuji moc skvělá prácecitovat
#049693
elninoslov
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.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje