Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
840to844
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
840to844
840to844
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Zellen sortieren + leere Zellen ignorieren

Zellen sortieren + leere Zellen ignorieren
23.01.2007 17:36:07
Markus
Ich habe das Problem, Zeilen ABSTEIGEND zu sortieren und möchte verhindern, dass leere Zellen ("") an den Anfang gestellt werden.
Folgende Lösung habe ich schon gefunden:
https://www.herber.de/forum/archiv/472to476/t475910.htm
Hat irgendjemand eine Idee?
Vielen Dank!
Hier die bekannte Lösung:
erst absteigend sortieren, dann die leere Zelle feststellen, dann nur bis Zeile dahin - 1 sortieren ...

Sub Sortalpha()
Dim zelle As Range
Rows("2:101").Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, dataoption1:=xltextasnumbers
Set zelle = Columns("A:A").Find(What:="", After:=[a1], LookIn:=xlValues, LookAt:= _
xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
If Not zelle Is Nothing Then
Rows("2:" & zelle.Row - 1).Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, dataoption1:=xltextasnumbers
End If
End Sub

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellen sortieren + leere Zellen ignorieren
23.01.2007 17:47:08
Markus
Ich hab noch ein zusätzliches Problem: Die Sortierreihenfolge sollte folgendermaßen ergänzt werden ablaufen:
Erst Zahlen (Absteigend) -- Dann Text (z.B. "n.r.") -- Dann Leere Zellen ("")
Ich zähl auf eure guten Ideen!
AW: Sortieren mit anderer Sortierfolge
23.01.2007 19:06:00
Erich
Hallo Markus,
probier mal
Option Explicit
Sub Sort_Zahlen_Text_Leer_abst()
Dim lngZ, Calc As XlCalculation
Const Spalt = 1   ' Spalte, nach der sortiert werden soll
Calc = Application.Calculation
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'  -------------------------------------------------------- Sortspalte generieren
lngZ = Cells(Rows.Count, Spalt).End(xlUp).Row
Columns(Spalt).Insert
Cells(1, Spalt) = "SortKey"
Range(Cells(2, Spalt), Cells(lngZ, 1)).FormulaR1C1 = "=IF(ISBLANK(RC[1])," & _
"""a""&RC[1]," & "IF(ISNUMBER(RC[1]),""c""&TEXT(RC[1],""000000000,000""),""b""&RC[1]))"
'  -------------------------------------------------------- Sortieren
Cells(1, Spalt).Sort Key1:=Cells(1, Spalt), Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'  -------------------------------------------------------- Aufräumen
Columns(Spalt).Delete
Application.Calculation = Calc
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sortieren mit anderer Sortierfolge
23.01.2007 19:48:07
Erich
Hallo Markus,
das vorige Makro hat noch ein Problem mit negativen Zahlen. Sollte hier behoben sein:
Option Explicit
Sub Sort_Zahlen_Text_Leer_abst()
Dim lngZ, Calc As XlCalculation
Const intS = 1               ' Spalte, nach der sortiert werden soll
Const strF = "000000,000"    ' Zahlenformat mit max. Anzahl Vor- und Nachkommastellen
Calc = Application.Calculation
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'  -------------------------------------------------------- Sortspalte generieren
lngZ = Cells(Rows.Count, intS).End(xlUp).Row
Columns(intS).Insert
Cells(1, intS) = "SortKey"
Range(Cells(2, intS), Cells(lngZ, 1)).FormulaLocal = "=WENN(ISTLEER(B2);" & """a""&B2;" _
& "WENN(ISTZAHL(B2);WENN(B2<0;""c"";""d"")&TEXT(B2;""" & strF & """);" & """b""&B2))"
'  -------------------------------------------------------- Sortieren
Cells(1, intS).Sort Key1:=Cells(1, intS), Order1:=xlDescending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
'  -------------------------------------------------------- Aufräumen
Columns(intS).Delete
Application.Calculation = Calc
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sortieren mit anderer Sortierfolge
24.01.2007 00:20:45
Erich
Hallo Markus,
und hier die dritte Version - in der zweiten war immer noch ein Fehler.
Dafür ist diese Version nun etwas variabler einsetzbar:
Option Explicit
Sub Test_Sort_var()
Call Sort_var(1, 1, True, "Abend")
Stop
Call Sort_var(1, 2, True, "Nacht")
Stop
Call Sort_var(1, 1, True, "excel")
End Sub
' 23.01.2007 Erich G.
Sub Sort_var(intSp As Integer, intO As Integer, bolGk As Boolean, strSo As String)
'         |                 |                |                 5 Zeichen für die Typen:
'         |                 |                |                    1. Zahl
'         |                 |                |                    2. Text + restl. Typen
'         |                 |                |                    3. Wahrheitswert
'         |                 |                |                    4. Fehlerwert
'         |                 |                |                    5. leere Zelle
'         |                 |                True/False für MatchCase
'         |                 1 für aufsteigend, 2 für absteigend
'         Nr. der Spalte, nach der sortiert werden soll
Dim TT(1 To 5) As String, lngZ As Long, Calc As XlCalculation
If Len(strSo) <> 5 Then Exit Sub
For lngZ = 1 To 5:    TT(lngZ) = Mid(strSo, lngZ, 1):    Next lngZ
Calc = Application.Calculation
Application.ScreenUpdating = False:   Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'  -------------------------------------------------------- Sortspalte generieren
lngZ = Cells(Rows.Count, intSp).End(xlUp).Row
Columns(intSp).Insert:   Cells(1, intSp) = "SKey1"
Range(Cells(2, intSp), Cells(lngZ, intSp)).FormulaLocal = _
"=WENN(ISTZAHL(B2);""" & TT(1) & """;" _
& "WENN(ISTLOG(B2);""" & TT(3) & """;" _
& "WENN(ISTFEHLER(B2);""" & TT(4) & """;" _
& "WENN(ISTLEER(B2);""" & TT(5) & """;""" & TT(2) & """))))"
'  -------------------------------------------------------- Sortieren nach 2 Spalten
Cells(1, intSp).Sort _
Key1:=Cells(1, intSp), Order1:=xlAscending, Key2:=Cells(1, intSp + 1), Order2:=intO, _
Header:=xlYes, OrderCustom:=1, MatchCase:=bolGk, Orientation:=xlTopToBottom
'  -------------------------------------------------------- Aufräumen
Columns(intSp).Delete
Application.Calculation = Calc
Application.EnableEvents = True:   Application.ScreenUpdating = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sortieren mit anderer Sortierfolge
24.01.2007 08:35:43
Markus
Hallo,
wenn du mir jetzt noch erklären kannst, aus welchen Zeichen ich strSo zusammensetzen muss, um eine bestimmmte Sortierreihenfolge zu erhalten bin ich vollends begeistert!
Meine Sortierreihenfolge lautet: Zahlen (absteigend) dann Text dann leere Zelle
Gruß
Markus
AW: Sortieren mit anderer Sortierfolge
24.01.2007 08:48:20
Erich
Hallo Markus,
für deine Sortierung ist wichtig: 1. Zeichen kleiner als 2. Zeichen kleiner als 5. Zeichen.
Der Rest (3. Zeichen für Wahrheits-, 4. Zeichen für Fehlerwerte) ist egal, kommt nicht vor.
Mal für Spalte 4 (Die 2 steht für "absteigend"):
Call Sort_var(4, 2, False, "xyaaz")
oder
Call Sort_var(4, 2, False, "mnopq")
oder
Call Sort_var(4, 2, True, "Abend")
oder
Call Sort_var(4, 2, False, "Abend")
oder
Call Sort_var(4, 2, True, "12993")
oder
Call Sort_var(4, 2, True, "45008")
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sortieren mit anderer Sortierfolge
24.01.2007 14:21:08
Markus
Hallo nochmal,
bei mir funktioniert das irgendwie trotzdem noch nicht.
Fehlermöglichkeit:
Die Sortierspalte bezieht sich immer auf die Spalte B?
Außerdem habe ich einige Kopfzeilen - müsste ich also auch hier den Zeilenversatz mit einbeziehen. An den anderen Stellen habe ich jeweils die Zeile 1 bzw. 2 ersetzt.
Gruß
Markus
AW: Sortieren mit anderer Sortierfolge
24.01.2007 15:04:18
Erich
Hallo Markus,
wie kommst du auf "Sortierspalte bezieht sich immer auf die Spalte B"?
In meinen letzten Aufrufbeispielen wird nach Spalte D (=4) sortiert.
Die 2 als 2. Parameter in diesen Beispielen steht für "absteigend".
So kannst du das Makro nicht verwenden - es kann jetzt nur mit einer Überschriftenzeile laufen.
Vielleicht hab ich bald Zeit, das auf beliebig viele Überschriftenzeilen auszubauen...
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sortieren mit anderer Sortierfolge
24.01.2007 16:14:29
Erich
Hi Markus,
hatte zwischendurch etwas Zeit, jetzt funzt es auch mit mehreren Zeilen für die Spaltenüberschriften.
Der folgende Aufruf ist für
- 4 Zeilen für die Spaltenüberschriften
- 7 Spalten (A bis G) werden sortiert
- sortiert wird nach Spalte C (3)
- absteigend (2)
- Groß-/Kleinschr. wird berücksichtigt (bei gleichen Buchstaben erst klein, dann groß)
- Zahlen (a) vor Texten (b) vor Leerzellen (c)
- andere Typen (x) kommen nicht vor, würden ans Ende sortiert
Option Explicit
Sub Test_Sort_varU()
Call Sort_varU(4, 7, 3, 2, True, "abxxc")
End Sub
' 24.01.2007 Erich G.
Sub Sort_varU(intU As Integer, intAS As Integer, intSp As Integer, _
intO As Integer, bolGk As Boolean, strSo As String)
'  Parameter:
'  1. intU   Anzahl Zeilen für Spaltenüberschriften
'  2. intAS  Nr. der letzten mitzusortierenden Spalte
'  3. intSp  Nr. der Spalte, nach der sortiert werden soll
'  4. intO   1 für aufsteigend, 2 für absteigend
'  5. bolGk  True/False für Groß-/Kleinschreibung beachten (MatchCase)
'  6. strSo  5 Zeichen für die Datentypen
'              1. Zahl
'              2. Text (+ evtl. restliche Datentypen)
'              3. Wahrheitswert
'              4. Fehlerwert
'              5. leere Zelle
Dim TT(1 To 5) As String, lngZ As Long, Calc As XlCalculation
If Len(strSo) <> 5 Then Exit Sub
If intSp > intAS Then Exit Sub
If intAS >= Columns.Count Then Exit Sub
For lngZ = 1 To 5:    TT(lngZ) = Mid(strSo, lngZ, 1):    Next lngZ
Calc = Application.Calculation
Application.ScreenUpdating = False:   Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'  -------------------------------------------------------- Sortspalte generieren
lngZ = Cells(Rows.Count, intSp).End(xlUp).Row
Columns(intSp).Insert:   Cells(intU, intSp) = "SKey1"
Range(Cells(intU + 1, intSp), Cells(lngZ, intSp)).FormulaLocal = _
"=WENN(ISTZAHL(B2);""" & TT(1) & """;" _
& "WENN(ISTLOG(B2);""" & TT(3) & """;" _
& "WENN(ISTFEHLER(B2);""" & TT(4) & """;" _
& "WENN(ISTLEER(B2);""" & TT(5) & """;""" & TT(2) & """))))"
'  -------------------------------------------------------- Sortieren nach 2 Spalten
Range(Cells(intU, 1), Cells(lngZ, intAS + 1)).Sort _
Key1:=Cells(intU, intSp), Order1:=xlAscending, _
Key2:=Cells(intU, intSp + 1), Order2:=intO, _
Header:=xlYes, OrderCustom:=1, MatchCase:=bolGk, Orientation:=xlTopToBottom
'  -------------------------------------------------------- Aufräumen
Columns(intSp).Delete
Application.Calculation = Calc
Application.EnableEvents = True:   Application.ScreenUpdating = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Sortieren mit anderer Sortierfolge
24.01.2007 16:39:42
Erich
Hallo Markus,
sorry, ich hab das mit der Spalte B erst jetzt gefunden!
Also noch mal:
Der folgende Aufruf ist für
- 4 Zeilen für die Spaltenüberschriften
- 7 Spalten (A bis G) werden sortiert
- sortiert wird nach Spalte C (3)
- absteigend (2)
- Groß-/Kleinschr. wird berücksichtigt (bei gleichen Buchstaben erst klein, dann groß)
- Zahlen (a) vor Texten (b) vor Leerzellen (c)
- andere Typen (x) kommen nicht vor, würden ans Ende sortiert
Option Explicit
Sub Test_Sort_varU()
Call Sort_varU(4, 7, 3, 2, True, "abxxc")
End Sub
' 23.01.2007 Erich G.
Sub Sort_varU(intU As Integer, intAS As Integer, intSp As Integer, _
intO As Integer, bolGk As Boolean, strSo As String)
'  Parameter:
'  1. intU   Anzahl Zeilen mit Spaltenüberschriften
'  2. intAS  Nr. der letzten mitzusortierenden Spalte
'  3. intSp  Nr. der Spalte, nach der sortiert werden soll
'  4. intO   1 für aufsteigend, 2 für absteigend
'  5. bolGk  True/False für Groß-/Kleinschreibung beachten (MatchCase)
'  6. strSo  5 Zeichen für die Datentypen
'              1. Zahl
'              2. Text (+ evtl. restliche Datentypen)
'              3. Wahrheitswert
'              4. Fehlerwert
'              5. leere Zelle
Dim TT(1 To 5) As String, lngZ As Long, Calc As XlCalculation, strZ As String
If Len(strSo) <> 5 Then Exit Sub
If intSp > intAS Then Exit Sub
If intAS >= Columns.Count Then Exit Sub
For lngZ = 1 To 5:    TT(lngZ) = Mid(strSo, lngZ, 1):    Next lngZ
Calc = Application.Calculation
Application.ScreenUpdating = False:   Application.EnableEvents = False
Application.Calculation = xlCalculationManual
'  -------------------------------------------------------- Sortspalte generieren
lngZ = Cells(Rows.Count, intSp).End(xlUp).Row
Columns(intSp).Insert:   Cells(intU, intSp) = "SKey1"
strZ = Cells(intU + 1, intSp + 1).Address(0, 0)
Range(Cells(intU + 1, intSp), Cells(lngZ, intSp)).FormulaLocal = _
"=WENN(ISTZAHL(" & strZ & ");""" & TT(1) & """;" _
& "WENN(ISTLOG(" & strZ & ");""" & TT(3) & """;" _
& "WENN(ISTFEHLER(" & strZ & ");""" & TT(4) & """;" _
& "WENN(ISTLEER(" & strZ & ");""" & TT(5) & """;""" & TT(2) & """))))"
'  -------------------------------------------------------- Sortieren nach 2 Spalten
Range(Cells(intU, 1), Cells(lngZ, intAS + 1)).Sort _
Key1:=Cells(intU, intSp), Order1:=xlAscending, _
Key2:=Cells(intU, intSp + 1), Order2:=intO, _
Header:=xlYes, OrderCustom:=1, MatchCase:=bolGk, Orientation:=xlTopToBottom
'  -------------------------------------------------------- Aufräumen
Columns(intSp).Delete
Application.Calculation = Calc
Application.EnableEvents = True:   Application.ScreenUpdating = True
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige

327 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige