Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Benutzerdefiniertes Sortieren per VBA

Benutzerdefiniertes Sortieren per VBA
26.10.2004 12:41:43
Lars
Der Anwender der Arbeitsmappe legt durch mehrere Angaben letztlich fest, welche Spalten in welcher Ordnung von welcher Tabelle per VBA sortiert werden sollen. Das Blatt bekommt er aber nicht zu sehen (soll er auch nicht).
Was ich letztlich bräuchte wäre sowas wie ein variables Selection.Sort.
Geht das irgendwie?
Vielen Dank.
Lars
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Benutzerdefiniertes Sortieren per VBA
Beni
Hallo Lars,
dieser Code sortiert von A2 bis letzte Zeile/Spalte ohne Titel.
Gruss Beni

Sub variables_sortieren()
lz = Cells(Rows.Count, 1).End(xlUp).Row
ls = Cells(1, 256).End(xlToLeft).Column
sp = InputBox("Sortierung")
Range(Cells(2, 1), Cells(lz, ls)).Sort Key1:=Cells(2, sp), Header:=xlNo
End Sub

Anzeige
AW: Benutzerdefiniertes Sortieren per VBA
26.10.2004 20:00:37
Lars
Hallo Beni,
vielen Dank für Deine Antwort.
Insgesamt erstellt das Programm ein "Sortier-Array":
sortArray(nmbrSrtSls, 2) as Integer
sortArray(i, 1): Spalten-Nummer, grundsätzlich beliebig
sortArray(i, 2): 1, 2 (xlAscending, xlDescending)
nmbrSrtSls: Anzahl der Spalten, nach denen sortiert werden soll (1 bis 3)
Ich hatte als ersten naiven Versuch folgendes gemacht:
If nmbrSrtSls = 1 Then
Range(Cells(2, 1), Cells(lstRw, lstClmn)).Sort Key1:=Cells(2, sortArray(1, 1)), Order1:=sortArray(1, 2), _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ElseIf nmbrSrtSls = 2 Then
Range(Cells(2, 1), Cells(lstRw, lstClmn)).Sort Key1:=Cells(2, sortArray(1, 1)), Order1:=sortArray(1, 2), _
key2:=Cells(2, sortArray(2, 1)), order2:=sortArray(2, 2), _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
ElseIf nmbrSrtSls = 3 Then
Range(Cells(2, 1), Cells(lstRw, lstClmn)).Sort Key1:=Cells(2, sortArray(1, 1)), Order1:=sortArray(1, 2), _
key2:=Cells(2, sortArray(2, 1)), order2:=sortArray(2, 2), _
key3:=Cells(2, sortArray(3, 1)), order3:=sortArray(3, 2), _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
End If
Der Code läuft auch, sortiert bloss nichts.
Etwas ratlos bin ich momentan schon...
Vielen Dank.
Gruß
Lars
Anzeige
Fehler GEFUNDEN Benutzerdefiniertes Sortieren
27.10.2004 09:28:57
Lars
Hallo Beni,
jetzt ist mir doch noch mein Fehler aufgefallen...es lag in der Test-Mappe an der Option Header:=xlYes.
Vielen Dank für die Hilfe.
Gruß
Lars
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Benutzerdefiniertes Sortieren per VBA in Excel


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues VBA-Modul:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle "Einfügen" > "Modul".
  2. Füge den folgenden Code ein:

    Sub variables_sortieren()
       lz = Cells(Rows.Count, 1).End(xlUp).Row
       ls = Cells(1, 256).End(xlToLeft).Column
       sp = InputBox("Sortierung")
       Range(Cells(2, 1), Cells(lz, ls)).Sort Key1:=Cells(2, sp), Header:=xlNo
    End Sub
    • Dieser Code sortiert die Daten von A2 bis zur letzten Zeile und Spalte.
  3. Führe das Makro aus:

    • Gehe zurück zu Excel und drücke ALT + F8, um das Makro auszuführen.
    • Wähle variables_sortieren aus und klicke auf "Ausführen".
  4. Gib die Spaltennummer zur Sortierung ein, wenn du dazu aufgefordert wirst.


Häufige Fehler und Lösungen

  • Problem: excel benutzerdefiniertes sortieren funktioniert nicht.

    • Lösung: Stelle sicher, dass die Option Header korrekt gesetzt ist. Wenn deine Tabelle Titel hat, setze Header:=xlYes. Andernfalls verwende Header:=xlNo.
  • Problem: Der Code sortiert die Daten nicht.

    • Lösung: Überprüfe die Spaltennummer, die du im InputBox eingibst, und stelle sicher, dass sie gültig ist.

Alternative Methoden

  • Verwendung von vba .sort: Eine Alternative zur Verwendung von Selection.Sort ist die direkte Verwendung von Range.Sort für mehr Kontrolle über die Sortierung.

    Range("A2:C10").Sort Key1:=Range("B2:B10"), Order1:=xlAscending, Header:=xlYes
  • Benutzerdefinierte Listen: Du kannst auch benutzerdefinierte Listen in Excel erstellen, die dir bei der Sortierung helfen, insbesondere wenn du nach spezifischen Kriterien sortieren möchtest.


Praktische Beispiele

  1. Einfaches Sortieren mit zwei Kriterien:

    Sub sortieren_mit_zwei_kriterien()
       Range("A2:C100").Sort Key1:=Range("A2:A100"), Order1:=xlAscending, Key2:=Range("B2:B100"), Order2:=xlDescending, Header:=xlYes
    End Sub
  2. Sortieren nach benutzerdefinierten Werten:

    Sub benutzerdefinierte_sortierung()
       Range("A2:A100").Sort Key1:=Range("A2:A100"), OrderCustom:=1, Header:=xlYes
    End Sub

Hierbei wird die Sortierung anhand einer benutzerdefinierten Liste durchgeführt, die in den Excel-Optionen definiert ist.


Tipps für Profis

  • Nutze Application.ScreenUpdating = False am Anfang deines Makros und setze es am Ende wieder auf True, um die Performance zu verbessern.
  • Überlege, ob du die MatchCase-Option verwenden möchtest, um die Sortierung case-sensitiv zu gestalten.
  • Verwende With-Anweisungen, um deinen Code lesbarer zu machen:

    With Range("A2:C100")
      .Sort Key1:=.Columns(1), Order1:=xlAscending, Header:=xlYes
    End With

FAQ: Häufige Fragen

1. Wie kann ich eine benutzerdefinierte Liste zum Sortieren in Excel erstellen?
Gehe zu "Datei" > "Optionen" > "Erweitert" > "Allgemein" und klicke auf "Benutzerdefinierte Listen bearbeiten". Dort kannst du deine eigene Liste erstellen.

2. Welche Excel-Version benötige ich für VBA?
VBA ist in den meisten Versionen von Excel verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und Microsoft 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige