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

Forumthread: variablen Bereich sortieren

variablen Bereich sortieren
Anne
Hallo,
in einer Tabelle möchte ich einen variablen Bereich auf verschiedene Weise sortieren:
1. nach Spalte A - alphabetisch aufsteigend
2. nach Spalte D - numerisch absteigend
Mit den Makros
Sub sortiere_namen()
' sortiert nach dem Namen der Teilnehmer
Dim EndeA As Integer
Dim SpalteA As Integer
EndeA = Sheets("allgemein").Cells(Rows.Count, 1).End(xlUp).Row + 1
SpalteA = Sheets("allgemein").Cells(1, 2)
Range(Cells(6, 1), Cells(EndeA, SpalteA)).Sort Key1:=Cells(6, 1), Order1:=xlDescending, Header:= _
xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
Range("A3").Select
End Sub
klappt das Sortieren zwar, allerdings sortiert er mir die Daten bei alphabetischen Sortierung nun von auch absteigend.
Wie kann ich die Art des Sortierens mitgeben?
Vielen Dank für Eure Hilfe
Anne
Anzeige

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

Betreff
Benutzer
Anzeige
AW: variablen Bereich sortieren
01.06.2010 18:51:11
Ramses
Hallo
Probier mal
Option Explicit
Sub Sort_A_asc_B_des()
Dim wks As Worksheet
Dim EndeA As Integer
Set wks = Worksheets("Allgemein")
EndeA = wks.Cells(Rows.Count, 1).End(xlUp).Row + 1
With wks
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range("A6:A" & EndeA), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=Range("D6:D" & EndeA), SortOn:=xlSortOnValues, Order:= _
xlDescending, DataOption:=xlSortNormal
With .Sort
.SetRange Range("A5:D9")
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
Gruss Rainer
Anzeige
AW: variablen Bereich sortieren
01.06.2010 19:13:27
Anne
Hallo,
funktioniert nur bedingt, d.h. die Sortierreihenfolge ist nun wieder o.k., es müßte aber die Spaltenangabe auch variabel sein.
Geht so etwas?
Gruß
Anne
Bin kein Hellseher...
01.06.2010 20:30:31
Ramses
Hallo
"...funktioniert nur bedingt..."
Tut es nicht, es funktioniert einwandfrei und genau so wie du es gewollt hast, bzw. wie dein Makro sortierte.
Wenn du was anderes haben willst, musst du das von Anfang an sagen.
"...1. nach Spalte A - alphabetisch aufsteigend
2. nach Spalte D - numerisch absteigend.."
Genau das macht es. Hellsehen kann hier niemand.
Hier eine Variable Variante. Die spaltennummer kommt aus B2 wie in deinem Beispiel
Sub Sort_A_asc_B_des2()
Dim wks As Worksheet
Dim EndeA As Integer
Dim colSort As Long
Set wks = Worksheets("Tabelle1")
colSort = wks.Range("B2")
EndeA = wks.Cells(Rows.Count, 1).End(xlUp).Row
With wks
.Sort.SortFields.Clear
.Sort.SortFields.Add Key:=Range(Cells(6, 1), Cells(EndeA, 1)), SortOn:=xlSortOnValues,  _
Order:=xlAscending, DataOption:=xlSortNormal
.Sort.SortFields.Add Key:=Range(Cells(6, colSort), Cells(EndeA, colSort)), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With .Sort
.SetRange Range(Cells(6, 1), Cells(EndeA, colSort))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
End Sub
Gruss Rainer
Anzeige
AW: SORRY
01.06.2010 21:29:16
Anne
Hallo,
aber nun funktioniert es.
Vielen, vielen Dank!!!
Gruß
Anne
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

Variablen Bereich in Excel mit VBA sortieren


Schritt-für-Schritt-Anleitung

Um einen variablen Bereich in Excel mit VBA zu sortieren, kannst du folgendes Makro verwenden. Dieses Beispiel zeigt, wie du nach einer bestimmten Spalte alphabetisch aufsteigend und nach einer anderen Spalte numerisch absteigend sortierst.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf „VBAProject (DeinWorkbookName)“ klickst und dann „Einfügen“ -> „Modul“ wählst.
  3. Kopiere den folgenden Code in das Modul:
Sub SortiereVariablenBereich()
    Dim wks As Worksheet
    Dim EndeA As Long
    Dim colSort As Long
    Set wks = Worksheets("Allgemein") ' Arbeitsblatt anpassen
    colSort = wks.Range("B2").Value ' Spaltennummer aus Zelle B2

    EndeA = wks.Cells(Rows.Count, 1).End(xlUp).Row

    With wks.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range(Cells(6, 1), Cells(EndeA, 1)), Order:=xlAscending
        .SortFields.Add Key:=Range(Cells(6, colSort), Cells(EndeA, colSort)), Order:=xlDescending

        .SetRange Range(Cells(6, 1), Cells(EndeA, colSort))
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .Apply
    End With
End Sub
  1. Schließe den VBA-Editor und führe das Makro aus, um die Daten zu sortieren.

Häufige Fehler und Lösungen

  • Fehler: "Das Sortieren hat nicht funktioniert."

    • Lösung: Stelle sicher, dass der Bereich, den du sortieren möchtest, korrekt definiert ist. Überprüfe die Zellreferenzen und die Header-Einstellungen.
  • Fehler: "Die Spalte ist nicht gefunden."

    • Lösung: Vergewissere dich, dass die Spaltennummer in der Zelle B2 korrekt ist und die Spalte tatsächlich existiert.
  • Sortierreihenfolge ist nicht wie gewünscht:

    • Lösung: Überprüfe die Sortieroptionen im Code. Achte besonders darauf, dass die korrekten Sortierbefehle (xlAscending und xlDescending) verwendet werden.

Alternative Methoden

Neben VBA kannst du auch die integrierten Sortierfunktionen von Excel nutzen:

  1. Wähle den Bereich aus, den du sortieren möchtest.
  2. Gehe zu „Daten“ in der Menüleiste.
  3. Klicke auf „Sortieren“ und wähle die gewünschten Optionen aus.

Diese Methode ist einfach und erfordert keine Programmierkenntnisse, jedoch kann sie weniger flexibel sein, wenn du mit variablen Bereichen arbeiten möchtest.


Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung des Codes:

  • Beispiel 1: Sortiere nach Namen in Spalte A und nach Alter in Spalte D.
  • Beispiel 2: Wenn die Spaltennummer für das Sortieren dynamisch aus einer anderen Zelle kommt, wie in dem oben beschriebenen Makro.

Tipps für Profis

  • Nutze die Option Explicit-Anweisung am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden. Dies hilft, Fehler zu vermeiden.
  • Experimentiere mit der .SortMethod, um verschiedene Sortieroptionen auszuprobieren, falls du mit spezifischen Sprachsortierungen arbeiten möchtest.
  • Verwende SortFields.Clear, um sicherzustellen, dass vorherige Sortieroptionen zurückgesetzt werden, bevor du neue hinzufügst.

FAQ: Häufige Fragen

1. Wie kann ich die Sortierreihenfolge ändern? Du kannst die Sortierreihenfolge ändern, indem du die Werte xlAscending und xlDescending in deinem VBA-Code anpasst.

2. Funktioniert dieses Makro in allen Excel-Versionen? Ja, dieses Makro sollte in den meisten modernen Excel-Versionen funktionieren, die VBA unterstützen.

3. Kann ich mehrere Spalten gleichzeitig sortieren? Ja, indem du mehrere SortFields.Add-Anweisungen hinzufügst, kannst du nach mehreren Spalten gleichzeitig sortieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige