Spalten sortieren, Nullen ans Ende stellen

Hallo Reinhard,

im Beispielcode steht ‚0 bis 20‘. Wie bekomme ich das variabel? Mit festen Werten ist das zu unflexibel.

Gruß Rainer

Hallo Reinhard,

Wenn du so nett bist das zu codieren dann teste ich das mal in
Excel 2007 mit den 12 Spalten aber 1 Mio Zeilen und messe die
verbrauchte Zeit.

Ich tippe wie gesagt darauf daß mein Code, genauer die
benutzung eingebauter Excelfunktionen schneller ist als eine
Lösung die einen Zellenbereich in ein Array einliest, dieses
im Code sortiert mit QuickSort und zurückschreibt.
Aber wissen tue ich das nicht. So oder so wäre es interessant
die beiden jeweiligen laufzeiten zu wissen.

wenn schon Quicksort eingesetzt werden soll, ist der Umweg über ein Array natürlich der schlechteste Weg. Dann wird der Inhalt jeder Zelle drei mal angefasst.

Wenn eine Tabelle sortiert werden soll, dann gehören ja meist Zeilen zusammen, sollen nicht auseinander gerissen werden.

Wenn Du also Quicksort testen möchtest, dann hätte ich als Basis gern zum einen die Info, wonach sortiert werden soll und, bevor ich mich durch die Excel Hilfe quäle, eine Funktion, die zwei Zeilen in Excel tauscht. Ach ja … Und noch, wie ich ohne ‚Cells‘ den Inhalt einer Zelle lesen. Der Zusammengang zwischen den ‚eigenartigen‘ Range()-Angaben und Cells(x,y) ist mir noch nicht klar.

Gruß Rainer

im Beispielcode steht ‚0 bis 20‘. Wie bekomme ich das
variabel? Mit festen Werten ist das zu unflexibel.

Hallo Rainer,

Sub Sor()
Dim Feld, Zeile As Long, Spalte As Long
Feld = Range("A2:L21")
For Spalte = 2 To 12 Step 10 ' Spalte 2 = Spalte B, Spalte 12 = Spalte L
 For Zeile = LBound(Feld, 1) To UBound(Feld, 1)
 Feld(Zeile, Spalte) = Chr(64 + Spalte) & Zeile
 Next Zeile
Next Spalte
Range("A2:L21") = Feld
End Sub

Hallo Rainer,

Wenn eine Tabelle sortiert werden soll, dann gehören ja meist
Zeilen zusammen, sollen nicht auseinander gerissen werden.

ja.

Wenn Du also Quicksort testen möchtest, dann hätte ich als
Basis gern zum einen die Info, wonach sortiert werden soll

Erst nach der 2-ten Spalte, dann nach der zwölften (B und L)

und, bevor ich mich durch die Excel Hilfe quäle, eine
Funktion, die zwei Zeilen in Excel tauscht.

Siehe nachfolgenden Code.

Ach ja … Und
noch, wie ich ohne ‚Cells‘ den Inhalt einer Zelle lesen. Der
Zusammengang zwischen den ‚eigenartigen‘ Range()-Angaben und
Cells(x,y) ist mir noch nicht klar.

Der Range-Ausdruck „D5“ in Range(„D5“) bedeutet einen zusammengestzten String aus Spaltenbezeichner/Spaltennamen und der Zeilennummer.

Cells() hat die Syntax Cells(Zeilennummer,Spaltennummer)
oder auch
Cells(Zeilennummer,Spaltenname)

Range(„D5“) in Cells-Schreibweise ist dann
Cells(5,4)
bzw.
Cells(5,„D“)

Aber ich habe nochmal darüber nachgedacht, wir kommen da nie auf einen aussagekräftigen Geschwindigkeitsvergleich.
Denn ich benutze in meinem Code den Vba-Befehl „Sort“.
Und der Code für Sort steht ja irgendwo in Excel, in einer DDL oder sonstwo.
Da komme ich ja nicht ran und weiß nicht wie ich da ermitteln kann
wie lange der reine Sortieralgorhytmus dauert.

Messe ich wie lange Sort gebraucht hat so ist ja im messwert auch die Zeit drinnen die der Sort-Code braucht um die daten zusammenzusuchen und dann in Zellen zu schreiben.

Gruß
Reinhard

Sub test()
Call Tausch(1, 2)
End Sub

Sub Tausch(ByVal Zeile1 As Long, ByVal Zeile2 As Long)
Dim Merker As Variant
Merker = Rows(Zeile1).Value
Rows(Zeile1).Value = Rows(Zeile2).Value
Rows(Zeile2) = Merker
End Sub