automatisches Monat-weises Saldo in Buchungstabelle
Moderator: Moderatoren
automatisches Monat-weises Saldo in Buchungstabelle
Hallo, Ich bin der Neue!
Trotz Suche nichts wirklich passendes im Forum gefunden!
Was will ich also:
In einer Buchungstabelle, mit Datumsspalte, jeweils am Monatsende (und nur dort) in einer extra Spalte über bestimmte Spalten mit Buchungen eine Summe (Monats-Saldo) anzeigen lassen.
Ich hoffe das ist klar soweit. Ich weiss das mit Matrixform von Summe und Monat() das gesuchte für eine vorgegebene Zelle geht. Aber erstens will ich mich nicht um diese Zelle separat kümmern sondern der "Spalte" selbst überlassen die Monatsgrenzen zu erkennen und zweitens sind die Buchungstage in verschiedenen Monaten unteschiedlich viele.
Danke vorab, JeanLuc
Trotz Suche nichts wirklich passendes im Forum gefunden!
Was will ich also:
In einer Buchungstabelle, mit Datumsspalte, jeweils am Monatsende (und nur dort) in einer extra Spalte über bestimmte Spalten mit Buchungen eine Summe (Monats-Saldo) anzeigen lassen.
Ich hoffe das ist klar soweit. Ich weiss das mit Matrixform von Summe und Monat() das gesuchte für eine vorgegebene Zelle geht. Aber erstens will ich mich nicht um diese Zelle separat kümmern sondern der "Spalte" selbst überlassen die Monatsgrenzen zu erkennen und zweitens sind die Buchungstage in verschiedenen Monaten unteschiedlich viele.
Danke vorab, JeanLuc
In Spalte B steht das Datum, in Spalte C steht der Betrag
=SUMMENPRODUKT(MONAT($B$2:$B$32000)=MONAT(B2);JAHR($B$2:$B$32000)=JAHR(B2);$C$2:$C$32000)
Das kannst Du jetzt noch in eine WENN-Abfrage einbinden, z.B.:
=WENN(TAG(B2+1)=1;obigeFormel;"")
Diese Formel kannst Du einfach nach unten ziehen.
Aufpassen bei den absoluten und relativen Adressen!
Ist natürlich auch eine Matrixformel, aber ich verstehe nicht recht, was Du mit "der Spalte überlassen" meinst
=SUMMENPRODUKT(MONAT($B$2:$B$32000)=MONAT(B2);JAHR($B$2:$B$32000)=JAHR(B2);$C$2:$C$32000)
Das kannst Du jetzt noch in eine WENN-Abfrage einbinden, z.B.:
=WENN(TAG(B2+1)=1;obigeFormel;"")
Diese Formel kannst Du einfach nach unten ziehen.
Aufpassen bei den absoluten und relativen Adressen!
Ist natürlich auch eine Matrixformel, aber ich verstehe nicht recht, was Du mit "der Spalte überlassen" meinst
Danke
Da ich aber nicht garantieren kann, dass mein neuer Monat mit ner Buchung am Ersten beginnt mache ich das so:
Was mich auch ein wenig stört ist die Tatsache das in der gesamten Formel das Feld A24 bzw. die Datumszelle einer jeden Zeile 3x addressiert wird (mit deinem Vorschlag gar viermal). Kann man/frau nicht beim ersten Referenzieren eine Variable zuweisen und diese weiter verwenden?
Oder läufts intern eh so!
Eigentlich will ich sagen das mich beim grafischen editieren der Formel die vielen bunten Bereiche nerven, gleichwohl sie alle das selbe aussagen sollen.

Damit meinte ich genau deine angedachte Lösung einfach die Formel runter zu ziehen und mittels WENN anzuzeigen.Lenu hat geschrieben: aber ich verstehe nicht recht, was Du mit "der Spalte überlassen" meinst
Da ich aber nicht garantieren kann, dass mein neuer Monat mit ner Buchung am Ersten beginnt mache ich das so:
- WENN((TAG(A24)>TAG(A25));...;"")
Sollte doch auch mit=WENN(TAG(B2+1)=1;obigeFormel;"")
- WENN((TAG(A24)>TAG(A24+1));...;"")

Was mich auch ein wenig stört ist die Tatsache das in der gesamten Formel das Feld A24 bzw. die Datumszelle einer jeden Zeile 3x addressiert wird (mit deinem Vorschlag gar viermal). Kann man/frau nicht beim ersten Referenzieren eine Variable zuweisen und diese weiter verwenden?
Oder läufts intern eh so!

Die Formel war nicht nur angedacht. Ich habe ein Testfile erstellt und sie getestet.JeanLuc hat geschrieben: Damit meinte ich genau deine angedachte Lösung einfach die Formel runter zu ziehen und mittels WENN anzuzeigen.
Ja, muss auch so funktionieren.Was ich nicht hin bekam war deine Variante mit
=WENN(TAG(B2+1)=1;obigeFormel;"")
Sollte doch auch mit
WENN((TAG(A24)>TAG(A24+1));...;"")
Voraussetzung: Du arbeitest mit Version 2. In der 1er-Version gehen solche Matrix-Formeln noch nicht
Du kannst natürlich auch indirekt adressieren:Was mich auch ein wenig stört ist die Tatsache das in der gesamten Formel das Feld A24 bzw. die Datumszelle einer jeden Zeile 3x addressiert wird (mit deinem Vorschlag gar viermal). Kann man/frau nicht beim ersten Referenzieren eine Variable zuweisen und diese weiter verwenden?
=WENN(TAG(INDIREKT(ADRESSE(ZEILE();SPALTE()-2)))>TAG(INDIREKT(ADRESSE(ZEILE()+1;SPALTE()-2))); SUMMENPRODUKT(MONAT($A$3:$A$32000)=MONAT(INDIREKT(ADRESSE(ZEILE();SPALTE()-2))); JAHR($A$3:$A$32000)=JAHR(INDIREKT(ADRESSE(ZEILE();SPALTE()-2)));$B$3:$B$32000);"")
Wenn Du jetzt das hier:
INDIREKT(ADRESSE(ZEILE();SPALTE()-2))
als Name speicherst (einfügen/Namen), z.B. DatumLinks
und das hier:
INDIREKT(ADRESSE(ZEILE()+1;SPALTE()-2))
als DatumUnten
dann kannst Du die Formel so schreiben:
=WENN(TAG(DatumLinks)>TAG(DatumUnten);SUMMENPRODUKT(MONAT($A$3:$A$32000)=MONAT(DatumLinks);JAHR($A$3:$A$32000)=JAHR(DatumLinks);$B$3:$B$32000);"")
Und die anderen Komponenten kannst Du auch als Namen auslagern:
VglMonat: MONAT($A$3:$A$32000)=MONAT(DatumLinks)
VglJahr: JAHR($A$3:$A$32000)=JAHR(DatumLinks)
VglSumme: $B$3:$B$32000
(Jahr, Monat, Summe würde ich nicht als Namen empfehlen)
=WENN(TAG(DatumLinks)>TAG(DatumUnten);SUMMENPRODUKT(VglMonat;VglJahr;VglSumme);"")
Oder auch:
Saldo: SUMMENPRODUKT(VglMonat;VglJahr;VglSumme)
Dann heisst die Formel noch:
=WENN(TAG(DatumLinks)>TAG(DatumUnten);Saldo;"")
Da kannst Du frei experimentieren
Deine Probleme möchte ich haben!Eigentlich will ich sagen das mich beim grafischen editieren der Formel die vielen bunten Bereiche nerven

Aber versuchs doch mal mit dem Funktions-Assistenten. Da kannst Du einerseits die Formel in zerlegten Teil-Strings Bearbeiten oder als schwarzen Text, ohne bunte Darstellung.
Da scheint mir ein Denkfehler vorzuliegen. Du benutzt innerhalb der Formel verschiedene Funktionen, die alle wieder einen Zellbezug benötigen. Dass der nun immer der gleiche ist, liegt am konkreten Formelaufbau. Die gleiche Formel könnte aber auch an jedem Zellbezugspunkt einen anderen Eintrag haben, insofern ist es nicht immer das gleiche, auch wenn jetzt bei Deiner Formel zufällig immer A2 steht....gleichwohl sie alle das selbe aussagen sollen.
Und da Du nunmal immer einen Zellbezug angeben musst, macht es ja keinen Unterschied, ob Du 3x A2 schreibst oder 3x einen Variablennamen.
Relative Zelladressen sind ja eigentlich Variablen.
Wenn Du mit Namen arbeitest, wie im obigen Beispiel, dann sind das keine Variablen mehr, sondern eigentlich Konstanten, die sich nur durch die indirekte Adressierung teilweise "austricksen" lassen. Wenn Du aber Spalten einschiebst, muss der Bezug separat angepasst werden: SPALTE()-2 nach SPALTE()-3
Lange Formeln kann man mit Namen übersichtlicher gestalten, aber für den vorliegenden Fall scheint mir die Definition dieser Namen umständlicher als die paar Zelladressen. Und man muss noch etwas bedenken:
Wenn Du einen Zellbezug wie: A2 ersetzt durch etwas wie: INDIREKT(ADRESSE(ZEILE();SPALTE()-2)) wird die Formel ja zunächst um einiges länger. Es passiert daher öfter, dass man den Fehlercode 512 bekommt, weil die Formel die zulässige Gesamtlänge überschreitet, auch wenn in der Zelle selbst nur noch ein kurzer Ausdruck sichtbar ist.
PS:
WENN((TAG(A24)>TAG(A24+1))
genügt unter Umständen nicht. Evtl. musst Du den Monat auch noch mit einbeziehen. Wenn z.B. die letzte Buchung eines Monats am 13.Februar liegt und die nächste am 20. März
Wenn ich das richtig überflogen habe sind das aber keine inline Definitionen, müssen also irgendwo im Dokument abgelegt werdenLenu hat geschrieben: Deine Probleme möchte ich haben!![]()
Aber versuchs doch mal mit dem Funktions-Assistenten. Da kannst Du einerseits die Formel in zerlegten Teil-Strings Bearbeiten oder als schwarzen Text, ohne bunte Darstellung.

Wie du siehst taucht hier verdammt oft das Datumsfeld auf "A24".
Was ich jetzt wollte war sowas wie beim ersten auftreten des Feldes im Code eine Variable zu definieren
z.B. "A24:=§" oder sonst wie, und dann nur noch "§" zu verwenden.
Code: Alles auswählen
=WENN((A24<(A24)+1));
(SUMMENPRODUKT(MONAT($A$4:$A$32002)=MONAT(A24);
JAHR($A$4:$A$32002)=JAHR(A24);
$H$4:$H$32002)
+VERWEIS(DATUM(JAHR(A24);MONAT(A24);1)-1; %arbeitet intern offenbar wie Vergleich
$A$4:$A$32002; %findet letztes datum aus Vormonat
$I$4:$I$32002)
);"")
+VORLAGE(WENN(NICHT(ISTLEER(AKTUELL()));"Monats-Saldo(grau)"))

Da hast du natürlich recht, aber kommt nicht vor!Lenu hat geschrieben: PS:
WENN((TAG(A24)>TAG(A24+1))
genügt unter Umständen nicht. Evtl. musst Du den Monat auch noch mit einbeziehen. Wenn z.B. die letzte Buchung eines Monats am 13.Februar liegt und die nächste am 20. März
Was aber noch viel einfacher ist und da funzt plötzlich auch das oben erwähnte:

- WENN((A5<(A5+1);...)

Keine Ahnung, was "inline-Definitionen" sind. Der Funtkionsautopilot oder -assistent ist einfach ein Werkzeug, mit dem Du die aktuelle Formel grafisch bearbeiten kannst. Er stellt sie in einer Struktur dar, in der Du jede Funktion einzeln bearbeiten kannst, also nicht immer in dem ganzen Formel-Schlauch rumfummeln musst.JeanLuc hat geschrieben:Wenn ich das richtig überflogen habe sind das aber keine inline Definitionen, müssen also irgendwo im Dokument abgelegt werdenLenu hat geschrieben: Aber versuchs doch mal mit dem Funktions-Assistenten. Da kannst Du einerseits die Formel in zerlegten Teil-Strings Bearbeiten oder als schwarzen Text, ohne bunte Darstellung.
Was Du damit gewinnst, wenn du statt A24 "nur" $ schreibst, erschliesst sich mir nicht so recht. Aber vielleicht hilft ja das mit den Namen, was ich oben geschrieben habe. Aber nicht vergessen: variabler als eine relative Zelladresse ist nichts. Nur sie passt sich beim Kopieren oder beim Einschieben von Zeilen/Spalten automatisch an.Wie du siehst taucht hier verdammt oft das Datumsfeld auf "A24".
Was ich jetzt wollte war sowas wie beim ersten auftreten des Feldes im Code eine Variable zu definieren
z.B. "A24:=§" oder sonst wie, und dann nur noch "§" zu verwenden.
Weiss zwar jezt grad nicht wofür, aber trotzdem: dankeDu kannst es also jetzt haben.

Ohne TAG - was nützt Dir das? Der 3. Februar ist ja auch kleiner als der 4. Februar, aber da willst Du ja keine Formelanzeige, oder?Was aber noch viel einfacher ist und da funzt plötzlich auch das oben erwähnte: WENN((A5<A5+1);...)
Zuletzt geändert von Lenu am Di, 07.02.2006 12:57, insgesamt 1-mal geändert.
Hier übrigens noch ein Link zum Arbeiten mit Namen:
http://www.ooowiki.de/NamenF%C3%BCrFormeln
Achtung: beim "Überfliegen" wird womöglich wieder eine inline-Definition daraus
http://www.ooowiki.de/NamenF%C3%BCrFormeln
Achtung: beim "Überfliegen" wird womöglich wieder eine inline-Definition daraus

Nach nochmaligem Durchlesen habe ich jetzt wohl verstanden, was Du meinst. du beziehst Dich gar nicht auf den Funktions-Assistenten, sondern auf die Definition von Namen.JeanLuc hat geschrieben:Wenn ich das richtig überflogen habe sind das aber keine inline Definitionen, müssen also irgendwo im Dokument abgelegt werdenLenu hat geschrieben: Aber versuchs doch mal mit dem Funktions-Assistenten. Da kannst Du einerseits die Formel in zerlegten Teil-Strings Bearbeiten oder als schwarzen Text, ohne bunte Darstellung.
Ja, die müssen ausserhalb der Formel gespeichert werden. Dafür sind sie global verfügbar, in allen Tabellen eines Arbeitsblattes. Aber mit sowas wie "$" (falls das überhaupt geht) werden Formeln nicht lesbarer. Und wenns ums schnelle Schreiben geht:
Da geht nichts über das "Zusammenklicken" mit dem Funktionsautopiloten. Ich habe schon öfter Formeln schreiben müssen, die bis zu 1000 Zeichen lang waren. Kein Problem mit dem Funktionsautopiloten. Auch das Kopieren innerhalb eines langen Formelstrings. Und Tippfehler gibts dann auch nicht mehr.
Dass das geht, hätte ich jetzt auch nicht gedacht. Ich hätte angenommen, dass in dem Moment, wenn eine Formel in einer Zelle steht, diese nicht mehr als LEER erkannt wird.JeanLuc hat geschrieben: +VORLAGE(WENN(NICHT(ISTLEER(AKTUELL()));"Monats-Saldo(grau)"))
Aber OO (oder seine Väter) ist eben klüger als ich, habe ich schon mehrfach feststellen müssen.