VBA für Einsteiger - MS Excel 2003 (1)

Von: Dieter Frommhold
Stand: 21. August 2007
5
(2)
Beitrag bewerten
Anmelden um Kommentare zu schreiben

Die Sortiermethode des Rangeobjektes

In einer Prozedur zum Sortieren der Daten wird eine Objektvariable verwendet

Die Kenntnis über das Sortieren von Listen wird vorausgesetzt ("Daten" - "Sortieren...").

Es soll ein Makro Nach_Namen_sortieren aufgezeichnet werden, das in Tabelle 1 die Zelle A3 auswählt und nach Nachnamen aufsteigend sortiert.

Ein weiteres Makro Nach_Personalnr_sortieren sortiere nach Personalnummer aufsteigend.

Tastenkombinationen sollen nicht zugewiesen werden.

Da nach dem Öffnen einer Arbeitsmappe die Aufzeichnungen in einem neuen Modul angelegt werden, seien Sie also nicht über ein zusätzliches Modul überrascht.

Das aufgezeichnete Ergebnis könnte so aussehen:

Sub nach_Namen_sortieren()

Sheets("Tabelle1").Select

Range("A3").Select

Range("A2:W35").Sort _
Key1:=Range("E3"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

End Sub

Sub nach_Personalnr_sortieren()

Sheets("Tabelle1").Select

Range("A3").Select

Range("A2:W35").Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

End Sub

Der Aufruf und die Abarbeitung der beiden neuen Prozeduren dürften keine Probleme machen.

Neu ist die Methode Sort, die auf das Range-Objekt "A2:W35" angewendet wird.. Von den folgenden Parameter ist Key1 von wesentlichen Interesse, der die Spalte festlegt, wonach sortiert werden soll.- Auch Order1:=xlAscending ist verständlich, denn dort wird die Sortierung als aufsteigend angegeben. Die folgenden Parameter werden aus dem Sortierdialog bzw. der Hilfe <F1> erklärt.

Diese beiden Sortiermethoden haben eine wesentlichen Nachteil: Es wird nur eine Liste vom konstanten Bereich "A2:W35" bearbeitet. Wenn die Liste größer wird, versagt diese Anweisung.

Sort wird auf einen Bereich angewendet. Die folgende Anweisung gestattet die Anwendung auf einen variablen Bereich.

Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion

CurrentRegion (hier ab Zelle A3) ist ein Bereichsobjekt (Range) und liefert immer den Bereich mit aktueller Größe. Dieses Objekt wird einer Objektvariablen zugewiesen. Diese Variable nimmt praktisch diesen Bereich auf und kann dann in verschiedenen Anweisungen verwendet werden

Zunächst definieren Sie diese Objektvariable.

Dim Bereich As Range

Dann weisen Sie ihr den aktuellen Bereich zu.

Set Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion

(Bereich zeigt zu der aktuellen Liste)

Nun ersetzen Sie den unveränderlichen Range ("A2:W35") durch den variablen Bereich.

Bereich.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

Korrigieren Sie die beiden Prozeduren.

Dim Bereich As Range ' Diese Variable wird vor der ersten Prozedur des Moduls notiert.

' : Damit können beide Prozeduren diese Variable nutzen.

Sub nach_Namen_sortieren()

Sheets("Tabelle1").Select

Range("A3").Select

Set Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion

Bereich.Sort Key1:=Range("E3"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

End Sub

Sub nach_Personalnr_sortieren()

Sheets("Tabelle1").Select

Range("A3").Select

Set Bereich = Worksheets("Tabelle1").Range("A3").CurrentRegion

Bereich.Sort Key1:=Range("A3"), Order1:=xlAscending, Header:= _

xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _

DataOption1:=xlSortNormal

End Sub

Nun können Sie die beiden Prozeduren problemlos aufrufen.

Dieser Beitrag ist öffentlich.
Zugriff auf alle Inhalte haben Sie als Mitglied

Werden Sie Probemitglied - kostenlos.

Ohne finanzielles Risiko haben Sie Zugriff auf alle Inhalte auf akademie.de, außer Downloads. Die Anmeldung dauert drei Minuten. Sie können während der ersten 14 Tage ohne Angabe von Gründen stornieren. Eine E-Mail genügt.

Weitere Informationen finden Sie auf unserer Infoseite zur Mitgliedschaft und in unseren AGB.

Ich bin bereits Mitglied
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein