Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1236to1240
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
Mehrere Spalten sortieren
Dieter(Drummer)
Hi VBA Spezialisten,
ich suche ein Makro, dass mir im aktuellen Sheet die Spalten B bis F aufsteigend sortiert, also Spalte B hat die kleinste Zahl und Spalte G die größte Zahl. Es können mal mehr oder weiniger Zeilen sein.
Habe im Internet gesucht und habe nicht entsprechendes gefunden.
Hier mal ein Muster von meinen Bespieldaten:
Zielblatt
 ABCDEFG
1Lfd. Nr.Zahl 1Zahl 2Zahl 3Zahl 4Zahl 5Zahl 6
2133324182642
322134282348
4347830474211
5             

definierte Namen
Name Bezieht sich auf Tabelle Z1S1-Formel
_FilterDatabase=Zielblatt!$A$1:$G$1Zielblatt=Zielblatt!Z1S1:Z1S7

Tabellendarstellung in Foren Version 5.46


Wenn ich z.B. den Sortierbereich B2-G4 markiere und dann Aufsteigend nach Spalten sortieren lasse, wird nur die erste Zeile davon sortiert.
Danke für's drum kümmern und evtl. Hilfe
Gruß, Dieter(Drummer)
AW: Frage besser? Zeilensortierung in mehr Spalten
14.11.2011 14:18:27
Dieter(Drummer)
Hi Vba-Spezialisten,
ich möchte Zahlen in Spalte B bis G je Zeile sortieren. Je Zeile kleinste Zahl in Spalte B und größte in Spalte G.
Es kann ein unterschiedliche Anzahl Zeilen vorkommen.
Bei Daten/Sortieren wird nur die erste Zeile hier Zeile 2, Spalte B bis G, sortiert, obwohl B2:G6 z.B. markiert ist.
Ich suche ein Makro, das bei unterschiedlicher Zeilanzahl den Bereich der Spalten B bis G je Zeile numerisch aufsteigend sortiert.
Freue mich auf eine Hilfe.
Gruß, Dieter(Drummer)
AW: Frage besser? Zeilensortierung in mehr Spalten
14.11.2011 14:41:56
Rudi
Hallo,
teste mal:
Sub xxxx()
Dim iRow As Long, arrTmp
With Selection
For iRow = 1 To .Rows.Count
arrTmp = Application.Transpose(Application.Transpose(.Rows(iRow)))
QuickSort arrTmp
.Rows(iRow) = Application.Transpose(Application.Transpose(arrTmp))
Next
End With
End Sub
Sub QuickSort(ByRef DasArray, Optional ErsteZeile, Optional LetzteZeile)
On Error Resume Next
Dim UnterGrenze As Long, OberGrenze As Long
Dim AktuellerWert, GemerkterWert As Variant
If IsMissing(ErsteZeile) Then
ErsteZeile = LBound(DasArray, 1)
End If
If IsMissing(LetzteZeile) Then
LetzteZeile = UBound(DasArray, 1)
End If
UnterGrenze = ErsteZeile
OberGrenze = LetzteZeile
AktuellerWert = DasArray((ErsteZeile + LetzteZeile) / 2)
Do While (UnterGrenze  AktuellerWert And OberGrenze > ErsteZeile)
OberGrenze = OberGrenze - 1
Loop
If (UnterGrenze  ErsteZeile) Then Call QuickSort(DasArray, ErsteZeile, OberGrenze)
If (UnterGrenze 

Gruß
Rudi
Anzeige
AW: Frage besser? Zeilensortierung in mehr Spalten
14.11.2011 14:58:43
Dieter(Drummer)
Hi Rudi,
Danke für dien Rückmeldung und Makro. Es läuft sehr lange und ändert aber nichts. Ich habe es in ein Modul eingefügt. Sende hier mal meine Testdatei mit deinem Makro. Bei ESC steht es in Zeile UNZERGRENZE. Evtl. kannst Du es FIT machen.
https://www.herber.de/bbs/user/77499.xls
Danke für's drum kümmern.
Gruß, Dieter(Drummer)
AW: Frage besser? Zeilensortierung in mehr Spalten
14.11.2011 15:02:04
Rudi
Hallo,
Es läuft sehr lange
Zeit nicht messbar, so schnell.
Der Code läuft über die Markierung. So wie du wolltest.
Gruß
Rudi
AW: Frage besser? Zeilensortierung in mehr Spalten
14.11.2011 15:13:10
Dieter(Drummer)
Hi Rudi,
Danke für deine schnelle Hilfe und dein Makro. Ich lass es durchlaufen bis das Ergebnis folgt. Gebe dir dann noch Rückmeldung.
Vielen Dank.
Gruß, Dieter(Drummer)
Anzeige
AW: @Rudi - Frage zur Makrolaufzeit
14.11.2011 15:49:56
Dieter(Drummer)
Hi Rudi,
habe es jetzt ca. 30 Minuten laufen lassen, bisher noch kein Ergebnis der Sortierung. Da es in meiner Testdatei ja nur die Zeilen ab inkl. Zeile 7 leer sind, kann man da nicht erst im Makro abfragen wieviel Zeilen belegt sind und dadurch evtl. die Laufzeit des Makros kürzen?
Wie im Makro das wohl eingebaut werden muss, kann ich wohl nicht machen.
Gruß, Dieter(Drummer)
AW: @Rudi - Frage zur Makrolaufzeit
14.11.2011 16:03:18
Rudi
Hallo,
ich bin davon ausgegangen, dass du den zu sortierenden Bereich markierst.
Ohne Markierung:
Sub xxxx()
Dim iRow As Long, arrTmp
For iRow = 2 To Cells(Rows.Count, 1).End(xlUp).Row
arrTmp = Application.Transpose(Application.Transpose(Cells(iRow, 2).Resize(, 6)))
QuickSort arrTmp
Cells(iRow, 2).Resize(, 6) = Application.Transpose(Application.Transpose(arrTmp))
Next
End Sub

Gruß
Rudi
Anzeige
AW: @Rudi - Sorry Makro ist prima. Aber ...
14.11.2011 16:05:44
Dieter(Drummer)
Hi Rudi,
hatte nicht gewußt, dass ich den zu sortierenden Bereich händisch markieren muss. So läuft es prima! DANKE!
Kannst Du das Makro auch so anpassen, das der belegte und zu sortierende Bereich, hier die Zellen B2:G6 atomatisch gefunden und sortuiert wird? Es können natürlich auch mal mehr Zeilen sein, aber es sind immer die Spalten B bis G.
Trotzdem schon mal vielen Dank für deine Hilfe!
Gruß, Dieter(Drummer)
AW: @Rudi - Sorry Makro ist prima. Aber ...
14.11.2011 16:09:48
Rudi
Hallo,
das sortiert so lange, wie in A eine Nr eingetragen ist.
Gruß
Rudi
AW: Danke Rudi. Hast Du schon erledigt!
14.11.2011 16:11:30
Dieter(Drummer)
... hatte zu früh geschrieben und Du hast mein Problem schon in allen Punkten gelöst. Einfach toll!
Danke dir und einen erfreulichen, restlichen Tag.
Gruß, Dieter(Drummer)
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige