VBA ArrayList

Sisällysluettelo

ArrayList -objekti on samanlainen kuin kokoelmaobjekti, mutta sillä on paljon enemmän menetelmiä ja ominaisuuksia ja siten paljon enemmän joustavuutta ohjelmoinnin kannalta.

Kokoelmaobjektilla on vain kaksi tapaa (Lisää, Poista) ja kaksi ominaisuutta (Laske, Kohde), kun taas taulukkoluettelossa on paljon enemmän. Lisäksi kokoelmaobjekti on vain luku. Kun arvot on lisätty, indeksoitua arvoa ei voi muuttaa, kun taas taulukkoluettelossa muokkaus on mahdollista.

Monet ryhmälistan menetelmistä käyttävät parametreja. Toisin kuin monet VBA -standardimenetelmät, mikään näistä parametreista ei ole valinnainen. Jotkut menetelmät ja ominaisuudet eivät myöskään aina käytä isoja kirjaimia, kun ne syötetään samalla tavalla kuin Excel VBA: ssa. Ne kuitenkin toimivat edelleen.

ArrayList -objekti laajenee ja supistuu sen mukaan, kuinka monta kohdetta se sisältää. Sitä ei tarvitse mitoittaa ennen käyttöä kuten taulukkoa.

Ryhmäluettelo on yksiulotteinen (sama kuin kokoelmaobjekti) ja oletustietotyyppi on Variantti, mikä tarkoittaa, että se hyväksyy kaikenlaisia ​​tietoja, olivatpa ne numeerisia, tekstiä tai päivämääriä.

Ryhmäluettelo korjaa monin tavoin useita kokoelmaobjektin puutteita. Se on varmasti paljon joustavampi siinä, mitä se voi tehdä.

Ryhmäluettelo -objekti ei ole osa VBA -vakiokirjastoa. Voit käyttää sitä Excel VBA -koodissasi käyttämällä myöhäistä tai varhaista sidontaa

1234 Sub LateBindingExample ()Himmennä MyList objektinaAseta MyList = CreateObject ("System.Collections.ArrayList")End Sub
123 Sub EarlyBindingExample ()Dim MyList kuin uusi ArrayListEnd Sub

Jotta voit käyttää varhaisen sidonnan esimerkkiä, sinun on ensin syötettävä VBA: ssa viittaus tiedostoon "mscorlib.tlb"

Voit tehdä tämän valitsemalla Työkalut | Viitteet ”Visual Basic Editor (VBE) -ikkunasta. Näyttöön tulee ponnahdusikkuna, jossa on kaikki saatavilla olevat viitteet. Vieritä alas kohtaan "mscorlib.dll" ja valitse sen vieressä oleva ruutu. Napsauta OK ja tämä kirjasto on nyt osa projektiasi:

Yksi Array List -objektin suurista haitoista on, että siinä ei ole Intellisense -ominaisuutta. Normaalisti, kun käytät objektia VBA: ssa, kuten aluetta, näet ponnahdusluettelon kaikista käytettävissä olevista ominaisuuksista ja menetelmistä. Et saa tätä Array List -objektilla, ja se on joskus tarkistettava huolellisesti varmistaaksesi, että olet kirjoittanut metodin tai ominaisuuden oikein.

Lisäksi jos painat F2 VBE -ikkunassa ja teet haun "arraylist", mitään ei näytetä, mikä ei ole kovin hyödyllistä kehittäjälle.

Koodisi toimii huomattavasti nopeammin, kun se sidotaan aikaisin, koska se on koottu etukäteen. Myöhäisessä sidonnassa objekti on käännettävä koodin ajaessa

Array -luettelon sisältävän Excel -sovelluksen jakelu

Kuten jo todettiin, ArrayList -objekti ei ole osa Excel VBA: ta. Tämä tarkoittaa, että kaikilla kollegoillasi, joille jaat sovelluksen, on oltava pääsy tiedostoon "mscorlib.tlb"

Tämä tiedosto sijaitsee yleensä:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319

Voi olla syytä kirjoittaa jokin koodi (käyttämällä Dir -menetelmää) sen tarkistamiseksi, että tämä tiedosto on olemassa, kun käyttäjä lataa sovelluksen, jotta hän kokee "pehmeän laskeutumisen", jos sitä ei löydy. Jos sitä ei ole ja koodi toimii, tapahtuu virheitä.

Lisäksi käyttäjälle on asennettava oikea .Net Framework -versio. Vaikka käyttäjällä olisi uudempi versio, V3.5 on asennettava, muuten sovelluksesi ei toimi

Matriisiluettelobjektin laajuus

Kokoonpanon kannalta Array List -objekti on käytettävissä vain työkirjan ollessa auki. Sitä ei tallenneta, kun työkirja tallennetaan. Jos työkirja avataan uudelleen, Array List -objekti on luotava uudelleen käyttämällä VBA-koodia.

Jos haluat, että taulukkoluettelosi on kaikkien koodimoduulin koodien käytettävissä, sinun on ilmoitettava taulukkoluettelo -objekti moduuli -ikkunan yläosassa olevassa Ilmoita -osiossa

Näin varmistat, että kaikki tämän moduulin koodit voivat käyttää taulukkoluetteloa. Jos haluat, että jokin työkirjasi moduuli käyttää taulukkoluettelobjektia, määritä se globaaliksi objektiksi

1 Global MyCollection uutena ArrayList -luettelona

Täyttäminen ja lukeminen taulukkoluettelostasi

Perustoiminto, jonka haluat tehdä, on luoda taulukkoluettelo, lisätä siihen joitain tietoja ja todistaa sitten, että tiedot voidaan lukea. Kaikki tämän artikkelin koodiesimerkit olettavat, että käytät varhaista sidontaa ja olet lisännyt "mscorlib.tlb" VBA -viitteisiin yllä kuvatulla tavalla

123456789101112 AlajoukkoListaesimerkki ()"Luo uusi matriisiluettelo -objektiDim MyList kuin uusi ArrayList’Lisää kohteita luetteloonMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"'Toista taulukon luettelo todistaaksesi arvotN = 0 MyList.Count - 1MsgBox MyList (N)Seuraava N.End Sub

Tämä esimerkki luo uuden ArrayList -objektin, täyttää sen kolmella kohteella ja toistaa kunkin kohteen näyttävän luettelon.

Huomaa, että ArrayList -indeksi alkaa 0: sta, ei 1: stä, joten sinun on vähennettävä 1 Count -arvosta

Voit myös käyttää arvoja "For … Each" -silmukalla:

123456789101112 AlajoukkoListaesimerkki ()"Luo uusi matriisiluettelo -objektiDim MyList kuin uusi ArrayList’Lisää kohteita luetteloonMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"'Toista taulukon luettelo todistaaksesi arvotJokaiselle I MyListilleViestilaatikko I.Seuraavaksi minäEnd Sub

Ryhmäluettelon kohteiden muokkaaminen ja muuttaminen

Ryhmäluettelon suuri etu kokoelmaan verrattuna on, että luettelon kohteita voidaan muokata ja muuttaa koodissasi. Kokoelmaobjekti on vain luku, kun taas Array List -objekti on luku / kirjoitus

123456789101112131415 AlajoukkoListaesimerkki ()"Luo uusi matriisiluettelo -objektiDim MyList kuin uusi ArrayList’Lisää kohteita luetteloonMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3""Vaihda kohde 1 arvosta" Kohta2 "tilaan" Muutettu "MyList (1) = "Muutettu""Toista matriisiluettelo todistaaksesi, että muutos toimiJokaiselle I MyListille"Näytä tuotteen nimiViestilaatikko I.Seuraavaksi minäEnd Sub

Tässä esimerkissä toinen kohde "Item2" muutetaan arvoon "Changed" (muista, että indeksi alkaa nollasta). Kun iterointi suoritetaan koodin lopussa, uusi arvo näytetään

Arvioryhmän lisääminen taulukkoluetteloon

Voit syöttää arvoja taulukkoluetteloosi käyttämällä taulukkoa, joka sisältää luettelon näistä arvoista tai viittauksia laskentataulukon soluarvoihin

123456789101112131415161718 Sub AddArrayExample ()"Luo Array -luettelobjektiDim MyList kuin uusi ArrayList'Iteroi taulukkoarvojen kautta ja lisää ne taulukkoluetteloonJokaiselle v In Array ("A1", "A2", "A3")"Lisää jokainen taulukon arvo luetteloonMyList.Add vSeuraava'Iteroi taulukkoarvojen läpi laskentataulukon viittauksilla ja lisää ne taulukkoluetteloonJokaiselle v In Array -alueelle (alue ("A5"). Arvo, alue ("A6"). Arvo)MyList.Add vSeuraava'Toista taulukon luettelo todistaaksesi arvotN = 0 MyList.Count - 1"Näytä luettelokohdeMsgBox MyList.Item (N)Seuraava N.End Sub

Kohdevalikoiman lukeminen / noutaminen taulukkoluettelosta

Käyttämällä GetRange -menetelmää taulukkoluettelossa voit määrittää haettavien peräkkäisten kohteiden määrän. Kaksi vaadittua parametria ovat lähtöindeksin sijainti ja haettavien kohteiden määrä. Koodi täyttää toisen Array List -objektin alijoukolla kohteita, jotka voidaan sitten lukea erikseen.

123456789101112131415161718 AlaluetteloEsimerkki ()"Määrittele objektitHimmennä MyList uutena ArrayList, MyList1 Object"Lisää kohteita" MyList "-objektiinMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"MyList.Ad "Item6"MyList.Ad "Item4"MyList.Ad "Item7""Tallenna 4 kohdetta" MyList "-luetteloon hakemistopaikasta 2 alkaenAseta MyList1 = MyList.GetRange (2, 4)"Toista kohteen" MyList1 "läpi näyttääksesi alikohteetJokaiselle I MyListille 1"Näytä tuotteen nimiViestilaatikko I.Seuraavaksi minäEnd Sub

Kohteiden etsiminen ryhmäluettelosta

Voit testata, onko nimetty kohde luettelossasi käyttämällä Sisältää -menetelmää. Tämä palauttaa True tai False

1 MsgBox MyList.Contains ("Item2")

Voit myös löytää todellisen indeksin sijainnin käyttämällä "IndexOf" -menetelmää. Sinun on määritettävä haun aloitusindeksi (yleensä 0). Palautusarvo on löydetyn kohteen ensimmäisen esiintymän indeksi. Voit sitten käyttää silmukkaa muuttaaksesi aloituspisteen seuraavaksi indeksiarvoksi löytääksesi muita esiintymiä, jos päällekkäisiä arvoja on useita.

Jos arvoa ei löydy, arvo -1 palautetaan

Tämä esimerkki osoittaa, että "Sisältää" -kohdan käyttäminen, kohdetta ei löydy ja selaus taulukkoluettelossa kaikkien päällekkäisten kohteiden sijainnin löytämiseksi:

1234567891011121314151617181920212223242526 Alahakuluetteloesimerkki ()"Määritä taulukkoluettelo ja muuttujatDim MyList As New ArrayList, Sp As Integer, Pos As Integer"Lisää uusia kohteita, mukaan lukien kaksoiskappaleMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"MyList.Ad "Item1""Testi" Item2 "on luettelossa - palauttaa TrueMsgBox MyList.Contains ("Item2")"Hae olemattoman arvon indeksi -palauttaa -1MsgBox MyList.IndexOf ("Tuote", 0)"Aseta haun aloituskohta nollaksiSp = 0"Toista luettelo saadaksesi kaikki kohteen 1 paikat"Tehdä"Hae seuraavan" Item1 "-indeksipaikka muuttujan" Sp "sijainnin perusteellaPos = MyList.IndexOf ("Item1", Sp)'Jos muita kohteen' esine 1 'esiintymiä ei löydy, poistu silmukastaJos Pos = -1, Lopeta DoNäytä seuraava löytynyt esiintymä ja hakemistopaikkaMsgBox MyList (Pos) & "at index" & Pos"Lisää 1 viimeksi löydettyyn indeksiarvoon - tästä tulee nyt uuden haun uusi aloituspaikkaSp = Pos + 1SilmukkaEnd Sub

Huomaa, että käytetty hakuteksti erottaa isot ja pienet kirjaimet, eikä jokerimerkkejä hyväksytä.

Kohteiden asettaminen ja poistaminen

Jos et halua lisätä kohteitasi luettelon loppuun, voit lisätä ne tiettyyn hakemistopaikkaan niin, että uusi kohde on luettelon keskellä. Indeksinumeroita säädetään automaattisesti seuraaville kohteille.

123456789101112131415 Sub InsertExample ()"Määritä taulukkoluettelo -objektiDim MyList kuin uusi ArrayList"Lisää kohteita taulukkoluetteloonMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"MyList.Ad "Item1""Lisää" kohde 6 "hakemistoon 2MyList.Insert 2, "Item6""Toista matriisiluettelon kohteet näyttääksesi uuden järjestyksen ja hakemiston sijainninN = 0 MyList.Count - 1MsgBox MyList (N) & "Index" & NSeuraava N.End Sub

Tässä esimerkissä "Tuote 6" lisätään luetteloon indeksipaikassa 2, joten "kohde3", joka oli indeksipaikassa 2, siirtyy nyt indeksipaikkaan 3

Yksittäinen kohde voidaan poistaa käyttämällä Poista -menetelmää.

1 MyList.Remove "Item"

Huomaa, että virheitä ei synny, jos kohteen nimeä ei löydy. Kaikki seuraavat indeksinumerot muutetaan poiston mukaan.

Jos tiedät kohteen hakemistopaikan, voit käyttää RemoveAt -menetelmää, esim.

1 MyList.RemoveAt 2

Huomaa, että jos annettu hakemistopaikka on suurempi kuin matriisiluettelon kohteiden määrä, virhe palautetaan.

Voit poistaa joukon arvoja luettelosta käyttämällä RemoveRange -menetelmää. Parametrit ovat lähtöindeksi ja sitten poistettavien kohteiden määrä, esim.

1 MyList.RemoveRange 3, 2

Huomaa, että saat virhekoodin, jos alkioiden arvosta poikkeavien kohteiden määrä on suurempi kuin matriisiluettelon kohteiden määrä.

Sekä RemoveAt- että RemoveRange -menetelmissä jotkin koodit olisivat suositeltavia tarkistamaan, ovatko määritetyt hakemistonumerot suurempia kuin taulukkoluettelon kohteiden kokonaismäärä, jotta mahdolliset virheet saadaan kiinni. Laske -ominaisuus antaa taulukon luettelossa olevien kohteiden kokonaismäärän.

12345678910111213141516171819202122232425 Sub RemoveExample ()"Määritä taulukkoluettelo -objektiDim MyList kuin uusi ArrayList"Lisää kohteita taulukkoluetteloonMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"MyList.Ad "Item1"MyList.Ad "Item4"MyList.Ad "Item5""Lisää" kohde 6 "hakemistoon 2MyList.Insert 2, "Item6""Poista" kohde2 "MyList.Remove "Item2"'Poista' kohde ' - tätä ei ole matriisiluettelossa, mutta ei virheMyList.Remove "Item""Poista kohde hakemistopaikasta 2MyList.RemoveAt 2"Poista 2 peräkkäistä esinettä hakemistopaikasta 2 alkaenMyList.RemoveRange 3, 2"Toista matriisiluettelo näyttääksesi mitä on jäljellä ja missä hakemistopaikassa se on nytN = 0 MyList.Count - 1MsgBox MyList (N) & "Index" & NSeuraava N.End Sub

Huomaa, että jos käytät "RemoveAt" -toimintoa kohteen poistamiseen tietystä paikasta, niin heti kun kohde on poistettu, kaikki seuraavat indeksin sijainnit muuttuvat. Jos sinulla on useita poistoja käyttämällä indeksiasentoa, kannattaa aloittaa korkeimmalla indeksinumerolla ja siirtyä taaksepäin alas kohtaan nolla, jotta poistat aina oikean kohteen. Tällä tavalla sinulla ei ole ongelmaa

Ryhmäluettelon lajittelu

Toinen suuri etu kokoelmaan verrattuna on, että voit lajitella tuotteet nousevaan tai laskevaan järjestykseen.

Array List -objekti on ainoa Excel VBA: n objekti, jolla on lajittelumenetelmä. Lajittelutapa on erittäin nopea, ja tämä voi olla tärkeä näkökohta taulukkoluettelon käytössä.

Keräilykohteessa kaikkien kohteiden lajittelemiseksi vaadittiin jonkinlaista "out of the box" -ajattelua, mutta taulukkoluettelolla se on hyvin yksinkertaista.

"Lajittele" -menetelmä lajittelee nousevaan järjestykseen ja "Käänteinen" -menetelmä laskevaan järjestykseen.

12345678910111213141516171819202122 AlajoukkoListaesimerkki ()"Luo Array List -objektiDim MyList kuin uusi ArrayList"Lisää kohteita lajittelemattomaan järjestykseenMyList.Ad "Item1"MyList.Ad "Item3"MyList.Ad "Item2"’Lajittele tuotteet nousevaan järjestykseenMyList.Sort'Selaa kohteita näyttämään nouseva järjestysJokaiselle I MyListille"Näytä tuotteen nimiViestilaatikko I.Seuraavaksi minä’Lajittele tuotteet laskevaan järjestykseenMyList.Reverse"Toista kohteet laskevan järjestyksen mukaanJokaiselle I MyListille"Näytä tuotteen nimiViestilaatikko I.Seuraavaksi minäEnd Sub

Ryhmäluettelon kloonaus

Matriisiluettelossa on mahdollisuus luoda klooni tai kopio itsestään. Tästä on hyötyä, jos käyttäjä tekee muutoksia kohteisiin käyttöliittymän ja VBA -koodisi avulla, mutta sinun on säilytettävä kopio kohteista alkuperäisessä tilassaan varmuuskopiona.

Tämä voi tarjota käyttäjälle Kumoa -ominaisuuden. He ovat saattaneet tehdä muutokset ja haluavat palata alkuperäiseen luetteloon.

123456789101112131415 AliklooniEsimerkki ()"Määrittele kaksi objektia - matriisiluettelo ja objektiHimmennä MyList uutena ArrayList, MyList1 Object"Täytä ensimmäinen esine kohteillaMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"Kopioi Mylist MyListiin 1Aseta MyList1 = MyList.Clone”Toista MyList1 -todistus todistaaksesi kloonauksenJokaiselle I MyListille 1"Näytä tuotteen nimiViestilaatikko I.Seuraavaksi minäEnd Sub

"MyList1" sisältää nyt kaikki MyListin kohteet samassa järjestyksessä

Listajoukon kopioiminen perinteiseen VBA -taulukko -objektiin

Voit kopioida taulukkoluettelon normaaliin VBA -taulukkoon yksinkertaisella menetelmällä:

123456789101112131415 AlajoukkoEsimerkki ()"Luo matriisiluettelo -objekti ja tavallinen matriisiobjektiDim MyList As New ArrayList, NewArray As Variant'Täytä matriisiluettelo kohteillaMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3""Kopioi taulukkoluettelo uuteen taulukkoonNewArray = MyList.ToArray"Toista läpi uuden taulukon - huomaa, että taulukkoluettelo tarjoaa suurimman indeksinN = 0 MyList.Count - 1"Näytä tuotteen nimiMsgBox NewArray (N)Seuraava N.End Sub

Listajoukon kopioiminen laskentataulukkoalueelle

Voit kopioida taulukkoluettelosi tiettyyn laskentataulukkoon ja soluviittaukseen ilman tarvetta iteroida taulukkoluetteloa. Sinun tarvitsee vain määrittää ensimmäinen soluviittaus

123456789101112131415 AlaalueEsimerkki ()"Luo uusi matriisiluettelo -objektiDim MyList kuin uusi ArrayList’Lisää kohteita luetteloonMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3"’Tyhjennä kohdearkkiSheets ("Sheet1"). UsedRange.Clear"Kopioi kohteet rivilleSheets ("Sheet1"). Alue ("A1"). Muuta kokoa (1, MyList.Count) .Value = MyList.toArray"Kopioi kohteet alas sarakkeeseenSheets ("Sheet1"). Alue ("A5"). Muuta kokoa (MyList.Count, 1) .Arvo = _WorksheetFunction.Transpose (MyList.toArray)End Sub

Tyhjennä kaikki kohteet taulukkoluettelosta

On yksinkertainen toiminto (Tyhjennä) tyhjentää taulukon luettelo kokonaan

1234567891011121314 Sub ClearListExample ()"Luo matriisiluettelo -objektiDim MyList kuin uusi ArrayList’Lisää uusia kohteitaMyList.Ad "Item1"MyList.Ad "Item2"MyList.Ad "Item3""Näytä kohteiden määräMsgBox MyList.Count’Tyhjennä kaikki kohteetMyList.Clear"Näytä kohteiden määrä todistaaksesi, että selkeä on toiminutMsgBox MyList.CountEnd Sub

Tämä esimerkki luo kohteita matriisiluetteloon ja tyhjentää sitten matriisiluettelon. Viestiruudut osoittavat matriisiluettelon kohteiden määrän ennen ja jälkeen.

Matriisiluettelomenetelmien yhteenveto Excel VBA: lle

Tehtävä Parametrit Esimerkkejä
Lisää / muokkaa kohdetta Arvo MyList.Ad “Item1”
MyList (4) = “Item2”
Kloonaa matriisiluettelo Ei mitään Himmennä MyList objektina
Aseta MyList2 = MyList.Clone
Kopioi taulukkoon Ei mitään Dim MyArray vaihtoehtoina
MyArray = MyList.ToArray
Kopioiminen laskentataulukon alueelle (rivi) Ei mitään Sheets (“Sheet1”). Alue (“A1”). Resize (1, MyList.Count) .Value = MyList.ToArray
Kopioiminen laskentataulukkoalueelle (sarakkeeseen) Ei mitään Sheets (“Sheet1”). Alue (“A3”). Muuta kokoa (MyList.Count, 1). Value = WorksheetFunction.Transpose (MyList.ToArray)
Luoda "System.Collections.ArrayList" Himmennä MyList objektina
Aseta MyList = CreateObject ("System.Collections.ArrayList")
Julistaa Ei käytössä Himmennä MyList objektina
Etsi / tarkista, onko kohde olemassa Löytyvä kohde MyList.Contains (“Item2”)
Etsi kohteen sijainti ArrayListista 1. Etsi kohde. Dim -indeksi Ei niin kauan
2. Sijainti, josta haku aloitetaan. IndexNo = MyList.IndexOf ("Item3", 0)
IndexNo = MyList.IndexOf ("Item5", 3)
Hanki kohteiden määrä Ei mitään MsgBox MyList.Count
Lisää kohde 1. Indeksi - paikka, johon lisätään. MyList.Insert 0, "Item5"
2 Arvo - lisättävä objekti tai arvo. MyList.Insert 4, "Item7"
Lue kohde Indeksi - pitkä kokonaisluku MsgBox MyList.Item (0)
MsgBox MyList.Item (4)
Lue viimeksi lisätty kohde Indeksi - pitkä kokonaisluku MsgBox MyList.Item (list.Count - 1)
Lue ensin lisätty kohde Indeksi - pitkä kokonaisluku MsgBox MyList.Item (0)
Lue kaikki kohteet (jokaiselle) Ei käytössä Dim -elementti Vaihtoehtona
Jokaiselle MyList -elementille
MsgBox -elementti
Seuraava elementti
Lue kaikki kohteet (For) Indeksi - pitkä kokonaisluku Dim niin kauan
Jos i = 0 MyList.Count - 1
MsgBox i
Seuraavaksi minä
Poista kaikki kohteet Ei mitään MyList.Clear
Poista kohde paikaltaan Indeksoi sijainti, jossa kohde on MyList.RemoveAt 5
Poista kohde nimen mukaan Kohde, joka poistetaan ArrayListilta MyList.Poista "Item3"
Poista joukko kohteita 1. Indeksi - lähtöasento. MyList.RemoveRange 4,3
2. Laske - poistettavien kohteiden määrä.
Lajittele laskevaan järjestykseen Ei mitään MyList.Reverse
Lajittele nousevaan järjestykseen Ei MyList.Sort
wave wave wave wave wave