Avatar billede friis5 Novice
23. august 2007 - 09:03 Der er 6 kommentarer og
1 løsning

Sortere et array ang. som variant

Hvordan sorterer man et array som er angivet som en variant - det indeholder kun landekoder (dk, uk, fr, ...).

- takker.
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 09:08 #1
Den hurtige: Smid dit array i et ark, og sorter der.
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 09:13 #2
Den lange:
Sub test()
Dim MitArray, I As Long, Y As Long
MitArray = Range("A1:A6")

For I = 1 To UBound(MitArray)
    For Y = I To UBound(MitArray)
        If MitArray(I, 1) > MitArray(Y, 1) Then
            Temp = MitArray(I, 1)
            MitArray(I, 1) = MitArray(Y, 1)
            MitArray(Y, 1) = Temp
        End If
    Next
Next
Range("B1:B6") = MitArray
End Sub
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 09:18 #3
Bemærk at den sorterer lige så "dumt" som Excels egen "Sorter stigende":

V1
V10
V11
V12
V2
V3
V4
V5
V6
V7
V8
V9
Avatar billede friis5 Novice
23. august 2007 - 10:44 #4
Ville gerne kunne bruge noget a la dette:

Sub SortTest()
    Dim ss(2) As String
    Dim i As Long

    ss(0) = "orange"
    ss(1) = "apple"
    ss(2) = "banana"
    WordBasic.SortArray ss()

    For i = 0 To 2
        Debug.Print ss(i)
    Next i

End Sub

"SortArray will sort an array declared as such, but it will not sort an array that is contained in a Variant. If you create an array like this:

Dim vArray as Variant
vArray = Array("orange", "apple", "banana")

SortArray will not sort it."

Og mit array er en variant....
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 11:06 #5
Der er ikke nogen funktion i Exel der hedder SortArray. Det må være en hjemmelavet en. Fungerer det jeg lavede ikke godt nok for dig?
Avatar billede friis5 Novice
23. august 2007 - 11:40 #6
Undskyld jo den virkede ganske fint efter en lille modifikation

'Sorterer Array så det bliver nemmere at finde landene
  For i = 1 To UBound(InputArray1)
    For Y = i To UBound(InputArray1)
        If InputArray1(i) > InputArray1(Y) Then
            Temp = InputArray1(i)
            InputArray1(i) = InputArray1(Y)
            InputArray1(Y) = Temp
        End If
    Next
  Next

(ellers skrev den "subscript out of range")

Takker
Avatar billede gider_ikke_mere Nybegynder
23. august 2007 - 14:30 #7
Det gik vidst lidt hurtigt. Sådan skal den være:

Sub test()
Dim MitArray, I As Long, Y As Long
MitArray = Range("A1:A7")

For I = 1 To UBound(MitArray) - 1
    For Y = I + 1 To UBound(MitArray)
        If MitArray(I, 1) > MitArray(Y, 1) Then
            Temp = MitArray(I, 1)
            MitArray(I, 1) = MitArray(Y, 1)
            MitArray(Y, 1) = Temp
        End If
    Next
Next
Range("B1:B7") = MitArray
End Sub

Grunden til din fejl er at du har haft et en-dimentionelt array. I så fald:

For I = 1 To UBound(MitArray) - 1
    For Y = I + 1 To UBound(MitArray)
        If MitArray(I) > MitArray(Y) Then
            Temp = MitArray(I)
            MitArray(I) = MitArray(Y)
            MitArray(Y) = Temp
        End If
    Next
Next
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