Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1772to1776
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

Array QuickSort lässt Zeile aus

Array QuickSort lässt Zeile aus
18.07.2020 23:57:52
Theo
Hallo zusammen,
in meiner Datei (https://www.herber.de/bbs/user/139158.xlsm) wollte ich ein QuickSort Makro ausprobieren um es in einem größeren Projekt zu verwenden. Dass ich im Beispiel keine Array erstellen müsste ist mir bewusst, aber die Datei dient nur Testzwecken.
So halb funktioniert das Makro auch, allerdings wird nach dem dritten Wert eine Zeile frei gelassen und der Rest verschiebt sich. Ich habe keine Ahnung woran das liegen könnte. Kann mir jemand sagen wo ich einen Fehler gemacht habe?

Sub sortieren()
Dim test_array(0 To 100)
Dim i As Long
Dim j As Long
Dim Test As Worksheet
Set Test = Worksheets("Sort_Test")
Test.Range("C5:C104").ClearContents
For i = 0 To 100
test_array(i) = Test.Cells(5 + i, 2).Value
Next i
Call QuickSort(test_array, 0, UBound(test_array))
For j = 0 To 100
Test.Cells(5 + j, 3).Value = test_array(j)
Next j
End Sub

Und hier das QuickSort Makro

Public Sub QuickSort(vArray As Variant, inLow As Long, inHi As Long)
Dim pivot   As Variant
Dim tmpSwap As Variant
Dim tmpLow  As Long
Dim tmpHi   As Long
tmpLow = inLow
tmpHi = inHi
pivot = vArray((inLow + inHi) \ 2)
While (tmpLow  inLow)
tmpHi = tmpHi - 1
Wend
If (tmpLow 

Gruß,
Theo

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Geht doch ;-)
19.07.2020 04:57:28
Martin
Hallo Theo,
ich habe deinen Code mal ein wenig gekürzt, jetzt sollte es klappen:
Sub sortieren()
Dim test_array()
Dim Test As Worksheet
Set Test = Worksheets("Sort_Test")
Test.Range("C5:C104").ClearContents
test_array = Application.Transpose(Range("B5:B104"))
Call QuickSort(test_array, 1, UBound(test_array))
Range("C5").Resize(UBound(test_array)) = Application.Transpose(test_array)
End Sub
Viele Grüße
Martin
AW: Geht doch ;-)
19.07.2020 11:23:51
Theo
Hey Martin,
super. Das funktioniert! Leider habe ich das Problem, dass in meinem Beispiel die test_array mit 100 Werten gefüllt wird und irgendwie funktioniert das nicht mit der Schreibweise Dim test_array(). Was ebenfalls komisch ist, ist dass bei mir nach Anpassung nur negative Werte ausgegeben werden. Der Rest fehlt komischerweise einfach.
Anzeige
Falsche Größe deines Arrays
19.07.2020 11:45:32
Martin
Hallo Theo,
bei deiner Variante hatte das Array ganze 101 Felder, da 0 bereits das erste Feld war. Dein Code müsste also so aussehen:
Sub sortieren()
Dim test_array(0 To 99)
Dim i As Long
Dim j As Long
Dim Test As Worksheet
Set Test = Worksheets("Sort_Test")
Test.Range("C5:C104").ClearContents
For i = 0 To 99
test_array(i) = Test.Cells(5 + i, 2).Value
Next i
Call QuickSort(test_array, 0, UBound(test_array))
For j = 0 To 99
Test.Cells(5 + j, 3).Value = test_array(j)
Next j
End Sub
Viele Grüße
Martin

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige