Nicht angrenzende Spalten sortieren

Bild

Betrifft: Nicht angrenzende Spalten sortieren
von: Chris
Geschrieben am: 25.11.2015 09:35:17

Hallo Forum,
ich versuche mehrere, nicht angrenzende Spalten zu sortieren. Der variable range B2:B&ende sowie K2:S&ende funktionieren, sobald ich F2:F&ende hinzunehme, streikt das Makro - "falsche Anzahl an Argumenten oder ungültige Zuweisung zu einer Eigenschaft". Bei "Orientation:=xlTopToBottom ist ein gelber Pfeil daneben...
In den Spalten B und F befinden sich als Text formatierte Datumswerte.
Jmd eine Idee? Gruß Chris

Sub sortieren()
ende = Sheets("Tab").Range("S2:S1000").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:= _
xlPrevious).Row
Sheets("Tab").Range("B2:B" & ende, "F2:F" & ende, "K2:S" & ende).Sort _
Key1:=Sheets("Tab").Range("M2"), Order1:=xlDescending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
end 

Sub 

Bild

Betrifft: AW: Nicht angrenzende Spalten sortieren
von: Daniel
Geschrieben am: 25.11.2015 09:57:36
Hi
du kannst immer nur zusammenhängende Zellen sortieren.
das Sortierkriterium muss zu diesem Zellbereich gehören.
dh. du musst deine Spalten einzeln sortieren.
soll für alle Spalten das gleiche Sortierkriterium verwendet werden, so musst du die kriteriumsspalte kopieren und vor jeder Sortierspalte einfügen, damit Kriteriumsspalte und Sortierspalte einen zusammenhängenden Zellbreich bilden.
wenn du für alle Spalten das gleiche sortierkriterium hast, wäre vielleicht folgendes vorgehen sinnvoller:
1. kopiere alle Zellen in einen freien Bereich oder ein neues Blatt
2. sortiere den gesamten Bereich nach dem Sortierkriterium
3. kopiere die aus der unter 1 angelegten Kopie die Spalten, die nicht sortiert werden sollen und füge sie wieder in die Originaltabelle ein
4. Lösche die unter 1 angelegte Tabelle wieder.
Gruß Daniel

Bild

Betrifft: AW: Nicht angrenzende Spalten sortieren
von: Chris
Geschrieben am: 25.11.2015 10:41:14
Hallo Daniel,
danke für deine Antwort. Ich habe mal ein makro gebastelt, das sogar läuft :-)
zwei Fragen:
a) Wenn man nur zusammenhängende Bereich sortieren kann, wieso kann ich B:B und K:S getrennt sortieren. F jedoch nicht. B und K liegen nicht zusammen.
b) "usedrange" löscht ja alle Zellen mit Inhalt. Kann man usedrange auch auf einen bestimmten Bereich eingrenzen? Also zum Beispiel: range("A:K").usedrange.clearontents oder so ....
Hier mein makro:

Sub neuerVersuch()
ende = Sheets("TAB").Range("S2:S2000").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:= _
xlPrevious).Row
With Sheets("TAB")
'entsprechende Spalten zusammenhängend kopieren
.Range("B2:B" & ende).Copy Destination:=.Range("BX2") 'Datum AKT
.Range("F2:F" & ende).Copy Destination:=.Range("BY2") 'Datum DAKT
.Range("K2:T" & ende).Copy Destination:=.Range("BZ2") 'Restliche Angaben
'zusammenhängende Spalten sortieren
.Range("BX2:CI" & ende).Sort _
Key1:=.Range("CB2"), Order1:=xlAscending, _
Header:=xlGuess, MatchCase:=False, _
Orientation:=xlTopToBottom
'Alles zurückkopieren
.Range("BX2:BX" & ende).Copy Destination:=.Range("B2")   'Datum AKT
.Range("BY2:BY" & ende).Copy Destination:=.Range("F2")   'Datum DAKT
.Range("BZ2:CI" & ende).Copy Destination:=.Range("K2")   'Restliche Angaben
'Alle zuerst kopierten Angaben löschen
.Range("BX:CI").ClearContents
End With
     
End Sub


Bild

Betrifft: AW: Nicht angrenzende Spalten sortieren
von: Daniel
Geschrieben am: 25.11.2015 11:05:04
Hi
das Problem ist, dass du die Funktionsweise der Range-Funtkion nicht verstanden hast.
range hat zwei Varianten:
a) zwei Parameter
die benannten Parameter bilden die Grenzen des Bereichs, alle dazwischen liegenden Zellen werden verwendet.
als Parameter können Range-Objekte oder Texte die Zelladressen entsprechen, verwendet werden.
b) ein Parameter
dann muss dieser Parameter ein Textstring sein, welcher einer gültigen Zelladresse entspricht, es werden die beschriebenen Zellen verwendet, es können mehrere getrennte Zellbereiche angegeben werden, dann müssen die Bereiche innerhalb des Strings mit Komma getrennt angegeben werden.
dein .Range("B2:B" & ende, "K2:S" & ende).Sort funktioniert, weil das der Range-Variante mit 2 Parametern entspricht und du hierbei den Zellbereich von B2 bis S-ende ansprichst.
das ist ein zusammenhängender Zellbereich, den du sortieren kannst.
dein .Range("B2:B" & ende, "F2:F" & ende, "K2:S" & ende).Sort funktioniert nicht, weil du hier 3 Parameter angibst und dir damit schon die Range-Funktion den Fehler erzeugt.
wenn du mit Range getrennte Zellbereiche erzeugen willst, musst du diese in EINEM Textstring beschreiben, das würde dann so aus sehen (B, K-S)
.Range("B2:B" & ende & ",K2:S" & ende).Sort
.Range("B2:B" & ende & ",F2:F" & ende & ",K2:S" & ende).Sort
bzw ohne Variablen damits deutlich wird:
.Range("B2:B99,K2:S99").Sort
.Range("B2:B99,F2:F99,K2:S99").Sort

nur so bekommst du nicht zusammenhängende Zellbereiche und dann streikt das Sort.
Gruß Daniel

Bild

Betrifft: AW: Nicht angrenzende Spalten sortieren
von: Daniel
Geschrieben am: 25.11.2015 11:12:09
zu b)
kannst du auch eingrenzen, aber dann so:
ActiveSheet.Usedrange.Columns(1).Resize(, 11).Clearcontents
oder so:
Range(ActiveSheet.Usedrang.Coumns(1), ActiveSheet.Usedrange.Columns(11)).ClearContents
Gruß Daniel

Bild

Betrifft: AW: Nicht angrenzende Spalten sortieren
von: Chris
Geschrieben am: 25.11.2015 12:49:17
Hallo Daniel,
danke für deine Mühe. Das sind Erklärungen mit den der Anfänger was anfangen kann, im Gegensatz zur F1-Hilfe.
Gruß
Chris

Bild

Betrifft: warum dann noch offen? owT
von: Sheldon
Geschrieben am: 25.11.2015 12:54:49
Gruß
Sheldon

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Nicht angrenzende Spalten sortieren"