Calc: Anzahl Tage von Ganz- und Teilmonaten einer Datumsdifferenz

Hallo zusammen,
suche jemand der eine komplizierte Datumsformel kann…

Hintergrund und lange Version:
ich habe ein Projekt in dem es darum geht, Studenten zu animieren Energie einzusparen. Dafür soll Ihnen gezeigt werden wie hoch ihr Verbrauch in jedem Monat ist. Nicht ganz regelmäßiges Ablesen der Zählerstände (alle ein bis zwei Monate) liefert die Daten um Balkendiagramme für jeden Monat zu erzeugen. Es gibt landesweit Durchschnittswerte die zeigen, im Monat Juli z.B. wird nur 1,7 % Heizenergie verbraucht, im Aug, 1,6 % und im Sept dann 5,2 % usw. Nun habe ich Bspw. die Zählerstände vom 10.07.2016 und vom 20.09.2016. Den errechneten Verbrauch von z.B. 9000 kWh will ich nun nicht mit 3000 kWh je Monat gleichverteilt im Balkendiagramm darstellen, sondern gewichtet nach den bekannten prozentualen Durchschnittswerten. Das ist ja kein Problem, aber nun hatte der Juli nur 21 Tage und der Sept nur 20. Um den Verbrauch auch noch an der Anzahl der Tage relativieren zu können brächte ich glaube ich eine Funktion die mir zählt wieviele Tage jedes Monats in genannten Zeitraum liegen.
Weiß jemand weiter?

Kurze Version:
Welche Funktion gibt mir die Anzahl der Tage für Juli, Aug, Sept zwischen diesen zwei Daten aus: 10.07.16 bis 20.09.16?
a) Tage zählen hilft nicht weiter, weil nicht die absolute Zahl der Tage gemeint ist.
b) Hier schien jemand etwas ähnliches zu machen, Volle Monate und Teilmonate für Zeitraum - - Office-Loesung.de da gehts aber um die Anzahl der TEILMONATE ich möcht die jedoch Anzahl der TAGE im Teilmonat wissen.

Kenn mich zu wenig in den Datumsformeln aus um sie kompliziert anzuwenden.

Dankbar für jeden Hint wie ich weiterkommen könnte…
Chris David

Hallo,

Lesetipp: CalcFunktionenDatum/RechnenMitDatumUndZeit - Archiv des LibreOffice- und OpenOffice.org-Wiki

Sowie Suchfunktion in LibreOffice Calc zu folgenden Formeln:

TAGE

DATUMDIF

Du wirst vermutlich den Zeitraum aufsplitten und dann die Verbrauchswerte aufgrund der Teilergebnisse verteilen müssen.

Hilft dir das?

Ciao

Hi Grantler,
danke, ja das hilft schon mal weiter… Dass Aufsplitten nötig ist, denke ich auch, daher gut dass du es auch so siehst. Ich bastel jetzt mal zusammen was ich hinbekomme und seh dann ob ich damit zum Ergebnis komme :wink: Schönen Abend!

Hallo Chris David,

ich habe das einmal versucht, obwohl ich mit Calc nicht so viel zu tun habe. In einem Tabellenblatt habe ich die Spalten A und B für die beiden Datumswerte vorbehalten. In der ersten Zeile meiner Tabelle stehen ab C die Zahlen 1 bis 12 für die Monate. Die folgende, zugegeben recht lange, Funktion zieht daraus für jeden Monat die entsprechende Anzahl an Tagen:

WENN(UND(MONAT($A2)<=C$1; MONAT($B2)>=C$1);WENN(UND(MONAT($A2)<C$1; MONAT($B2)>C$1);TAGEIMMONAT(C$1);WENN(UND(MONAT($A2)=MONAT($B2);MONAT($A2)=C$1);TAGE($B2;$A2);WENN(MONAT($A2)=C$1;DATUMDIF($A2;MONATSENDE($A2;0);"d");TAG($B2))));0 )

Diese Funktion habe ich in C2 stehen. In A2 steht das Startdatum, in B2 das Enddatum, in C1 die Monatsbezeichnung 1.

Gruß

Robert

(Letzte Bearbeitung zuerst:)
Ich hatte eigentlich mit einer Fortsetzung der Diskussion und mit Rückmeldungen von @chrisdavid gerechnet, aber hier tut sich wohl nichts mehr. Deshalb hänge ich jetzt die Ausarbeitung zum Thema, die ich damals vorbereitet hatte, und der ich gerade noch ein wenig angefügt habe, an. An Rückmeldungen wäre ich durchaus interessiert. Hier der versprochene Anhang. Meine darin enthaltenen Kommentare sind in (schlechtem) Englisch weil ich ggf. mehrfach verwendbare Beispiele nicht auf einen Sprachraum beschränken möchte. Die enthaltenen statistischen Daten sind die aktuell von den Münchner Stadtwerken verwendeten.

(Ich habe vor ein paar Jahren am Beispiel einer deutlich komplizierteren Frage grundsätzlich zu diesem Thema überlegt. Leider ist das eigentlich viel bessere libreofficeforum.org, wo das stattgefunden hat, inzwischen verstorben.)

Soweit ich das sehe gibt es zwei eher mathematische Problemzonen und zwei rechenblättrige:

A) Mathematisch
A1) Es geht zuerst um Intervalllängen. Im Standardfall unterstellen wir bei der Berechnung einer Intervalllänge als b - a, dass es um das rechts abgeschlossene und links offene Intervall von a bis b geht. Bei der Ablesung von Zählern hält man aber üblicherweise nur das Datum fest. Ich erlaube mir also der Einfacheit halber zu unterstellen, dass die Ablesung jeweils um 00:00 am angegebenen Tag erfolgt.
A2) Für jedes Ableseintervall brauchen wir dann den Schnitt (im mengenrechnerischen Sinn) mit einer Reihe von disjunkten, mit monoton geordneten Grenzen aufeinanderfolgenden vorgegebenen Intervallen, hier: den Monaten eines Jahres. Sei das AleseIntervall (a;b] und ein bestimmter Monat (A;B], für Juni des noch laufenden Jahres also z.B. A=2016-06-01 00:00:00 und B=2016-07-01 00:00:00, dann ist die erwähnte Schnittmenge wieder ein (möglicherweise leeres) links offenes und rechts abgeschlossenes Intervall, und zwar: ( MIN(B;MAX(A;a)) ; MAX(A;MIN(b;B)) ]. Das sollte sich per Fallunterscheidung nachprüfen lassen. Die Intervalllänge ergibt sich als Differenz der Schranken. Hinsichtlich der Rundung auf Ganzzahligkeit ist Vorsicht geboten. Im gegebenen Fall wird man auf einer Seite nicht wirklich 00:00 als Zeitpunkt ansetzen.

B) Rechenblattspezifisch
B1) Um “Viele” (12 oder 13) derartige Schnittintervalle in einem Zug zu ermitteln und weiterzuverwerten bietet sich eine sogenannte Matrixformel an. Zur Generierung der Monate braucht man einen Trick oder eine Hilfstabelle weil Rechenblätter keine originären Laufvariablen bieten. Außerdam kann man MIN und MAX nicht in der gewünschten Weise in Matrixformeln verwenden, weil sie als Parameter übergebene Matrizen in Listen umwandeln.
B2) Die errechneten Intervalllängen sind mit statistisch ermittelten Gewichten zu versehen. Dazu muss das Nachsehen in einer Hilfstablle, ein sogenanntes Lookup eingebaut werden.

Weitere Tips:
:: Statt MIN(u;v) kann man natürlich IF(u<=v;u;v) verwenden. Das ist “matrixfest”. U.U.bietet sich auch das Schreiben einer benutzerdefinierten Funktion an.
:: Um eine Laufvariable von 1 bis 12 vorzutäuschen kann man in einer Matrixformel z.B. COLUMN(INDIRECT(“A1:A12”)) verwenden. Ich würde zur Vermeidung fragiler und komplizierter Konstrukte lieber auf eine Hilfstabelle mit den Anfangs- und Endzeitpunkten für die Monate setzen. Die statistische Hilfstabelle braucht man ja ohnehin, und man kann sie entsprechend ergänzen.
:: Die Anwendung der statistischen Gewichte kann man wohl als Skalarprodukt interpretieren und mit SUMPRODUCT durchführen.

An Kommentaren (und Widerspruch, Verbesserungen!) bin ich interessiert.
Weil das ein interessantes Thema mit verallgemeinerbaren Lösungsansätzen ist, kann ich mir vielleicht auch die Zeit nehmen, ein komplett gelöstes Beispiel zu machen. Das stelle ich aber zurück.
Damit die Teilnehmer auch die Möglichkeit bekommen, Dateien anzuhängen, werde ich für das nötige “Karma” sorgen.