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

Forumthread: Daten sortieren mit VBA

Daten sortieren mit VBA
Thomas
Hallo weltbestes Forum
ich möchte mit VBA in einer Liste Daten sortieren.
Wenn ich für die Abläufe aufzeichne schreibt Excel folgenden Code:
Range("A2:M2").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Ich möchte aber nicht auf das Datenblatt wechseln und ändere den Code wie folgt ab:
Set a = Sheets("KD")
a.Range("A2:M2").Sort Key1:=Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Problem ist nur, das funktioniert nicht. Excel meldet einen Fehler.
Ich suche schon lange nach einer Lösung, habe aber bislang nichts gefunden.
Kann mir jemand einen Tipp geben. Im Voraus schon mal vielen Dank.
Gruß Thomas
PS: das Problem liegt sicher irgendwo zwischen Tastatur und Stuhl ...
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Daten sortieren mit VBA
21.05.2010 17:34:02
Peter
Hallo Thomas,
versuch es so:
Option Explicit
Public Sub Sort()
With ThisWorkbook.Worksheets("KD")
.Range("A2:M2").Sort _
Key1:=.Range("A2"), Order1:=xlAscending, _
Header:=xlNo, orderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub

Gruß Peter
Anzeige
korrekt Referenzieren
21.05.2010 17:47:36
ChristianM
Hallo Thomas,
jedes Auftreten eines Bereiches benötigt die Referenz auf das Worksheet, daher musst du auch bei "Key1:=Range("A2")" das Worksheet angeben, also z.B: "Key1:=a.Range("A2")"
Aber das alleine wird dir nicht viel weiterhelfen, da du so nur den Bereich "A2:M2" sotierst, also nur eine Zeile.
Mein Vorschlag:

Option Explicit
Sub TestIt()
Dim lngLR As Long
With Sheets("KD")
lngLR = .Cells(.Rows.Count, 1).End(xlUp).Row
.Cells(2, 1).Resize(lngLR - 1, 13).Sort _
Key1:=.Range("A2"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End With
End Sub
Gruß
Christian
Anzeige
AW: korrekt Referenzieren
21.05.2010 19:44:01
Thomas
Hi Christian
der Hinweis auf die Referenz war genau richtig!
Mein Code sieht jetzt so aus:
Function KDNrAktualisieren()
Set a = Sheets("KD")
ZEnde = a.Cells(1, 2).End(xlDown).Row
a.Range("A2:M" & ZEnde & "").Sort Key1:=a.Range("A2"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
ActiveWorkbook.Names.Add Name:="Kundennummer", RefersToR1C1:="=KD!R2C1:R" & ZEnde & "C1"
End Function
und funktioniert.
Vielen Dank auch an Peter!
Anzeige
Das ist aber keine Function...
22.05.2010 07:56:54
ChristianM
... die liefert ja nichts zurück.
also - nimm 'ne Sub. Und auf "a" kannst du auch verzichten, wenn du direkt auf das Sheet referenzierst wie in meinem Bsp.
Gruß
Christian
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Daten sortieren mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um mit VBA in Excel Daten zu sortieren, kannst du folgende Schritte befolgen:

  1. Visual Basic Editor öffnen: Gehe in Excel auf Entwicklertools und klicke auf Visual Basic. Falls die Entwicklertools nicht sichtbar sind, kannst du sie in den Excel-Optionen aktivieren.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsx) und wähle Einfügen -> Modul.

  3. VBA-Code eingeben: Füge den folgenden Code in das Modul ein, um eine Tabelle zu sortieren:

    Option Explicit
    
    Sub SortiereTabelle()
       Dim lngLR As Long
       With Sheets("KD")
           lngLR = .Cells(.Rows.Count, 1).End(xlUp).Row
           .Cells(2, 1).Resize(lngLR - 1, 13).Sort _
           Key1:=.Range("A2"), Order1:=xlAscending, _
           Header:=xlNo, OrderCustom:=1, _
           MatchCase:=False, Orientation:=xlTopToBottom, _
           DataOption1:=xlSortNormal
       End With
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und gehe zurück zu Excel. Du kannst das Makro über Entwicklertools -> Makros ausführen.


Häufige Fehler und Lösungen

  • Fehler: "Objekt erforderlich": Stelle sicher, dass du die Sheets korrekt referenzierst. Zum Beispiel, ändere Key1:=Range("A2") zu Key1:=Sheets("KD").Range("A2").

  • Fehler: Sortieren funktioniert nicht: Überprüfe, ob der Bereich, den du sortieren möchtest, korrekt definiert ist. Der Code sollte sicherstellen, dass der gesamte relevante Bereich einbezogen ist, nicht nur eine Zeile.


Alternative Methoden

Falls du keine VBA-Programmierung nutzen möchtest, kannst du auch die integrierte Sortierfunktion in Excel verwenden:

  1. Wähle den Bereich, den du sortieren möchtest.
  2. Gehe zu Daten und klicke auf Sortieren.
  3. Wähle die Spalte aus, nach der sortiert werden soll, und gib die Sortierreihenfolge an (aufsteigend oder absteigend).

Diese Methode ist besonders nützlich für schnelle Sortierungen, wenn du nicht mit VBA arbeiten möchtest.


Praktische Beispiele

Hier sind zwei praktische Beispiele, um die Anwendung von VBA zur Sortierung von Daten zu veranschaulichen:

  1. Sortieren aufsteigend:

    Sub SortiereAufsteigend()
       With Sheets("KD")
           .Range("A2:M100").Sort Key1:=.Range("A2"), Order1:=xlAscending
       End With
    End Sub
  2. Sortieren absteigend:

    Sub SortiereAbsteigend()
       With Sheets("KD")
           .Range("A2:M100").Sort Key1:=.Range("A2"), Order1:=xlDescending
       End With
    End Sub

Diese Codes helfen dir, die Daten in der angegebenen Tabelle aufsteigend oder absteigend zu sortieren.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Fehler durch nicht deklarierte Variablen zu vermeiden.
  • Nutze With...End With: Dies verbessert die Lesbarkeit des Codes und verringert die Anzahl der benötigten Referenzen.
  • Automatisiere das Sortieren: Du kannst das Sortieren auch an Ereignisse koppeln, wie z. B. das Öffnen der Datei oder das Ändern von Zellen.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Spalten sortieren?
Du kannst mehrere Key-Parameter im Sortierbefehl angeben, z. B. Key1:=.Range("A2"), Key2:=.Range("B2").

2. Was ist der Unterschied zwischen xlAscending und xlDescending?
xlAscending sortiert die Daten in aufsteigender Reihenfolge (z. B. A-Z oder 1-10), während xlDescending die Daten in absteigender Reihenfolge sortiert (z. B. Z-A oder 10-1).

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