Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1088to1092
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Probleme bei Sortierung von 2-dimensionalem Array

Probleme bei Sortierung von 2-dimensionalem Array
2-dimensionalem
Hallo,
ich habe leider ein Problem bei der Sortierung eines 2-dimensionalen Arrays. Die Daten an das Array werden von einer Listbox übergeben. Ich erhalte immer die Fehlermeldung "Fehler beim Kompilieren: Unverträglicher Typ: Datenfeld oder benutzerdefinierter Typ erwartet". Der Text "Arr" in der Zeile "Call prcSort(arrK, Arr)" wir bei der Fehlermeldung markiert.
Hier muss das Problem irgendwo liegen:
Private Sub Label7_Click()
Dim Arr As Variant
Arr = ListBox1.List()
'MsgBox Arr(10, 1)
Dim arrK As Variant
arrK = Array(1, 2)
Call prcSort(arrK, Arr)
ListBox1.List() = Arr
End Sub

Ich wäre für Ideen sehr dankbar!
Übrigens hiermit sortiere ich, das folgende Makro geht auch (bei allen anderen zu sortierendes Arrays):
'Quicksort mit mehreren Sortierkriterien
' Parameter: arrK = Sortkey(s)
' arrD = zu sortierendes Array
' Ist die Zahl positiv, wird aufsteigend, sonst absteigend sortiert.
Public Sub prcSort(arrK As Variant, arrD() As Variant)
Dim iiK As Integer, nnB As Long, nnC As Long, nArrZ() As Long
Dim nnZ As Long, nnA As Long, vntTemp As Variant
ReDim nArrZ(0 To 1, 0 To UBound(arrD) * 2)
nArrZ(0, 0) = LBound(arrD)                ' Array für den 1. Sortierlauf
nArrZ(0, 1) = UBound(arrD)
nnZ = 1
For iiK = LBound(arrK) To UBound(arrK)
If arrK(iiK)  0 Then                 ' Wenn eine Spalte angegeben
nnA = -1
For nnB = 0 To nnZ Step 2           ' Schleife zum sortieren der Bereiche
If nArrZ(0, nnB)  nArrZ(0, nnB + 1) Then   ' Sortieren, wenn Zeilenzahl > 1
Call prcQSort(CLng(nArrZ(0, nnB)), _
CLng(nArrZ(0, nnB + 1)), CInt(Abs(arrK(iiK))), _
CBool(arrK(iiK) > 0), arrD())
nnA = nnA + 2                       ' sortierten Bereich merken
nArrZ(1, nnA - 1) = nArrZ(0, nnB)
nArrZ(1, nnA) = nArrZ(0, nnB + 1)
End If
Next
nnZ = -1
For nnB = 0 To nnA Step 2  'Durchsuchen der sortierten Spalte nach Wertewechsel
vntTemp = arrD(nArrZ(1, nnB), Abs(arrK(iiK))) '1. Zeile des zu sort. Bereichs
nnZ = nnZ + 1
nArrZ(0, nnZ) = nArrZ(1, nnB)
For nnC = nArrZ(1, nnB) To nArrZ(1, nnB + 1)  ' Suche nach Wechsel im Bereich
If vntTemp  arrD(nnC, Abs(arrK(iiK))) Then
nnZ = nnZ + 2
nArrZ(0, nnZ - 1) = nnC - 1
nArrZ(0, nnZ) = nnC
vntTemp = arrD(nnC, Abs(arrK(iiK)))
End If
Next
nnZ = nnZ + 1                                 ' letzte Zeile im Bereich
nArrZ(0, nnZ) = nArrZ(1, nnB + 1)
Next nnB
End If
Next iiK
End Sub

Private Sub prcQSort(lngLB As Long, lngUB As Long, iiZ As Integer, _
bAufAb As Boolean, arrD())
Dim iiK As Integer, nnB As Long, nnC As Long, vntTemp As Variant, vntBuffer As Variant
nnB = lngLB
nnC = lngUB
vntBuffer = arrD((lngLB + lngUB) \ 2, iiZ)
Do
If bAufAb Then
Do While arrD(nnB, iiZ)  vntBuffer: nnB = nnB + 1: Loop
Do While vntBuffer > arrD(nnC, iiZ): nnC = nnC - 1: Loop
End If
If nnB  arrD(nnC, iiZ) Then
For iiK = LBound(arrD, 2) To UBound(arrD, 2)
vntTemp = arrD(nnB, iiK)
arrD(nnB, iiK) = arrD(nnC, iiK)
arrD(nnC, iiK) = vntTemp
Next
End If
nnB = nnB + 1
nnC = nnC - 1
ElseIf nnB = nnC Then
nnB = nnB + 1
nnC = nnC - 1
End If
Loop Until nnB > nnC
If lngLB 

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
Lösung gefunden, aber neues Problem:
23.07.2009 14:43:19
Martin
Hallo, ich habe die Lösung nun doch selbst gefunden:
Private Sub Label7_Click()
Dim Arr()
Arr = ListBox1.List()
Call prcSort(Array(1), Arr)
ListBox1.List() = Arr
End Sub
Nun habe ich aber ein neues Problem: Wenn ich nach der ersten Spalte "0" sortieren will, klappt es nicht. Hat dafür vielleicht jemand eine Idee?
Viele Grüße
Martin
Anzeige

38 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige