Lebensalter farbig hinterlegen

Windows XP
RT 6.0.2

Hallo Listenteilnehmer,

ich erstelle zur Zeit eine Adressenliste für Vereinsmitglieder.
In der Spalte F des Rechenblatts steht das Geburtsdatum.
In Spalte G wird das Alter der Mitglieder errechnet Formel= DJahr(F2;Heute).
Die Altersberechnung wird zuverlässig berechnet und angezeigt.
Ab Lebensalter 65 soll alle 5 Jahre das Mitglied mit einem Besuch des Vorstands geehrt werden.
Zur besseren Übersicht möchte ich gerne erreichen, dass ab dem Alter 65, 70, 75, 80 usw.
das Lebensalter mit einer farbigen Füllung oder farbigen Schrift angezeigt wird.

Ist das in RT möglich?

Vielen Dank im voraus.

Beste Grüße

Klaus

Re: Lebensalter farbig hinterlegen

#9648 On 16 Juli, 2010 07:39 Klaus Liebnow said,

Hallo Thomas, hallo Mathias,
herzlichen Dank für eure Tipps.

Da ich Formeln und Funktionen in RT äußerst selten anwende, werde ich mich nun einmal
an eure Vorschläge herantasten.

Danke auch auf diesem Weg an alle übrigen Tippgeber in diesem Forum.

Beste Grüße

Klaus

PS. Martin's Power Functions vorhanden

Re: Lebensalter farbig hinterlegen

#9643 On 15 Juli, 2010 10:52 Thomas Kaegi said,

Hallo Klaus

Drei Lösungen (die ersten zwei hinterlegen die Zellen rot, die dritte schreibt das Alter rot):

1. Setzt die Erweiterung "Martin's Power Functions" voraus!
In Zelle H1 die Formel
SetzeBereichFüllung(G1;Wenn(Und(Rest(G1;5)=0;G1>60);'Rote Füllung';'Standardfüllung'))
einsetzen und nach unten kopieren.

2. Ohne die Erweiterung "Martin's Power Functions":
Als erstes legst du eine Zeichnung an, die aus nichts anderem besteht als einem Rechteck an der Position 0/0 mit der gewünschten Füllung (der Rand sollte dieselbe Farbe haben). Die Grösse des Rechtecks sollte der Grösse der Zelle entsprechen, in welchem das Alter ausgewiesen wird. - Dupliziere den Container mit dem Rechenblatt, und lösche im Inventar die dabei neu angelegte Rechenblattkopie. Stattdessen ziehst du aus dem Inventar das Rechenblatt mit der Altersberechnung in den jetzt leeren Rahmen, klick in irgend eine Zelle des Rechenblatts und wähle im Rechenblattmenü den Befehl "Lage anhängen". Zieh die angelegte Zeichnung aus dem Inventar in irgend eine Zelle der Lage 2, z.B. Zelle A1. In Zelle G1 schreibst du die Formel
Wenn(Und(Rest([1]G1;5)=0;[1]G1>60);$A$1;$B$1))
Und ziehst diese Formel nach unten. Den Container mit der zweiten Lage des Rechenblatts stellst du nun nach hinten und positionierst ihn genau hinter demjenigen mit der Altersberechnung. Nun wählst du diesen Container, gibst ihm die Füllvorlage "Transparent" und ebenso der Spalte G des Rechenblatts, so dass du hinter Spalte G der ersten Lage die zweite Lage siehst.

Wie du sicher weisst, bin ich gar kein Freund von "Formel nach unten kopieren". Hier einmal mehr der Grund: Was passiert, wenn dein Verein plötzlich mehr Mitglieder hat und eine der Formeln zu wenig weit nach unten kopiert wurde? Oder was, wenn du plötzlich eine Zeile einfügst, weil du ein neues Mitglied alfabetisch am richtigen Ort einordnen möchtest? Mit grosser Wahrscheinlichkeit fehlt in dieser Zeile danach irgend eine der nötigen Formeln.

Deshalb folgende zwei Formeln für diese zweite Variante, die irgendwo im Rechenblatt stehen können, z.B die erste in Zelle H1 (von Lage 1):
Zuerst für die Altersberechnung:
VSuchlauf(F:F;LfdZelle≠'';0;SetzeZelle(DJahr(LfdZelle;Heute);G:G;LfdIndex))
Falls deine Tabelle eine Kopfzeile hat:
VSuchlauf(F:F;Und(LfdIndex>1;LfdZelle≠'');0;SetzeZelle(DJahr(LfdZelle;Heute);G:G;LfdIndex))

und die zweite für das farbig Hinterlegen (z.B. in Zelle H1 von Lage 2):
VSuchlauf([1]G:[1]G;LfdZelle≠'';0;SetzeZelle(Wenn(Und(Rest(LfdZelle;5)=0;LfdZelle>60);$A$1;$B$1);G:G;LfdIndex))
Falls deine Tabelle eine Kopfzeile hat:
VSuchlauf([1]G:[1]G;Und(LfdIndex>1;LfdZelle≠'');0;SetzeZelle(Wenn(Und(Rest(LfdZelle;5)=0;LfdZelle>60);$A$1;$B$1);G:G;LfdIndex))

3. Definiere erst ein Werteformat "Jubilar" wie folgt:
00;00['Rote Füllung']
Dieses ordnest du der Spalte G zu, in welcher das Alter ausgewiesen wird. Dann gibst du in Zelle H1 folgende Formel ein:
VSuchlauf(F:F;LfdZelle≠'';0;SetzeZelle(Wenn(Und(Rest(DJahr(LfdZelle;Heute);5)=0;
DJahr(LfdZelle;Heute)>60);-1;1)*DJahr(LfdZelle;Heute);G:G;LfdIndex))

Falls mit Kopfzeile Ergänzung der Suchlauf-Bedingung wie oben!
Der Trick besteht hier darin, dass die Alter 65, 70 etc. als negative Zahlen in Spalte F eingesetzt werden. Dank dem Werteformat "Jubilar" werden negative Zahlen ohne Minuszeichen, dafür rot geschrieben.

Wie du siehst, ist mit RagTime "fast alles" möglich. Solche Tricks findest du in meinem Buch.

Gruss, Thomas

Re: Lebensalter farbig hinterlegen

#9646 On 15 Juli, 2010 20:01 Thomas Kaegi said,

Hallo Klaus

Noch ein Vorschlag 4, der - ähnlich wie mein ursprünglicher Vorschlag 3 - das Alter der Jubilare rot schreibt. Dazu wird kein besonderes Werteformat benötigt und auch keine Erweiterungen. Zudem ist der gewünschte Schriftstil für die Jubilare noch etwas flexibler einstellbar.

Setze in Zelle I1 eine "1" in "Standardschrift" und in Zelle J1 ebenfalls eine "1", aber in der gewünschten Farbe und im gewünschten Stil, also z.B. rot, fett, kursiv. Die folgende Formel in Zelle H1 berechnet alle Alter in Spalte G und setzt sie gleich in den richtigen Schriftstil:

VSuchlauf(F:F;LfdZelle≠'';0;SetzeZelle(Index(#I1:J1;1+Und(Rest(DJahr(LfdZelle;Heute);5)=0;
DJahr(LfdZelle;Heute)>60))*DJahr(LfdZelle;Heute);G:G;LfdIndex))

Falls deine Tabelle eine Kopfzeile hat, musst du die Bedingung des Suchlaufs ergänzen:
Und(LfdIndex>1;LfdZelle≠'') statt nur LfdZelle≠''.

Der Trick ist hier, dass das berechnete Alter mit dem Wert 1 aus einer der beiden Zellen I1 oder J1 multipliziert und dabei das Schriftformat des Multiplikators gleich mit übernommen wird. Wenn die Bedingung
Und(Rest(DJahr(LfdZelle;Heute);5)=0;DJahr(LfdZelle;Heute)>60)
nicht erfüllt ist, werden für die Multiplikation dank der Index-Funktion Wert und Stil aus Zelle I1 benützt, wenn die Bedingung erfüllt ist Wert und Stil aus Zelle J1.

Natürlich kannst du diese Bedingung für die Benützung des zweiten Formats auch ändern. Schliesslich wäre es auch möglich, mit weiteren Bedingungen noch andere Schriftstile zuzuordnen, die in weiteren Zellen des Index-Bereichs definiert sein müssten.

Gruss, Thomas

Re: Lebensalter farbig hinterlegen

#9647 On 15 Juli, 2010 21:15 Thomas Kaegi said,

Hallo Klaus

Und dann noch eine völlig andere Idee: In einem zweiten Rechenblatt eine Liste der Jubilare erstellen. Das könnte für den Vorstand sehr praktisch sein.

Angenommen dein Rechenblatt heisse "Mitglieder" und du willst die Liste in einem zweiten Rechenblatt erstellen. Dort soll in Spalte A das Datum stehen, an welchem die Jubilare ihren Geburtstag feiern, in Spalte B ihr Alter und in den Spalten C:G die Daten, die in der Mitgliederliste in den Spalten A:E stehen, also z.B. Name, Vorname, Strasse mit Nr., PLZ und Ort, Telefonnummer (damit der Vorstand seinen Besuch anmelden kann).

Ich gehe davon aus, dass im Rechenblatt "Mitglieder" das Alter in Spalte G bereits berechnet wurde, z.B. durch eine der Formeln gemäss meinem Vorschlag 2.

Leg ein zweites Rechenblatt an. In diesem setzest du in Zelle J1 folgende Formel:

VSuchlauf(Mitglieder!$G:$G;Und(LfdZelle≠'';Rest(LfdZelle;5)=0;LfdZelle>60);0;
SetzeZelle(SetzeDatum(JahrVon(Heute);MonatVon(Index(Mitglieder!$F:$F;LfdIndex));
Wenn(Und(TagVon(Index(Mitglieder!$F:$F;LfdIndex))=29;MonatVon(Index(Mitglieder!$F:$F;LfdIndex))=2);28;
TagVon(Index(Mitglieder!$F:$F;LfdIndex))));A:A;LfdZähler)&
SetzeZelle(LfdZelle;B:B;LfdZähler)&
SetzeZelle(Index(Mitglieder!$A:$A;LfdIndex);C:C;LfdZähler)&
SetzeZelle(Index(Mitglieder!$B:$B;LfdIndex);D:D;LfdZähler)&
SetzeZelle(Index(Mitglieder!$C:$C;LfdIndex);E:E;LfdZähler)&
SetzeZelle(Index(Mitglieder!$D:$D;LfdIndex);F:F;LfdZähler)&
SetzeZelle(Index(Mitglieder!$E:$E;LfdIndex);G:G;LfdZähler))

Diese Formel sucht im Bereich "Mitglieder!G:G" die Jubilare gemäss deiner Definition. Ist ein Jubilar gefunden, so wird in Spalte A des zweiten Rechenblatts das Datum im aktuellen(!) Jahr eingesetzt, an welchem der Jubilar Geburtstag hat. Dabei wird ggf. der 29. Februar in den 28. geändert. In Spalte B wird das Alter übertragen und in die folgenden Spalten die Angaben aus dem Rechenblatt "Mitglieder", Spalten A:E.

Es kann zweckmässig sein, der Spalte A ein Werteformat "Mon 3. April" zuzuordnen, das wie folgt definiert ist: TTT" "T". "MMMM
So kann sich der Vorstand die Daten optimal vormerken.

Nun kannst du die Tabelle im zweiten Rechenblatt sortieren, entweder nach Spalte A aufsteigend, so dass der Vorstand gleich die Tage in der richtigen Reihenfolge sieht, an welchen er Jublilare besuchen soll. Oder du sortierst nach Spalte B absteigend und A aufsteigend. Dann erhältst du eine Liste der Jubilare mit dem ältesten Jubilar zuoberst und dem jüngsten zuunterst.

In meinem Buch findest du ab Seite 231 eine Anleitung, wie mit Suchläufen auch automatisch sortiert werden kann, bezeichnenderweise an einem Beispiel mit Jubilaren. Aber das wäre wohl für einen Verein den Luxus auf die Spitze getrieben.

Empfehlenswert könnte es übrigens sein, die Jubilare des kommenden Jahres jeweils vor Jahresende zu ermitteln, damit sicher keine Jubiläen von "Neujahrskindern" verpasst werden. Dann müsste obige Formel leicht abgeändert werden: "JahrVon(Heute)" müsste durch "JahrVon(Heute)+1" ersetzt werden und auch bei der Formel für die Altersermittlung wäre jeweils zum Ergebnis 1 zu addieren.

Empfehlenswert ist zudem, die Berechnung mit einem Knopf auszulösen und dabei zuerst die Tabelle im zweiten Rechenblatt zu löschen, damit keine "Jubilarleichen" vom letzten Jahr in der Tabelle stehen bleiben.

Gruss, Thomas

Re: Lebensalter farbig hinterlegen

#9644 On 15 Juli, 2010 19:04 Mathias Milchmeyer said,
Hallo Klaus,

hier noch ein anderer Ansatz, der Dir die Alterszahlen farbig markiert und mit RagTime ohne Erweiterungen umsetzbar ist.
Als Ergebnis hast Du die Möglichkeit, zwei Zahlen einzutippen und sofort die Alterswerte zu diesen Grenzwerten passend eingefärbt zu bekommen.
In meinem Beispiel tippst Du 50 und 60 ein. Im Ergebnis werden in Deiner Liste alle Alterswerte bis einschließlich 49 schwarz dargestellt, alle Alterswerte von 50 bis 59 rot und alles darüber grün.

Um es nicht zu kompliziert zu machen, habe ich nur zwei Altersgrenzen berücksichtigt. Die Formel kann man jedoch mit weiteren Wenn-Abfragen entsprechend anpassen und weitere Grenzen einbauen.
Meine Beschränkung auf zwei Wenn- Abfragen  ist nicht genau das, wonach Du gefragt hast, aber dafür kannst Du jederzeit nach den gewünschten Kriterien filtern, oder Dir weitere Wenn- Abfragen ergänzen.
Du kannst zum Beispiel alle Teilnehmer sofort rausfiltern, die jünger als 90, aber älter als 53 sind. So kannst Du gezielt Deine Jubilare oder auch krumme Werte wie "66" finden.
Wenn das Dokument einmal eingerichtet ist (Was ein wenig Arbeit erfordert), genügt einfach das Eintippen der gewünschten Alterswerte in drei Zellen und die Werte in Deiner Spalte G sind sofort in der Farbe und anderen Schrifteigenschaften wie fett, schräg etc, angepasst.


Hier die Anleitung:

Bei Dir in Spalte G stehen die Alterswerte.

Erzeuge in Deinem Dokument ein neues Rechenblatt, dem Du den Namen "Format" (jedoch ohne die Gänsefüßchen) gibst.
Dieses Rechenblatt kann z.B. auf der gleichen Seite im Layout in einem anderen Rahmen liegen und für den Ausdruck auf unsichtbar gestellt sein.
Der Name ist wichtig, da er in der kommenden Formel verwendet wird. Du solltest daher genau diesen Namen verwenden, wenn Du die Formel bei Dir übernehmen möchtest.
In das Rechenblatt "Format" trägst du die nachstehenden Angaben ein:
In Zelle A1: "Jünger als:"
In Zelle B1: "Jünger als:"
In Zelle C1: "über:"

Dann schreibst Du in aufsteigender Reihenfolge die gewünschten Altersgrenzen, z.B.
in Zelle A2: "50"
in Zelle B2: "60"
Und eine Formel in C2: "B2"

Mit diesen Angaben werden in der folgenden Formel zwei Grenzen definiert: In A2 und B2 werden die gewünschten Grenzwerte eingetragen, die Du beliebig variieren kannst.
Wenn Du zwei Grenzen hast, gibt es also drei verschiedene Bereiche, daher die Formel in C3, damit hier die gleiche Zahl wie in B2 steht.

Die Schriftfarbe in den Zellen A2, B2, C2 färbst Du so ein, wie Du es haben möchtest. Zusätzlich kannst Du hier die Schriftgröße, Fettdruck und weitere Schrifteigenschaften zuweisen.
Zum Beispiel die "50" in A2 schwarz, die "60" in B2 rot und die "60" in c2 grün.

Mit der weiter unten stehenden Formel vergleiche ich die Altersangaben in Deinem bisherigen Rechenblatt  in Spalte D (Zelle 1 bis 20) mit den Grenzwerten und hole mir mit dem # das zugehörige Format aus den eben eingefärbten Zahlen.
Gleichzeitig frage ich diese Zahlen ab. Die könnten auch in der Formel stehen, aber so bleibt es übersichtlicher und Du kannst schnell mit der Eingabe in den Zellen A2 , B2, C2 die Farbdarstellung und die Grenzwerte verändern, ohne dabei Formeln zu löschen oder andere Fehler zu machen.
Das Abholen eines Formates mit dem #-Zeichen fügt jedoch den Inhalt der Zelle an das Ergebnis an. So würde also an das Alter "40" dann zwar die schwarze Schriftfarbe zugewiesen werden, aber gleichzeitig würde dann aus der "40" eine "4050" werden.
Damit das nicht passiert, muß die Zelle mit dem Format leer sein.
Daher gibt es nochmal drei Formeln, die nur das Format aus der zweiten Zeile in die dritte Zeile übertragen:

In Zelle A4 die Formel: "SetzeZelle(Links(#A2;0);A3)"
In Zelle B4 die Formel: "SetzeZelle(Links(#C2;0);B3)"
In Zelle C4 die Formel: "SetzeZelle(Links(#B2;0);C3)"

Mit diesen Formeln wird der Inhalt einschließlich dem Format aus den Zellen in Zeile 3 "abgeholt" und dabei jedoch die Länge 0 Zeichen verwendet. Das abgeholte Format wird dann in korrespondierende Zellen in Zeile 4 geschrieben. Da die Länge der Zeichen "0" ist, steht in den Zellen dann kein Inhalt und es wird später aus dem berechneten Alter keine 4050, da an die 50 eine Zeichenkette mit der Länge 0 angehängt wird.

Das waren die erforderlichen Vorbereitungen.
Jetzt setzt Du in Dein bisheriges Rechenblatt in die Zelle H1 die nachstehende Formel ein:

VSuchlauf(G1:G20;1=1;0;Wenn(LfdZelle<Format!$A$2;SetzeZelle(Wert(LfdZelle&(Format!#$A$3));G1:G20;LfdIndex);Wenn(LfdZelle<Format!$B$2;SetzeZelle(Wert(LfdZelle&(Format!#$C$3));G1:G20;LfdIndex);SetzeZelle(Wert(LfdZelle&(Format!#$B$3));G1:G20;LfdIndex)));'')

Ich habe mich hier auf die Zellen G1 bis G20 beschränkt. Das könnte auch auf G:G erweitert werden, was mir jedoch nicht so sinnvoll erscheint, weil RagTime daran eventuell sehr lange rechnen wird.
Es ist besser, die maximale Mitgliederzahl, zum Beispiel 200 oder was bei Dir eben gut paßt, anzuwenden. Für 200 Teilnehmer müßtest Du dann jeweils G1:G200 an Stelle der G1:G20 schreiben.

In der Formel wird in dem Bereich G1 bis G20 zeilenweise zuerst geprüft, ob der jeweilige Alterswert unter 50 liegt, da die Zelle A2 im Rechenblatt "Format" den Wert 50 enthält.
Falls ja, wird die Schrift schwarz gefärbt. (da die Zelle A2 im Rechenblatt "Format" schwarze Schrift enthält)
Falls nein, wird geprüft, ob der Alterswert unter 60 liegt. Falls ja, dann rot, falls nein, dann grün.

Du kannst also mit den drei Werten in "Format" A1, B1 und C1 für Dich sinnvolle Grenzwerte eintragen und die Zahlen entsprechend einfärben.
Die bereits von Dir berechneten Alterswerte in der Spalte G werden dann dazu passend eingefärbt. Deine Formeln in der Spalte G werden dabei nicht überschrieben.

Es klingt jetzt komplizierter als die Lösungen von Thomas, aber es funktioniert sehr gut und ist variabel, da man die gewünschte Auswertung über das "Format"- Rechenblatt gut steuern kann.
Vielleicht bringt Dich dieser Vorschlag zu dem Ergebnis, daß Du Dir vorgestellt hast.

Viel Erfolg wünscht



--
Mit freundlichem Gruß in die Liste

Mathias Milchmeyer



Am 15.07.2010 um 09:31 schrieb Klaus_Liebnow:

Windows XP
RT 6.0.2

Hallo Listenteilnehmer,

ich erstelle zur Zeit eine Adressenliste für Vereinsmitglieder.
In der Spalte F des Rechenblatts steht das Geburtsdatum.
In Spalte G wird das Alter der Mitglieder errechnet Formel= DJahr(F2;Heute).
Die Altersberechnung wird zuverlässig berechnet und angezeigt.
Ab Lebensalter 65 soll alle 5 Jahre das Mitglied mit einem Besuch des Vorstands geehrt werden.
Zur besseren Übersicht möchte ich gerne erreichen, dass ab dem Alter 65, 70, 75, 80 usw.
das Lebensalter mit einer farbigen Füllung oder farbigen Schrift angezeigt wird.

Ist das in RT möglich?

Vielen Dank im voraus.

Beste Grüße

Klaus