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

Forumthread: Spalte [Datum] nach Monat sortieren

Spalte [Datum] nach Monat sortieren
17.07.2005 18:13:23
markus
Hallo zusammen,
Ich möchte mit einem CommandButton gerne eine Spalte mit Datumswerten sortieren. Die Werte sind im Format dd.mm.yyyy. Mit VB möchte ich gerne, dass die Jahresangaben ignoriert und der Tages, Monatsteil von heute weg sortiert wird. Da es sich um Geburtstage handelt, sollte ich dann eine Übersicht bekommen, wer die nächste Torte bekommt ...
Wie kann ich den selben Knopf benutzen, um die Sortierung umzukehren? Also statt ASC sollte dann DESC sortiert werden.
Mit Range("A4:O500").Sort bin ich mit meinem Brain nicht weiter gekommen.
es grüsst,
de Markus
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spalte [Datum] nach Monat sortieren
17.07.2005 19:00:12
Nepumuk
Hallo Markus,
benutze zwei zusätzliche Spalten. Eine für das Monat und eine für den Tag. Füllen kannst du die Spalten mit Formeln. Wenn die Daten in Spalte A ab Zeile 1 beginnen, dann:
Für das Monat: =MONAT(A1)
Für den Tag: =TAG(A1)
Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
AW: Spalte [Datum] nach Monat sortieren
17.07.2005 22:07:21
markus
Hallo zurück!
Nunja, das mit der Spalte kann und wird klappen. Ist mir aber nicht schön genug. Ich habe eine Adressliste und die möchte ich von Zeit zu Zeit drucken, da kann es schnell gehen, dass der Druckbreich verrutscht! Das muss doch irgendwie mit ".sort" im VB möglich sein. So aus dem Hintergrund ganz flink...
Merci für deinen Tipp Nepomuk,
Gruss Markus
Anzeige
AW: Spalte [Datum] nach Monat sortieren
17.07.2005 22:35:29
Nepumuk
Hi,
du kannst die Spalten ausblenden und trotzdem sortieren. Denn für eine VBA - Lösung fehlen mir die Angaben zum Aufbau der Tabelle und dir die Kenntnisse das ganze im Bedarfsfall anzupassen.
Gruß
Nepumuk
Excel & VBA – Beispiele
Anzeige
AW: Spalte [Datum] nach Monat sortieren
18.07.2005 00:21:27
Erich
Hallo Markus,
zeigt die folgende Tabelle einen Teil dessen, was du wolltest ("von heute weg sortiert")?
   |      A      |   B   | C |      D      |   E   |       F        |
-- | ----------- | ----- | - | ----------- | ----- | -------------- |
1 | Geburt | Name | | Geburt | Name | GebT in Tagen |
2 | 16.06.1944 | a | | 17.07.2005 | k | 0 |
3 | 01.01.1966 | b | | 20.07.2004 | j | 3 |
4 | 15.01.1966 | c | | 01.08.1999 | g | 15 |
5 | 02.05.1977 | d | | 31.12.1977 | e | 167 |
6 | 31.12.1977 | e | | 01.01.1988 | f | 168 |
7 | 01.01.1988 | f | | 01.01.1966 | b | 168 |
8 | 01.08.1999 | g | | 15.01.1966 | c | 182 |
9 | 16.07.2000 | h | | 02.05.1977 | d | 289 |
10 | 20.07.2004 | j | | 16.06.1944 | a | 334 |
11 | 17.07.2005 | k | | 16.07.2000 | h | 364 |

Die Daten in den Spalten A und B wurden eingegeben.
Das folgende Makro berechnet (für max. 200 Zeilen) die Spalten D und E mit den gleichen Daten, aber sortiert nach der Anzahl der Tage zum nächsten Geburtstag (spaßhalber in Spalte F ausgegeben). Die Ergenisse stehen nur für die Demo in den Spalten D und E, sie könnten natürlich auch die Daten in den Spalten A und B überschreiben.
Option Explicit
Type zeile
dd As Date
tt As String
nr As Long
End Type

Sub Sort_Geb()
Dim zz&, ii&, jj&
Dim dat(1 To 200) As zeile, zwi As zeile
'                                                   Einlesen
zz = 1
While Not IsEmpty(Cells(zz + 1, 1)) And zz < 200
dat(zz).dd = Cells(zz + 1, 1)
dat(zz).tt = Cells(zz + 1, 2)
dat(zz).nr = _
DateSerial(Year(Date), Month(Cells(zz + 1, 1)), Day(Cells(zz + 1, 1))) _
- DateSerial(Year(Date), Month(Date), Day(Date))
'        GebTag in diesem Jahr schon vorüber -> nächstes Jahr
If dat(zz).nr < 0 Then _
dat(zz).nr = dat(zz).nr + DateSerial(Year(Date) + 1, 1, 1) _
- DateSerial(Year(Date), 1, 1)
zz = zz + 1
Wend
'                                                   Sortierung
For ii = 1 To zz - 2
For jj = ii + 1 To zz - 1
If dat(jj).nr < dat(ii).nr Then
zwi = dat(jj)
dat(jj) = dat(ii)
dat(ii) = zwi
End If
Next jj
Next ii
'                                                   Ausgabe
Cells(1, 4) = Cells(1, 1)
Cells(1, 5) = Cells(1, 2)
Cells(1, 6) = "GebT in Tagen"
For ii = 1 To zz - 1
Cells(ii + 1, 4) = dat(ii).dd
Cells(ii + 1, 5) = dat(ii).tt
Cells(ii + 1, 6) = dat(ii).nr
Next ii
End Sub

Soll die Tabelle bei der "umgekehrten Sortierung" aussagen, wie viele Tage seit dem letzten Geburtstag vergangen sind? Das sähe sehr ähnlich aus.
Grüße aus Kamp-Lintfort
Erich
Anzeige
AW: Spalte [Datum] nach Monat sortieren
18.07.2005 17:03:13
Markus
Hallo Erich,
Meine Tabelle sieht so aus:
| A | B | C
-- | ----------- | ----- | -
1 | Geburt | Name |
2 | 16.06.1944 | a |
3 | 01.01.1966 | b |
4 | 15.01.1966 | c |
5 | 02.05.1977 | d |
6 | 31.12.1977 | e |
7 | 01.01.1988 | f |
8 | 01.08.1999 | g |
9 | 16.07.2000 | h |
10 | 20.07.2004 | j |
11 | 17.07.2005 | k |
Wobei es noch weitere Spalten für Adressen beinhaltet. Ist aber ein Detail....
Ich möchte auf einen klick die zuoberst jenen Namen haben, der als nächstes Geburtstag hat. Dabei spielt das Jahr keine Rolle! Also nur nach Tag und Monat, beginnend ab heute sortieren. Wie ginge das?
(Ich bin nicht ganz neu hier, Programmieren fällt mir leicht. Du kannst gerne etwas VB posten)
Besten Dank,
de Markus
Anzeige
AW: Spalte [Datum] nach Monat sortieren
18.07.2005 18:59:22
Erich
Hallo Markus,
eigentlich dachte ich, dir in meinem letzten Beitrag schon einigen VBA-Code geschickt zu haben...
Aber ich habs noch mal geändert und vereinfacht, lasse Excel eine Hilfsspalte sortieren und hab das Ganze dem Click-Ereignis von CommundButton1 zugeordnet. Den folgenden Text kopier bitte in den Code deiner Tabelle:
Option Explicit
Private Sub CommandButton1_Click()
Dim zz&
'                                               Hilfsspalte einfügen
Columns(2).Insert Shift:=xlToRight
Columns(2).NumberFormatLocal = "Standard"
Cells(1, 2) = "Sort"
'                                               Hilfsspalte füllen
zz = 2
While Not IsEmpty(Cells(zz, 1))
Cells(zz, 2) = _
DateSerial(Year(Date), Month(Cells(zz, 1)), Day(Cells(zz, 1))) _
- DateSerial(Year(Date), Month(Date), Day(Date))
'  wenn GebTag schon vorüber, dann im nächsten Jahr
If Cells(zz, 2) < 0 Then _
Cells(zz, 2) = Cells(zz, 2) + DateSerial(Year(Date) + 1, 1, 1) _
- DateSerial(Year(Date), 1, 1)
zz = zz + 1
Wend
'                                          nach Hilfsspalte sortieren
[A1].Sort Key1:=Range("B2"), Order1:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
'                                               Hilfsspalte löschen
Columns(2).Delete Shift:=xlToLeft
Cells(2, 2).Select
End Sub

Ists so ok?
Grüße aus Kamp-Lintfort
Erich
Anzeige
AW: Spalte [Datum] nach Monat sortieren
19.07.2005 21:42:47
Markus
Hallo Erich,
jepp. jetzt hats wunderbar geklappt. Besten Dank für deine Nachsicht nochmals den Code zu posten.
es grüsst,
Markus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Spalte mit Datumswerten nach Monat sortieren


Schritt-für-Schritt-Anleitung

Um eine Spalte mit Datumswerten nach Monat zu sortieren, kannst Du folgende Schritte ausführen:

  1. Daten vorbereiten: Stelle sicher, dass Deine Datumswerte im Format dd.mm.yyyy in einer Spalte stehen, z.B. in Spalte A.

  2. Hilfsspalte einfügen: Füge eine neue Spalte neben Deiner Datenspalte ein, um die Monate zu berechnen. Gehe zu Spalte B und benutze die Formel:

    =MONAT(A1)

    Ziehe die Formel nach unten, um die Monate für alle Datumswerte zu berechnen.

  3. Sortierung durchführen: Markiere die gesamte Tabelle und gehe zu Daten > Sortieren. Wähle die Hilfsspalte (Spalte B) aus und stelle sicher, dass Du nach Aufsteigend sortierst.

  4. Hilfsspalte entfernen: Nachdem die Sortierung abgeschlossen ist, kannst Du die Hilfsspalte ausblenden oder löschen.


Häufige Fehler und Lösungen

  • Fehler: Datumswerte werden nicht korrekt erkannt.

    • Lösung: Überprüfe, ob die Datumswerte als Datum formatiert sind. Du kannst dies über Start > Zahlenformat überprüfen und gegebenenfalls anpassen.
  • Fehler: Sortierung funktioniert nicht.

    • Lösung: Stelle sicher, dass Du die gesamte Datenreihe markierst, bevor Du die Sortierung durchführst.

Alternative Methoden

  1. VBA-Makro verwenden: Wenn Du automatisierte Lösungen bevorzugst, kannst Du ein einfaches VBA-Makro erstellen, das die Datumswerte sortiert. Hier ist ein Beispiel:

    Sub Sort_Geb()
       ' Hilfsspalte zur Berechnung der Differenz zu heute
       Dim zz As Long
       Columns(2).Insert Shift:=xlToRight
       Cells(1, 2) = "Sort"
       zz = 2
       While Not IsEmpty(Cells(zz, 1))
           Cells(zz, 2) = DateDiff("d", Date, Cells(zz, 1))
           zz = zz + 1
       Wend
       ' Sortieren
       [A1].Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes
       Columns(2).Delete
    End Sub
  2. Pivot-Tabellen: Du kannst auch Pivot-Tabellen verwenden, um Deine Daten nach Monat zu filtern. Füge die Datumswerte in eine Pivot-Tabelle ein und gruppiere sie nach Monat.


Praktische Beispiele

Angenommen, Du hast folgende Daten in Deiner Excel-Tabelle:

A B
16.06.1944 a
01.01.1966 b
15.01.1966 c
02.05.1977 d
31.12.1977 e

Wenn Du nach dem Monat sortierst, solltest Du die Tabelle so sehen:

A B
02.05.1977 d
01.01.1966 b
15.01.1966 c
16.06.1944 a
31.12.1977 e

Tipps für Profis

  • Datum ohne Jahr sortieren: Wenn Du nur nach Monat und Tag sortieren möchtest, kannst Du eine Kombination aus den Funktionen TAG() und MONAT() verwenden, um Hilfsspalten zu erstellen, die nur den Monat und den Tag enthalten.

  • Automatisierung: Nutze VBA, um den Sortiervorgang mit einem Button zu automatisieren, damit Du mit einem Klick die nächste Geburtstagsliste erhalten kannst.


FAQ: Häufige Fragen

1. Wie kann ich Geburtstage nach Monat sortieren? Du kannst die oben genannten Schritte benutzen, um die Geburtstage nach Monat zu sortieren. Verwende Hilfsspalten, um die Monate zu extrahieren.

2. Ist es möglich, nach Tag und Monat zu sortieren? Ja, Du kannst die Funktionen TAG() und MONAT() verwenden, um weitere Hilfsspalten zu erstellen, die es ermöglichen, nach Tag und Monat zu sortieren.

3. Funktioniert das in allen Excel-Versionen? Die beschriebenen Methoden sollten in den meisten modernen Versionen von Excel funktionieren, einschließlich Excel 2010, 2013, 2016 und 2019.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige