Excel: zwei Spalten nach Datum sortieren

562 Aufrufe
Gefragt 9, Jun 2017 in Tabellenkalkulation von chiseil86
Hallo in die Runde,

ich habe eine Tabelle, die mich schier wahnsinnig macht ;-) und
hoffe, dass mir jemand dabei behilflich sein kann.

Ich habe eine Tabelle, die grundlegend folgendermaßen aufgebaut
ist:

Name | Geburtsdatum (TT MM YYYY) | Todesdatum (TT MM YYYY)

Nun möchte ich, dass die Tabelle so sortiert ist, dass mir an jedem
Tag des Jahres angezeigt ist, wer geboren und wer gestorben ist,
also was ist zum Beispiel alles am 01.01. passiert, was am 02.01.
und so weiter (Wer ist am 01.01. geboren und dann wer ist am 01.01.
gestorben, dann wer ist am 02.01. geboren und dann wer ist am
02.01. gestorben)
Dabei gibt es noch folgende zwei Hürden:
- Es sind nicht alle Daten für jede Zeile vorhanden, bei manchen
Personen ist das Geburtsdatum nicht bekannt, andere leben
beispielsweise noch. Deswegen kommt eine Pivot-Tabelle nicht in
Frage (das Gruppieren ist nicht möglich), die eigentlich ein gutes
Mittel wäre.
- Die Daten liegen zu einem großen Teil vor 1900, ich musste also
das Add-Ins "xdate" einsetzen.

Hat jemand eine Idee, wie ich das lösen könnte?

Viele Grüße
chriseil

19 Antworten

0 Punkte
Beantwortet 9, Jun 2017 von Nighty__
Hallo chriseil .-)

Deine Tools und die Option 1904 sind überflüssig!

Gruss Nighty


Autofilter in Wechselwirkung!
Spale A ab Zeile 2 Datumswerte

Die letzten beiden Spalten dienen als HilfsSpalte!

Sub DatumsSuche()
Dim Qarr As Variant, Darr As Variant, Marr As Variant
Dim ZeilenZähler As Long
If ActiveSheet.AutoFilterMode = False Then
Qarr = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
Darr = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
Marr = Range("A2:A" & ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row)
For ZeilenZähler = 1 To UBound(Qarr)
Darr(ZeilenZähler, 1) = Day(Qarr(ZeilenZähler, 1))
Marr(ZeilenZähler, 1) = Month(Qarr(ZeilenZähler, 1))
Next ZeilenZähler
Range(Cells(2, Columns.Count - 1), Cells(UBound(Qarr) + 1, Columns.Count - 1)) = Darr
Range(Cells(2, Columns.Count), Cells(UBound(Qarr) + 1, Columns.Count)) = Marr
ActiveSheet.Range(Cells(1, Columns.Count - 1), Cells(1, Columns.Count)).AutoFilter
ActiveSheet.Cells(1, Columns.Count - 1).AutoFilter Field:=1, Criteria1:=Day(Date)
ActiveSheet.Cells(1, Columns.Count).AutoFilter Field:=2, Criteria1:=Month(Date)
Else
ActiveSheet.Range(Cells(1, Columns.Count - 1), Cells(1, Columns.Count)).AutoFilter
Columns(Columns.Count - 1).Clear
Columns(Columns.Count).Clear
End If
End Sub
0 Punkte
Beantwortet 9, Jun 2017 von paul_1
Hallo,

hier wäre eine Datenbanklösung z.B. Access (Abfrage-Filterkriterien) ein echte Alternative

Gruß
Paul1
0 Punkte
Beantwortet 10, Jun 2017 von Nighty__
Hallo Paul1 :-)

Normalerweise geht das auch nicht in Excel 1.1.1701 und 1.1.2017 gemischt zu bearbeiten .-)
Day und Month von den Formeln unterscheiden sich sehr zu Day und Month von Vba!
Die alten Werte werden linksbündig zugeordnet(Stringformat),diese könnten aber rechtsbündig unter Format ausgerichtet werden.

Gruss Nighty
0 Punkte
Beantwortet 10, Jun 2017 von paul_1
Hallo Nighty,

Was Excel betrifft hast Du sicher recht
Ich habe mich noch nicht näher beschäftigt, da ich nicht weiß ob dem Fragesteller überhaupt Access zur Verfügung steht.
manuell die beiden Filter zu setzen geht jedenfalls.

schöne Grüße
Paul1
0 Punkte
Beantwortet 10, Jun 2017 von Nighty__
Hallo chriseil und Paul1 .-)

Mit 2 Spalten kommt die Tage!
Zum Testen war es erstmal eine Spalte .-)
Bei 2 Spalten haben wir dann 4 Hilfsspalten,ohne Hilfsspalten habe ich noch keine Idee
da das 1904 Problem immer auf der Lauer liegt .-)

Gruss Nighty
0 Punkte
Beantwortet 11, Jun 2017 von Nighty__
Hallo Paul1 .-)

Ich schliesse mih dich erstmal an,ob sich der Fragesteller wieder meldet!

Obiges Beispiel reicht für die Datenbank

Gruß Nighty
0 Punkte
Beantwortet 11, Jun 2017 von Nighty__
Hallo Community .-)

Noch für Interessierte,eine Function die Tag und Monat beliebiger Datumswerte ermittelt!
Ohne 1904 Option!

Gruss Nighty

Zelle=Range
Modus=0=Tag
Modus=1=Monat

Function DMDate(Zelle As Range, Modus As Boolean) As Integer
Dim DArr As Variant, MArr As Variant
If Modus = False Then
DArr = Zelle
DMDate = Day(DArr)
Else
MArr = Zelle
DMDate = Month(MArr)
End If
End Function
0 Punkte
Beantwortet 12, Jun 2017 von chriseil86
Lieber Nighty_,

erst einmal ganz herzlichen Dank für deine Hilfe!!! Ich habe den Code am Wochenende
ausprobiert, leider hat es nicht das gewünschte Ergebnis gebracht (siehe Fehlermeldung
https://www.dropbox.com/s/ewju0caqd51vlsi/Fehlermeldung_Excel_Geburtstage.JPG?dl=0 ).
Dann habe ich das ganze mal als Datenbank mit Access probiert, aber auch das hat nicht
hingehauen und mich mal wieder an den Rand des Wahnsinns gebracht. Bin aber weder ein
Excel- und noch viel weniger ein Access-Profi ;-)

Das xdate-Add-Ins habe ich verwendet, weil mir meine Tabelle als "immerwährender
Kalender" alle runden und halbrunden Geburtstage errechnen soll. (einen Screenshot der
Tabelle:
https://www.dropbox.com/s/ewju0caqd51vlsi/Fehlermeldung_Excel_Geburtstage.JPG?dl=0 ).
Die Erklärunghatte ich anfangs der Einfachheit halber weggelassen, weil ich das
Sortierproblem erst einmal im Blick hatte ;-) ...

Viele Grüße
chriseil
0 Punkte
Beantwortet 12, Jun 2017 von Nighty__
Hallo Chriseil .-)

Es musste ein Fehler kommen,da ich im ersten Test das Datum in Spalte A hatte :-)
Ich erstell das die Tage auf Spalte B+C

Gruss Nighty
0 Punkte
Beantwortet 12, Jun 2017 von chriseil86
Lieber Nighty,

oh man, da bin ich ja aber erstmal beruhigt, dass es nicht an mir lag ;-)))

Viele Grüße
Chriseil
...