Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
948to952
948to952
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Spaltensortieren als Makro

Spaltensortieren als Makro
15.02.2008 11:22:46
rupi2
Hallo,
ich bastele an einer Geburtstagsdaten - Sortierung meiner Tabelle.
Zur Erklärung:
ich habe eine Tabelle in der pro Zeile ein Kunde steht mit unzähligen Informationen.
Unter anderem in Spalte "BK" das Geburtsdatum und in Spalte "BL" der anstehende Geburtstag als Zahl
( z.B. in "BK" = 15.März.1970 und in "BL" = 38 )
Die gesamte Tabelle nach dem Alter in Spalte "BL" aufsteigend zu sortieren ist ja kein Problem.
Aber :
wie muß ich sortieren, dass das Geburtsdatum in Spalte "BK" welches vom aktuellen Datum an gesehen
als nächstes ansteht und so weiter... an oberster Stelle steht.
( z.B. nach dem sortieren sollte in Spalte "BK" der 15.März.1970 vor dem 16.März.1969 stehen, hingegen der 14.Febuar.1970 an letzter Stelle, da heute der 15.Febuar ist )
Außerdem muß die Sortierung auf die gesamte angezeigte Tabelle wirken ( um Name und Anschrift in anderen Spalten zu sehen ).
Als Hinweis:
durch eine vorherige Sortierung mittels Autofilter ( zuständiger Betreuer ) sind die Zeilen nicht fortlaufend
( 1 bis 350 ).
Es wäre mir am liebsten als Makro, dann kann ich es mit einer Schaltfläche verknüpfen.

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

Betreff
Datum
Anwender
Anzeige
AW: Spaltensortieren als Makro
15.02.2008 12:29:26
Dieter
Hallo Rupi2,
dazu brauchst Du kein Makro, aber ein Mordsding von Formel.
Du richtest eine Hilfsspalte ein und füllst sie mit folgender Formel:
=Wenn(Datum(1900;Monat(BK2);Tag(BK2))-Datum(1900;Monat(Heute());Tag(Heute()))>0;
Datum(1900;Monat(BK2);Tag(BK2))-Datum(1900;Monat(Heute());
Datum(1900;Monat(BK2);Tag(BK2))-Datum(1900;Monat(Heute())+366)
in Worten: Monat/Tag vom Geburtstag minus Monat/Tag vom heutigen Datum (ich hoffe, ich habe in der Formel keine Klammer übersehen)
wenn das Ergebnis positiv ist, liegt der Geburtstag in der Zukunft, bei 0 genau heute und negativ in der Vergangenheit.
Zum Sortieren müssen aber die negativen Werte auch in der Zukunft liegen, also einfach ein Jahr dazu zählen (wegen eventuellem Schaltjahr 366 Tage)
Dann nach der Hilfspalte sortieren.
Gruß
Dieter

Anzeige
AW: Spaltensortieren als Makro
15.02.2008 12:46:00
Wolli
Hallo rupi, ähnlich wie Dieter biete ich Dir auch eine Formel an:
=WENN(DATUM(JAHR(HEUTE());MONAT(B2);TAG(B2))<=HEUTE();DATUM(JAHR(HEUTE())+1;MONAT(B2);TAG(B2)); DATUM(JAHR(HEUTE());MONAT(B2);TAG(B2)))
(in B2 steht der Geburtstag)
Ergebnis ist der nächste Geburtstag, der ansteht. Das in einer Zusatzspalte lässt sich gut sortieren.
Kannst natürlich auch folgende Formel in die Altersspalte schreiben:
=(WENN(DATUM(JAHR(HEUTE());MONAT(B2);TAG(B2))<=HEUTE();DATUM(JAHR(HEUTE())+1;MONAT(B2);TAG(B2)); DATUM(JAHR(HEUTE());MONAT(B2);TAG(B2)))-HEUTE())+(JAHR(WENN(DATUM(JAHR(HEUTE());MONAT(B2);TAG(B2)) <=HEUTE();DATUM(JAHR(HEUTE())+1;MONAT(B2);TAG(B2));DATUM(JAHR(HEUTE());MONAT(B2);TAG(B2)))) -JAHR(B2)) /100
Als Zahl formatiert hast Du vor dem Komma die Tage bis zum nächsten Geburtstag (sortierfähig!) und nach dem Komma das dann erreichte Alter (fehlerhaft für Jopi Heesters).
Eine Makro-Sortier-Lösung muss mit dem Problem umgehen, dass Jahr und Tag sich im Datum "verstecken", daher arbeitet das unten gepostete Makro mit 1. Sortieren und 2. Zeilen tauschen.
Gruß, Wolli

Anzeige
AW: Spaltensortieren als Makro
15.02.2008 12:33:00
Holger
Hallo rupi2
hier ein Vorschlag. Wenn deine Liste Überschriften hat, muss du den Header im Sort-Befehl auf xlYes anpassen:

Sub Sortieren_Geburtstag()
d = DateDiff("d", "1.1." + Right(Date, 4), Date) + 1
lz = Range("BL65336").End(xlUp).Row
Rows("1:" + CStr(lz)).Select
Selection.Sort Key1:=Range("BL1"), Order1:=xlAscending, Header:=xlNo, Orientation:= _
xlTopToBottom
For i = 1 To lz
If Cells(i, 64) >= d Then Exit For
Next i
If i > 1 And i 


Viel Erfolg
Holger

AW: Danke ... Danke
15.02.2008 14:28:00
rupi2
ich muß das alles erst am Montag testen und melde mich notfals noch einmal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige