| home |  
  

   © 2005 by Friedel Schmidt •  E-Mail  •                      Top  

   | impressum | feedback | home |  


Inhaltsverzeichnis

Suchen

Links
  

Geburtstagssortierung - mit VBA
Versionen: Alle

Manchmal steht man vor dem Problem, eine Geburtstagsliste zu erstellen, aber keine Sortierung passt. Da Datumsangaben in Excel als serielle Zahl verarbeitet werden wird zwar eine Liste korrekt nach den darin enthaltenen Werten sortiert - für eine Geburtstagsliste taugt das aber nichts. Abhilfe kann eine selbst gestrickte Sortierprozedur in VBA schaffen, die aber für Anfänger nicht so einfach zu realisieren ist. Auch hier funktioniert es mit einer Hilfsspalte - die nachher wieder gelöscht wird.

Dazu einfach den folgenden Code in ein Modul schreiben oder kopieren:

Sub Sortieren()
   
Dim iRow As Integer
   iRow = Cells(Rows.Count, 1).End(xlUp).Row
   Range("C1").FormulaR1C1 = "=TEXT(RC[-1],""MM.TT"")"
   Range("C1:C" & iRow).FillDown
   Range("A1").CurrentRegion.Sort _
      key1:=Range("C1"), order1:=xlAscending, _
      key2:=Range("A1"), order2:=xlAscending, _
      header:=xlNo
   Columns("C").Delete
End Sub 


Hier die Erläuterung der einzelnen Schritte:

Die Ausgangsliste, nach Namen sortiert:
 
  A B
1 Claudia 16.09.1963
2 Else 22.05.1990
3 Helmut 19.11.1985
4 Karl 21.02.1977
 
Die Anweisung iRow = Cells(Rows.Count, 1).End(xlUp).Row zählt die Anzahl der Zeilen in der ersten Spalte.

Mit der Anweisung Range("C1").FormulaR1C1 = "=TEXT(RC[-1],""MM.TT"")" wird die Formel =TEXT(B1;"MM.TT.") in die Zelle C1 geschrieben.
 
  A B C
1 Claudia 16.09.1963 09.16
2 Else 22.05.1990  
3 Helmut 19.11.1985  
4 Karl 21.02.1977  
Formeln der Tabelle
C1 : =TEXT(B1;"MM.TT")
 
Range("C1:C" & iRow).FillDown "kopiert" die Formel aus C1 nach C2:C4
 
  A B C
1 Claudia 16.09.1963 09.16
2 Else 22.05.1990 05.22
3 Helmut 19.11.1985 11.19
4 Karl 21.02.1977 02.21
Formeln der Tabelle
C1 : =TEXT(B1;"MM.TT")
C2 : =TEXT(B2;"MM.TT")
C3 : =TEXT(B3;"MM.TT")
C4 : =TEXT(B4;"MM.TT")
 
Die Anweisung
Range("A1").CurrentRegion.Sort _
    key1:=Range("C1"), order1:=xlAscending, _
    key2:=Range("A1"), order2:=xlAscending, _
    header:=xlNo
sortiert die Liste aufsteigend zuerst nach Spalte C (dem Geburtstag) und dann nach Spalte A
 
  A B C
1 Karl 21.02.1977 02.21
2 Else 22.05.1990 05.22
3 Claudia 16.09.1963 09.16
4 Helmut 19.11.1985 11.19
 
Die Spalte C wird mit der Anweisung Columns("C").Delete gelöscht und die fertig sortierte Geburtstagsliste steht zur Verfügung.
 
  A B
1 Karl 21.02.1977
2 Else 22.05.1990
3 Claudia 16.09.1963
4 Helmut 19.11.1985
 
Natürlich muss das Makro an die eigenen Bedürfnisse angepasst werden. Insbesondere die Hilfsspalte C muss entweder leer sein oder im Makro muss entsprechend eine andere Spalte gewählt werden.



Die Darstellung der Excel Tabellen auf dieser Seite erfolgte mit    Excel Jeanie HTML  3.0    Download  


Geburtstage sortieren - ohne VBA
Beispiele zur Altersberechnungen