Discussion:
VBA Sortieren von Spalten aus Basis Zeile xy
(zu alt für eine Antwort)
Erik Harren
2005-04-13 08:39:41 UTC
Permalink
Tachchen!

Ich habe eine Tabelle, in der die Daten spaltenweise zusammengehörig sind.
Nun sollen die Spalten nach Werten in Zeile 3 sortiert werden.

Das mit Spaltenweise sortieren, klappt bei mir momentan noch nicht. Wo
liegt mein Denkfähler?

solong,
Erik.
Melanie Breden
2005-04-13 08:46:48 UTC
Permalink
Hallo Erik,
Post by Erik Harren
Ich habe eine Tabelle, in der die Daten spaltenweise zusammengehörig sind.
Nun sollen die Spalten nach Werten in Zeile 3 sortiert werden.
Das mit Spaltenweise sortieren, klappt bei mir momentan noch nicht. Wo
liegt mein Denkfähler?
willst du nur die Werte in Spalte 3 sortieren, ohne die Reihenfolge in den
Nebenspalten zu verändern?
Dann markiere den Spaltenkopf der Spalte3 z.B. C, so dass die ganze
Spalte C markiert ist.
Klicke dann in der Standard-Symbolleiste auf das Symbol zur Auf- bzw.
Absteigenden Sortierung.

Evtl. erhälst du eine Sortierwarnung in Form eines Meldungsfensters.
Markiere im angezeigten Dialogfeld dann die Option:
[x] Mit bestehender Markierung fortfahren
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Erik Harren
2005-04-13 09:53:03 UTC
Permalink
Tachchen!
Post by Melanie Breden
willst du nur die Werte in Spalte 3 sortieren, ohne die Reihenfolge in den
Nebenspalten zu verändern?
Ok, Bleistift gefällig: Sortiert werden die Spalten über das Ergebnis
(eher sogar Datum) in Zeile 3.

Zeile Spalten
A B C
1 AA CD BA
2 egal egal2 egal3
3 4711 0815 007

Ergebnis:
Zeile Spalten
A B C
1 BA CD AA
2 egal3 egal2 egal
3 007 0815 4711

solong,
Erik.
Melanie Breden
2005-04-13 11:28:14 UTC
Permalink
Hallo Erik,
Post by Erik Harren
Ok, Bleistift gefällig: Sortiert werden die Spalten über das Ergebnis
(eher sogar Datum) in Zeile 3.
Zeile Spalten
A B C
1 AA CD BA
2 egal egal2 egal3
3 4711 0815 007
Zeile Spalten
A B C
1 BA CD AA
2 egal3 egal2 egal
3 007 0815 4711
das Beispiel war schon sehr hilfreich...
Probiers mal mit folgender Prozedur:

Public Sub SpaltenSortieren()
Dim rngBereich As Range
Dim lngSuchZeile As Long
Dim intCol As Integer
Dim intCount As Integer
Dim varColumns As Variant

lngSuchZeile = 3
Application.ScreenUpdating = False

With ActiveSheet
Set rngBereich = Intersect(.UsedRange, .Columns("A:C"))
Set rngBereich = rngBereich.Cells(lngSuchZeile, 1) _
.Resize(1, rngBereich.Columns.Count)
ReDim varColumns(rngBereich.Columns.Count - 1)

For intCount = 1 To rngBereich.Columns.Count
intCol = rngBereich.Find(Application.Min(rngBereich), _
LookAt:=xlWhole).Column
varColumns(intCount - 1) = .Columns(intCol).Value
.Columns(intCol).ClearContents
Next intCount

For intCount = 1 To rngBereich.Columns.Count
.Columns(intCount).Value = varColumns(intCount - 1)
Next intCount
End With

Application.ScreenUpdating = True
End Sub
--
Mit freundlichen Grüssen

Melanie Breden
- Microsoft MVP für Excel -

http://excel.codebooks.de (Das Excel-VBA Codebook)
#Excel-Auftragsprogrammierung#
Thomas Ramel
2005-04-13 11:47:31 UTC
Permalink
Grüezi Melanie und Erik

Melanie Breden schrieb am 13.04.2005
Post by Melanie Breden
Post by Erik Harren
Zeile Spalten
A B C
1 AA CD BA
2 egal egal2 egal3
3 4711 0815 007
Zeile Spalten
A B C
1 BA CD AA
2 egal3 egal2 egal
3 007 0815 4711
das Beispiel war schon sehr hilfreich...
[interessante Prozedur gesnippt]

...denn ich frage mich, weshalb nicht einfach die Sortier-Routine
verwenden ;-)


Range("A1").CurrentRegion.Sort Key1:=Range("A3"), _
Order1:=xlAscending, _
Header:=xlNo, _
Orientation:=xlLeftToRight




Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Erik Harren
2005-04-15 06:40:12 UTC
Permalink
Tachchen!
Post by Thomas Ramel
Range("A1").CurrentRegion.Sort Key1:=Range("A3"), _
Order1:=xlAscending, _
Header:=xlNo, _
Orientation:=xlLeftToRight
Diese Routine steigt bei mir mit Fähler 1004 aus.

Konkret liegt bei mir folgendes vor:

Spalten D-AE sollen nach Zeile 9 (Datum) aufsteigend sortiert werden.

Zuvor verwende ich ein ActiveSheet.unprotect, um die
CurrentRegion-Funktion zufrieden zu stellen.

solong,
Erik.
Erik Harren
2005-04-15 07:35:52 UTC
Permalink
Tachchen!

Ich habe es jetzt mal so gelöst - nicht schön, aber selbst gemacht:

Columns("D:AE").Select

Selection.Sort Key1:=Range("D9"), Order1:=xlAscending, _
Key2:=Range("D11") ,_
Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:= False, Orientation:=xlLeftToRight, _
DataOption1:=xlSortNormal, DataOption2 :=xlSortTextAsNumbers

solong und vielen Dank für die Anregungen.

Erik Harren.
Melanie Breden
2005-04-15 07:44:17 UTC
Permalink
Grüezi Erik

...lass dich nicht verwirren, gell ;-)
Post by Erik Harren
Tachchen!
Post by Thomas Ramel
Range("A1").CurrentRegion.Sort Key1:=Range("A3"), _
Order1:=xlAscending, _
Header:=xlNo, _
Orientation:=xlLeftToRight
Diese Routine steigt bei mir mit Fähler 1004 aus.
Das würde heissen, dass dein Bereich nicht in A1 beginnt?.....
Post by Erik Harren
Spalten D-AE sollen nach Zeile 9 (Datum) aufsteigend sortiert werden.
...was Du hiermit bestätigt hast.
Es ist sinnvoll, wenn du die Anregungen direkt umsetzen willlst,
dass Du deine Bereichangaben korretk machst...
Post by Erik Harren
Zuvor verwende ich ein ActiveSheet.unprotect, um die
CurrentRegion-Funktion zufrieden zu stellen.
Ja, das macht Sinn, im geschützen Blatt kann (normalerweise) nicht sortiert werden;
das kommt aber auf die verwendete Excel-Version an.

Hier also ein neuer Versuch, der deinen Bereich umfasste:

Range("D:AE").Sort Key1:=Range("D9"), _
Order1:=xlAscending, _
Header:=xlNo, _
Orientation:=xlLeftToRight

Falls Du Titel in deinen Zeilen hast, dann ändere Header:=xlNo in Header:=xlYes
--
Mit freundlichen Grüssen

Thomas Ramel c/o Melanie Breden
- Microsoft MVPs für Excel -
Erik Harren
2005-04-15 10:13:44 UTC
Permalink
Tachchen!
Post by Melanie Breden
...lass dich nicht verwirren, gell ;-)
Nö, grüß ruhig deine Stuhlnachbarin =;-)
Post by Melanie Breden
Das würde heissen, dass dein Bereich nicht in A1 beginnt?.....
...was Du hiermit bestätigt hast.
Es ist sinnvoll, wenn du die Anregungen direkt umsetzen willlst,
dass Du deine Bereichangaben korretk machst...
Nunja, raten macht doch viel mehr Spaß, wenn die Glaskugel aus der
Werkstatt zurück ist, oder?

In Erna, ich versuche möglichst meine Beispiele allgemein zu halten, um
die Antworten zu verstehen, und dann auf mein spezielles Problem zu
übertragen, doch geht das dann manchmal schief.
Post by Melanie Breden
Range("D:AE").Sort Key1:=Range("D9"), _
Order1:=xlAscending, _
Header:=xlNo, _
Orientation:=xlLeftToRight
So ähnlich sieht auch meine Lösung aus.
Post by Melanie Breden
Falls Du Titel in deinen Zeilen hast, dann ändere Header:=xlNo in Header:=xlYes
Nur aus Neugier: Wenn ich nun lediglich den Inhalt der Zeilen 1-40 der
Spalten D:AE sortieren möchte, weil z.B. unterhalb einige feststehende
Elemente untergebracht habe - jeht dat, oder wird ab dieser Stelle ein
programmier technischer Aufwand? Ist halt nur eine Frage, ohne akuten Bezug.

solong,
Erik.
Thomas Ramel
2005-04-15 22:23:41 UTC
Permalink
Grüezi Erik Harren

Erik Harren schrieb am 15.04.2005
Post by Erik Harren
Tachchen!
Post by Melanie Breden
...lass dich nicht verwirren, gell ;-)
Nö, grüß ruhig deine Stuhlnachbarin =;-)
Ab Morgen geht das wieder nicht mehr so direkt...
Heute aber hats Spass gemacht :-)
Post by Erik Harren
Nur aus Neugier: Wenn ich nun lediglich den Inhalt der Zeilen 1-40 der
Spalten D:AE sortieren möchte, weil z.B. unterhalb einige feststehende
Elemente untergebracht habe - jeht dat, oder wird ab dieser Stelle ein
programmier technischer Aufwand? Ist halt nur eine Frage, ohne akuten Bezug.
Das ist in diesem Falle keine grössere Sache; gib einfach den exakten
Bereich an:

Range("D1:AE40").Sort Key1:=Range("D9"), _
Order1:=xlAscending, _
Header:=xlNo, _
Orientation:=xlLeftToRight


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -Ab
[Win XP Pro SP-2 / xl2000 SP-3]
Erik Harren
2005-04-15 07:11:20 UTC
Permalink
Tachchen!
Post by Melanie Breden
For intCount = 1 To rngBereich.Columns.Count
intCol = rngBereich.Find(Application.Min(rngBereich), _
LookAt:=xlWhole).Column
An dieser Stelle wird mit einem Fähler 91 ausgestiegen. Änni Eidir?

solong,
Erik.
Loading...