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