Avatar billede folj Forsker
28. september 2017 - 10:16 Der er 13 kommentarer

Excel VBA: Simpel sortering i et array

Hej eksperter!

Jeg har kreeret en procedure til eget brug hvor jeg skal sortere et array.

Jeg forsøger at gøre det på den helt simple måde - i stil med håndsortering.
Jeg tager 2 poster ad gangen og sammenligner hvilken værdi der er størst, og bytter dem rund hvis nødvendigt. Sådan løber jeg hele arrayet igennem, og sammenligner kun 2 poster der kommer lige efter hinanden, så hvia den første post er større end den næste så byttes de rundt

Så forestiller jeg mig at det kun er st spørgsmål om at køre dette gennem løb tilstrækkeligt mange gange, og så vil jeg altid stå tilbage med at fuldt sorteret array.

Mit spørgsmål er nu:
Er der en begrænsning i denne metode?
Det kunne måske være antal poster i arrayet, eller antal gange jeg gennemløber…

Med mine hurtige tests med mindre arrays, så er jeg end med rigtig sortering, men jeg håber nogen kan udfordre metoden og spotte hvad der skal til for at metoden fejler, eller ikke fuldender sortering.

Jeg ved godt at der kan findes nogle færdige procedurer på nettet, til at klare det (eksempelvis bubble sort og vist også andre lignende)  men det er vigtigt at jeg selv forstår hver eneste linje, fordi jeg senere skal have en kolonne mere med i min sortering, da jeg har en tilhørende værdi i kolonne 2, som jeg skal bruge, sorteret efter de tilhørende talværdier.

Sub TestSort()

Dim ArrayUnsorted As Variant
Dim ArraySorted As Variant
Dim str As String

ArrayUnsorted = Array(8, 2, 4, 5, 9, 5, 4, 2)
ArraySorted = ArrayUnsorted ' kopierer arrayet til et arbejdskopi der skal ende med at blivedet sortedede array

For ii = 1 To UBound(ArrayUnsorted, 1)  ' jeg vælger at køre sorteringsloopet lige så mange gange som der er poster i arrayet
  For i = 0 To UBound(ArrayUnsorted, 1) - 1 ' her gennemløber vi arrayet går vi ind og sammenligner jeg 2 poster ad gangen, og smider værdierne ind i nogle midlertidige variabler.

    ' og fra nu af er det kun det sorterede array vi arbejder med - det skal ihvertfald ende emed at blive sorteret undevejs
    If ArraySorted(i) > ArraySorted(i + 1) Then
      ' Hvis ArraySorted(i) var større end  ArraySorted(i + 1), så skal de jo byttes rundt
      ' så vil jeg smide de 2 sammenlignede values ind i nogle midlertidige variabler
      SwabValue1 = ArraySorted(i) ' bytter rundt på de 2 værdier i arrayet
      SwabValue2 = ArraySorted(i + 1) ' bytter stadig rundt på de 2 værdier i arrayet
     
      ArraySorted(i + 1) = SwabValue1
      ArraySorted(i) = SwabValue2
    End If

  Next i
Next ii

' for at teste sorteringen gennemløber jeg det sorterede array, og "udskriver" med msgbox i hvert loop - så skal de gerne være sorteret stigende
For i = 0 To UBound(ArraySorted, 1)
  MsgBox ArraySorted(i)
Next i

End Sub


Jeggentager lige at jeg håber nogen kan udfordre metoden og spotte hvad der skal til for at metoden fejler, eller ikke fuldender sortering.

Jeg har blot udfordret metoden med at start-array med 8 poster
Men er det antal poster der bliver begrænsningen, eller hvilke forhold kan påvirke sorteringsmetoden?
Avatar billede Dan Elgaard Ekspert
28. september 2017 - 10:32 #1
Avatar billede folj Forsker
28. september 2017 - 10:47 #2
@Dan Elgaard:
Efter adskillige minutter hvor browseren blot skriver: "Waiting for Excelgaard.dk" så opgiver den utålmodige burger jo.
Avatar billede finb Ekspert
28. september 2017 - 10:48 #3
Din metode bliver for langsom ved mange tal.
Avatar billede folj Forsker
28. september 2017 - 10:57 #4
Finb: Kan du ikke uddybe nærmere...

Når den bliver fordret med hele arrayet fra starten, så skal den jo ikke ind og hente data I dataark undervej. Det ville gøre gennemløb sløvt hvis det var tilfældet.

Hvad er det så der sinker den.
Et array kan jo gennemløbes ligeså så hurtigt som et knips med fingrene.
Avatar billede folj Forsker
28. september 2017 - 11:07 #5
@Dan Elgaard:
Og den bliver bare ved med at skrive:  "Waiting for excelgaard.dk".

Jeg har også prøvet at lukke browser og forsøge igen, uden bedre resultat.
Jeg har også været ude og hente kaffe flere gange.

Nogle ville svare, at sådan en pc har jeg også haft, og den smed jeg ud, men det ser altså ikke ud til at være et problem der knitter sig til min pc eller min browser.
Avatar billede Dan Elgaard Ekspert
28. september 2017 - 11:11 #6
Underligt for linket virker hos mig - har lige prøvet på 2 forskellige computere, herude på arbejde..
Avatar billede Dan Elgaard Ekspert
28. september 2017 - 11:13 #7
Bruger du Google Chrome?
Er der ikke noget med, at den netop er lavet om, så den kun vil godtage 'https' links?
Bare et gæt...
Avatar billede folj Forsker
28. september 2017 - 12:05 #8
@Dan Elgaard:

Nej jeg bruger gode gamle Microsoft Explorer.
Her på Novo Nordisk er vi jo nærmest gift sig med Microsoft.

Nu hvor din henvisning ikke er tilgængelig for mig, så vil jeg hellere høre lidt nærmere om hvilket princip du vil bruge til sortering...

Jeg mener at have set andre der laver noget lignende, men hvis du bruger andre principper så hører jeg gerne herom.

Som jeg også skrev I min spørgsmål, så er det vigtigt at jeg selv forstår hver eneste linje, fordi jeg senere skal have en kolonne mere med i min sortering, da jeg har en tilhørende værdi i kolonne 2, som jeg skal bruge, sorteret efter de tilhørende talværdier. Værdien I kolonne 2 skal altså også byttes rundt hver gang jeg bytter rund I kolonne 1.

Kan du eventuelt beskrive dit sorterings-princip i mere generelle vendinger.
Avatar billede Dan Elgaard Ekspert
28. september 2017 - 18:04 #9
Nu har jeg prøvet ude på arbejdet med:

- Internet Explorer på Windows 7
- Internet Explorer på Windows 10

Og, herhjemme med:

- Internet Explorer på Windows 7
- Internet Explorer på Windows 8.1

ALLE virker uden problemer!

Har du prøvet, at gå ind på basis URLen, www.EXCELGAARD.dk ?

Ellers må du have fat i din IT-afdeling, for så er det in'house I har sat noget op, der blokerer?
Avatar billede excelent Ekspert
28. september 2017 - 20:00 #10
Link virker fint her
ms edge
Avatar billede Dan Elgaard Ekspert
29. september 2017 - 07:27 #11
Har lige prøvet igen med 'Edge' og 'Firefox' - linket virker...
...jeg er bange for, at fejlen er i din ende - du må have fat i jeres IT afdeling.
Avatar billede folj Forsker
29. september 2017 - 12:07 #12
@Dan Elgaard:

Selvom du har brugt en masse energi på at teste om din hjemmeside er tilgængelig eller ej, så blive ´r jeg nødt til lige at holde fast i mit udgangspunkt.

Jeg efterlyser jo ikke en anden metode til at lave sorteringen, for jeg er afhængig af at jeg selv forstår hver eneste linje, fordi jeg senere skal have en kolonne mere med i min sortering, da jeg har en tilhørende værdi i kolonne 2, som jeg skal bruge, sorteret efter de tilhørende talværdier. Værdien I kolonne 2 skal altså også byttes rundt hver gang jeg bytter poster rundt I kolonne 1.

Det eneste jeg efterlyser det nogle input om principper for sortering, og om min metode har nogle svagheder som jeg ikke selv har gennemskuet.
Det har jeg endnu ikke fået nogen kommentar på, når jeg ser bort fra finb's kommentar om at den vil blive for langsom, men da han slet ikke har kunnet uddybe den påstand, så tager jeg den ikke seriøst. Jeg vælger at se det blot som et ukvalificeret gæt.
Avatar billede Dan Elgaard Ekspert
29. september 2017 - 17:06 #13
Du finder kvalificeret og gennemgående gennemgang i mit link - take it or leave it...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester