Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Spezielles Sortieren über VBA

Spezielles Sortieren über VBA
04.10.2022 07:12:23
Jem
Moin,
ich hatte schonmal eine Anfrage gestartet hier im Forum, kann jedoch auf den alten Thread nicht antworten (Cookie-Fehler).
Also zu meinem Problem:
Eine Tabelle mit 5 Spalten soll mit Werten aus der Spalte A sortiert werden, absteigend.
Jedoch sollen z.B. 3 -Stellige Zellen nach oben sortiert werden und 4 Stellige Zellen darunter.
Wichtig ist auch das es dynamisch funktionieren muss. Also die Anzahl der Reihen kann variieren.
Beispiel:
Spalte A | Spalte B | Spalte C | Spalte D | Spalte E
1-005 | 06:00 Uhr | 14:00 Uhr | Adresse1 | Adresse 2
001 | 12:00 Uhr | 20:00 Uhr | Adresse1 | Adresse 2
101 | 09:00 Uhr | 15:00 Uhr | Adresse1 | Adresse 2
103 | 09:00 Uhr | 15:00 Uhr | Adresse1 | Adresse 2
003 | 12:00 Uhr | 20:00 Uhr | Adresse1 | Adresse 2
1-006 | 06:00 Uhr | 14:00 Uhr | Adresse1 | Adresse 2
Ich habe einen Ansatz aus dem ersten Thread, dieser ist leider nicht dynamisch und sortiert nur die erste Spalte (A)

Option Explicit
Option Base 1
Sub sort()
Dim arr3(9), arrX(9), x&, a&, b&
x = 1: a = 1: b = 1
For x = 1 To 9
If Len(Cells(x, 1)) = 3 Then
arr3(a) = Cells(x, 1)
a = a + 1
End If
If Len(Cells(x, 1)) > 3 Then
arrX(b) = Cells(x, 1)
b = b + 1
End If
Next x
Range("A1").Resize(a - 1) = WorksheetFunction.Transpose(arr3)
Cells(a, 1).Resize(b - 1) = WorksheetFunction.Transpose(arrX)
End Sub
Vielen Dank für die Hilfe!
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spezielles Sortieren über VBA
04.10.2022 08:09:43
Oberschlumpf
Hi
schneller als das "Aufmalen" deiner Bsp-Tabelle" im Text deiner Beschreibung wäre vllt der Upload einer Excel-Bsp-Datei mit Bsp-Daten gewesen ;-)
Und mit Datei kann man besser testen ;-)
Ciao
Thorsten
AW: Spezielles Sortieren über VBA
04.10.2022 09:58:32
Jem
Ich habe keine Datei hochgeladen, weil das Problem was ich habe ein kleiner Teil einer riesigen Datei ist, mit vielen persönlichen Daten etc.
Aber ich habe jetzt mal eben einfach eine neue Datei gemacht mit irgendwelchen Daten drin, wenn das hilft.
https://www.herber.de/bbs/user/155499.xlsm
Danke
Anzeige
AW: Spezielles Sortieren über VBA
04.10.2022 11:51:33
Jem
Jemand eine Idee?
AW: Spezielles Sortieren über VBA
04.10.2022 12:10:18
snb
Was bringt dir eine Sortierung ?
AW: Spezielles Sortieren über VBA
04.10.2022 13:54:49
Daniel
Hi
1. Hilfsspalte hinzufügen mit der Formel: =Länge(A1)
2. Beim Sortieren die diese Hilfsspalte als 1. Kriterium verwenden, oder wenn du in mehreren Schritten sortierst, danach als letztes sortieren
3. Hilfsspalte wieder löschen.
Reicht dir das als Anregung und kannst du das alleine in VBA umsetzen?
Gruß Daniel
Anzeige
AW: Spezielles Sortieren über VBA
04.10.2022 18:33:02
Werni
Hallo Jem
Mit einem Rechtsklick auf Zelle A1
Dieser Code gehört ins Modul des Arbeitsblattes

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
If ActiveCell  Range("A1") Then Exit Sub
Dim letztZ As Long, letztS As Integer, i As Long, j As Long, AnzZeich As Integer
Application.ScreenUpdating = False
letztZ = Range("A100000").End(xlUp).Row
letztS = Selection.SpecialCells(xlCellTypeLastCell).Column + 1
For i = 2 To letztZ
AnzZeich = Len(Cells(i, 1))
Cells(i, letztS) = AnzZeich
Next
DoEvents
ActiveWorkbook.Worksheets("Tabelle1").sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").sort.SortFields.Add2 Key:=Cells( _
2, letztS), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").sort
.SetRange Range(Cells(1, 1), Cells(letztZ, letztS))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
DoEvents
Application.CutCopyMode = False
ActiveWorkbook.Worksheets("Tabelle1").sort.SortFields.Clear
ActiveWorkbook.Worksheets("Tabelle1").sort.SortFields.Add2 Key:=Cells( _
2, letztS), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Tabelle1").sort
.SetRange Range(Cells(1, 1), Cells(letztZ, letztS))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Columns(letztS).Delete Shift:=xlToLeft
[A1].Select
Application.ScreenUpdating = True
ActiveWorkbook.Save
End Sub
Gruss werni
Anzeige
AW: Spezielles Sortieren über VBA
05.10.2022 09:19:27
Jem
Vielen Dank werni!!
Das hat mir sehr geholfen!
Funktioniert top!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Spezielles Sortieren über VBA


Schritt-für-Schritt-Anleitung

Um eine Tabelle in Excel mithilfe von VBA basierend auf den Werten in Spalte A aufsteigend zu sortieren, kannst du die folgenden Schritte ausführen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deine Datei)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Option Explicit
Sub SortiereTabelle()
    Dim ws As Worksheet
    Dim letztZ As Long, letztS As Integer
    Set ws = ThisWorkbook.Worksheets("Tabelle1") ' Ändere "Tabelle1" nach Bedarf
    letztZ = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
    letztS = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column + 1

    ' Hilfsspalte erstellen für die Sortierung
    Dim i As Long
    For i = 2 To letztZ
        ws.Cells(i, letztS).Value = Len(ws.Cells(i, 1).Value) ' Länge der Zelle in Hilfsspalte
    Next i

    ' Sortieren
    With ws.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ws.Cells(2, letztS), Order:=xlAscending
        .SetRange ws.Range(ws.Cells(1, 1), ws.Cells(letztZ, letztS))
        .Header = xlYes
        .Apply
    End With

    ' Hilfsspalte löschen
    ws.Columns(letztS).Delete
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: ALT + F8, wähle SortiereTabelle und klicke auf "Ausführen".

Häufige Fehler und Lösungen

  • Fehler: "Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt."

    • Lösung: Stelle sicher, dass der Tabellenname korrekt ist. Ändere "Tabelle1" im Code entsprechend deinem Tabellenblattnamen.
  • Fehler: Sortierung funktioniert nicht wie erwartet.

    • Lösung: Überprüfe, ob alle Zellen in Spalte A die richtigen Werte enthalten und keine leeren Zellen vorhanden sind, die das Sortieren beeinträchtigen könnten.

Alternative Methoden

Falls du eine dynamische Sortierung ohne VBA verwenden möchtest, kannst du die Sortierfunktion von Excel nutzen:

  1. Markiere die gesamte Tabelle.
  2. Gehe zu "Daten" > "Sortieren".
  3. Wähle die Spalte A als Hauptsortierkriterium und stelle die Sortierreihenfolge auf "Aufsteigend".

Praktische Beispiele

Angenommen, du hast folgende Daten in deiner Tabelle:

Spalte A Spalte B Spalte C Spalte D Spalte E
1-005 06:00 Uhr 14:00 Uhr Adresse1 Adresse2
001 12:00 Uhr 20:00 Uhr Adresse1 Adresse2
101 09:00 Uhr 15:00 Uhr Adresse1 Adresse2

Nach dem Ausführen des VBA-Codes werden die Werte in Spalte A aufsteigend sortiert, wobei die 3-stelligen Zellen zuerst angezeigt werden.


Tipps für Profis

  • Nutze die Application.ScreenUpdating = False-Anweisung, um die Bildschirmaktualisierung während komplexer Sortierungen zu deaktivieren. Dies verbessert die Leistung.
  • Erstelle eine Funktion, die die Sortierlogik kapselt, um die Wiederverwendbarkeit zu erhöhen.
  • Dokumentiere deinen Code gut, insbesondere wenn du mit mehreren Spalten arbeitest, um die Lesbarkeit zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Sortierreihenfolge ändern?
Du kannst die Sortierreihenfolge im VBA-Code ändern, indem du Order:=xlAscending in Order:=xlDescending änderst.

2. Ist dieser Code mit allen Excel-Versionen kompatibel?
Ja, der gezeigte VBA-Code sollte in Excel 2010 und späteren Versionen ohne Probleme funktionieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige