1.7k Aufrufe
Gefragt in Tabellenkalkulation von hans-werner Einsteiger_in (49 Punkte)
Hallo Forum,
ich muß eine Tabelle nach einer Spalte sortieren, deren Zellen nur Buchstaben oder Leerstellen enthalten.
Dabei werden, egal ob aufsteigend oder absteigend sortiert wird, die Zeilen, die Leerstellen in der sortierten Spalte enthalten, immer hinter die Zeilen mit Buchstaben sortiert.
Ich möchte die Zeilen mit Leerstellen aber vor die Zeilen mit Buchstaben sortiert haben.
Als Notbehelf habe ich vor dem Sortieren alle zu sortierenden Zellen die Leerstellen enthalten mit "1" gefüllt, aufsteigend sortiert und nach dem Sortieren die "1" wieder entfernt:
Sub Sortieren()
Dim cell As Range
For Each cell In Range("M10:M1200")
If cell.Value = "" And cell.Offset(0, -9).Value > "" Then
cell.Value = "1"
End If
Next
Range("M10:M1200").Select
Selection.Sort Key1:=Range("M10"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False _
, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
xlSortNormal
Dim cell1 As Range
For Each cell1 In Range("M10:M1200")
If cell1.Value = "1" And cell1.Offset(0, -9).Value > "" Then
cell1.Value = ""
End If
Next
End Subb
Das Ergebnis ist wie gewünscht, die Sortierung dauert allerdings zu lange!
Gibt es eine elegantere Lösung?

Gruss
hans-werner

5 Antworten

0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo hans-werner,

Das Ergebnis ist wie gewünscht, die Sortierung dauert allerdings zu lange!


Leider kann ich das Makro nicht schneller machen, aber habe es mal (unverändert) getestet.
Die Laufzeit bei 1200 Zeilen ist ungefähr 1 s, das sollte doch nicht zu langsam sein.

Liegt vielleicht an Deinem System?

Gruß
Rainer
0 Punkte
Beantwortet von hans-werner Einsteiger_in (49 Punkte)
Hallo Rainer,
die Sortierung ist nicht das Problem, sondern
For Each cell In Range......

Im ungünstigsten Fall, wenn in alle 1200 Zellen der Wert "1" eingestellt und wieder entfernt wird, dauert die Sortierung auf meinem Rechner ca. 1:30 Minuten!!!

Ich glaube nicht, dass mein Rechner in diesem Fall der Hemmschuh ist, werde das aber noch auf einem anderen Rechner probieren!

Gruss
hans-werner
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo hans-werner,

vielleicht erstellt Dir ein Makrospezialist ein schnelleres Makro.

Nur zur Information, auch der ungünstige Fall benötigt bei mir nicht länger als 1 sec.

Hardware:
Prozessor: Intel Core Quad CPU Q9400 2.66GHz
inst. RAM: 4096 MB verwendbar: 3072 MB

Software:
Windows 7 Home Premium 32 Bit
Office 2007 Ultimate SP2

Scheint doch an Deinem Rechner zu liegen.

Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

nicht getestet

gruss nighty

Option Explicit
Sub Sortieren()
Dim Zeilen As Long
ReDim ArrD(1191, 1) As Variant
ReDim ArrM(1191, 1) As Variant
ArrD() = Range("D10:D1200")
ArrM() = Range("M10:M1200")
For Zeilen = 1 To 1191
If ArrM(Zeilen, 1) = "" And ArrD(Zeilen, 1) > "" Then ArrM(Zeilen, 1) = "1"
Next Zeilen
Range("M10:M1200") = ArrM()
Range("M10:M1200").Sort Key1:=Range("M10"), Order1:=xlAscending, Header:=xlNo, OrderCustom:=1, Orientation:=xlTopToBottom
For Zeilen = 1 To 1191
If ArrM(Zeilen, 1) = "1" And ArrD(Zeilen, 1) > "" Then ArrM(Zeilen, 1) = ""
Next Zeilen
Range("M10:M1200") = ArrM()
End Sub
0 Punkte
Beantwortet von hans-werner Einsteiger_in (49 Punkte)
@ nighty,
Danke für den Lösungsvorschlag, der Sort läuft definitiv schneller!

Zwar braucht's immer noch länger als 10 s, aber das liegt wohl doch
an meiner Softwareumgebung (Office 2007 unter Windows XP als
Virtuelle Maschine auf einem (schnellen) iMac mit Mac OS X 10.6.2)!

Gruss
hans-werner
...