Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Einen markierten Bereich sortieren

Forumthread: Einen markierten Bereich sortieren

Einen markierten Bereich sortieren
18.07.2024 10:01:43
BTausMG
Hallo Leute.
Es klingt einfach aber tatsächlich habe ich weder hier noch im Netz eine Antwort auf mein Problem gefunden.

Ich markiere einen beliebigen(!) Bereich in meiner Tabelle und möchte diesen dann, sagen wir nach 2 Spalten nacheinander sortieren.
Das ganze soll auf "Knopfdruck" beliebig oft - also in einem vba-Skript passieren.

Das aufgezeichnete Makro dazu sieht so aus:
    ActiveWorkbook.Worksheets("DBx").Sort.SortFields.Clear

ActiveWorkbook.Worksheets("DBx").Sort.SortFields.Add2 Key:=Range("N29:N41"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("DBx").Sort.SortFields.Add2 Key:=Range("P29:P41"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("DBx").Sort
.SetRange Range("A29:BL41")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With


Die Range sind also Fix (x29:y41).

Wie kriege ich es hin, dass das Sortieren in dem gerade markierten Bereich passiert?

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Einen markierten Bereich sortieren
18.07.2024 10:40:31
GerdL
Hallo B.,
ein Ansatz.
Sub Unit()


If ActiveSheet.Name > "DBx" Then Exit Sub
With Selection
If .Columns.Count 2 Then Exit Sub
If .Rows.Count 2 Then Exit Sub
.Parent.Sort.SortFields.Clear
.Parent.Sort.SortFields.Add Key:=.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Parent.Sort.SortFields.Add Key:=.Columns(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With .Parent.Sort
.SetRange .Parent.UsedRange
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With

End Sub

Gruß Gerd
Anzeige
AW: Einen markierten Bereich sortieren
18.07.2024 10:43:54
daniel
Hi
Ersetze im Code folgendes:
ActiveWorkbook.Worksheets("DBx") durch ActiveSheet
Range("A29:BL41") durch Selection
Range("N29:N41") durch Selection.Columns(14)
Range("P29:P41") durch Selection.Columns(16)

beachte, dass die Selektion immer auch die Spalten enthalten muss, nach denen sortiert werden soll

Gruß Daniel
Anzeige
AW: Einen markierten Bereich sortieren
18.07.2024 14:18:24
BTausMG
Vielen Dank für Eure schnellen, hilfreichen Antworten.
War ja einfach ;-) LOL
@Gerd mit der kleinen Anpassung SetRange Selection statt .Parent.UsedRange wirkte es wie gewünscht NUR(!) auf die gemachte Auswahl!

Die Lösungen sahen dann ja sowieso fast gleich aus!
Seht ihr irgendwelche Vor-/Nachteile bei der einen oder anderen (also jetzt With Selection .Parent ....... oder ActiveSheet.....)?
Anzeige
AW: Einen markierten Bereich sortieren
18.07.2024 14:46:03
daniel
Hi
bei With Selection mit + .Parent anstelle von ActiveWorkheet wäre es einfacher, das Makro auch dann anzuwenden, wenn du nicht den vom Anwender selektierten Bereich sortieren möchtest, sondern einen vom Makro ermittelten Zellbereich und dieser Zellbereich nicht auf dem aktiven sondern auf einem anderen Tabellenblatt liegt.
dh du könntest hier dann statt dem "Selection" die entsprechende Range-Variable einsetzen und diese dürfte sich dann auf jedes beliebige Tabellenblatt beziehen, weil der Code an den Stellen, wo er das Tabellenblatt benötigt, sich dieses aus der Range-Variable ermitteln würde.
der Code mit ActiveSheet funktioniert nur, wenn das Blatt, auf dem du Sortieren willst, auch das aktive ist.

Gruß Daniel
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige