Hallo,
ein Listenfeld zu sortieren ist nicht so einfach. Ich habe mal ein Beispiel geschriebe, wie es nach der BubbleSort-Methode funktioniert:
1. Die Methode, die hinter dem Commandbutton "sortieren" steht:
Private Sub CommandButton1_Click()
Dim arrValues() As String
ReDim arrValues(Me.ListBox1.ListCount, Me.ListBox1.ColumnCount)
Dim i As Integer, j As Integer
Dim tmp As String
For i = 0 To Me.ListBox1.ListCount - 1
For j = 0 To Me.ListBox1.ColumnCount - 1
arrValues(i, j) = Me.ListBox1.List(i, j)
Next j
Next i
Call modSortList.sort_array_alphabetical(arrValues(), 4)
With Me.ListBox1
.Clear
For i = 0 To UBound(arrValues(), 1)
.AddItem (arrValues(i, 0))
For j = 1 To UBound(arrValues(), 2)
.List(i, j) = arrValues(i, j)
Next j
Next i
End With
End Sub
2. Das Modul "modSortList"
Public Sub sort_array_alphabetical(ByRef arrValues() As String, ByVal Sort_by_Column As Integer)
Dim arrTmp() As String
ReDim arrTmp(UBound(arrValues(), 2) - 1)
Dim i As Integer, j As Integer, k As Integer
For i = UBound(arrValues(), 1) - 1 To LBound(arrValues(), 1) Step -1
For j = LBound(arrValues(), 1) To i
If isBigger(arrValues(j, Sort_by_Column - 1), arrValues(j + 1, Sort_by_Column - 1)) Then
For k = LBound(arrValues(), 2) To UBound(arrValues(), 2) - 1
arrTmp(k) = arrValues(j, k)
Next k
For k = LBound(arrValues(), 2) To UBound(arrValues(), 2) - 1
arrValues(j, k) = arrValues(j + 1, k)
Next k
For k = LBound(arrValues(), 2) To UBound(arrValues(), 2) - 1
arrValues(j + 1, k) = arrTmp(k)
Next k
End If
Next j
Next i
End Sub
Private Function isBigger(ByVal value1 As String, ByVal value2 As String) As Integer
Dim i As Integer, j As Integer
If Len(value1) < Len(value2) Then
i = Len(value1)
Else
i = Len(value2)
End If
For j = 1 To i
If Asc(Mid(value1, j, 1)) > Asc(Mid(value2, j, 1)) Then
isBigger = True
Exit Function
ElseIf Asc(Mid(value1, j, 1)) < Asc(Mid(value2, j, 1)) Then
isBigger = False
Exit Function
End If
Next j
isBigger = False
End Function
Schaue dir die einzelnen Funktionen bitte genau an und versuche zu verstehen, was dort passiert ;)
Beim Funktionsaufruf "modSortList..." steht der zweite Parameter (in meinem Beispiel Wert "4") für die Spalte, die sortiert werden soll.
Viel Spaß beim implementieren, über eine kurze Rückmeldung würde ich mich freuen.
Viele Grüße SJ
|