[Excel VBA] Range inlezen in array en sorteren

Pagina: 1
Acties:

  • mrbombastic
  • Registratie: Oktober 2002
  • Laatst online: 13-02 21:29
Ik wil het percentiel van een bereik goed bepalen, dus niet met de functie percentiel.
Hiervoor moet ik een dataset sorteren (in VBA, ik wil de oorspronkelijke volgorde aanhouden in Excel).
Dit lukt echter niet.

Ik heb de volgende voorbeelcode.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Sub Main()
   Dim myArray(4) As Variant
    
   myArray(0) = 9
   myArray(1) = 11
   myArray(2) = 7
   myArray(3) = 4
   
   Call QSort(myArray, 0, 3)

   Range("A1:A4") = Application.WorksheetFunction.Transpose(myArray)

End Sub

Sub QSort(sortArray() As Variant, ByVal leftIndex As Integer, ByVal rightIndex As Integer)
    Dim compValue As Double
    Dim I As Integer
    Dim J As Integer
    Dim tempNum As Double
    
    I = leftIndex
    J = rightIndex
    compValue = sortArray(Int((I + J) / 2))

    Do
        Do While (sortArray(I) < compValue And I < rightIndex)
            I = I + 1
        Loop
        Do While (compValue < sortArray(J) And J > leftIndex)
            J = J - 1
        Loop
        If I <= J Then
            tempNum = sortArray(I)
            sortArray(I) = sortArray(J)
            sortArray(J) = tempNum
            I = I + 1
            J = J - 1
        End If
    Loop While I <= J

    If leftIndex < J Then QSort sortArray(), leftIndex, J
    If I < rightIndex Then QSort sortArray(), I, rightIndex
End Sub


Nu wil ik het eerste stukje code aanpassen in
code:
1
2
3
4
5
Sub Main()
   Dim myArray(4) As Variant
   
   myArray = Range("C1:C4").Value
...


Dan krijg ik echter de foutmelding. Compileerfout: toewijzen aan een matrix is niet mogelijk.

En als ik de code aanpas in
code:
1
2
3
4
5
Sub Main()
   Dim myArray As Variant
   
   myArray = Range("C1:C4").Value
...

dan krijg ik een andere foutmelding. Typen komen niet overeen. Er wordt een matrix of door de gebruiker gedefinieerd type verwacht.

Before me there was many, after me there will be none. I'm the one!