Anzeige
Archiv - Navigation
1888to1892
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
Inhaltsverzeichnis

Perioden ausrechnen (Datum)

Perioden ausrechnen (Datum)
04.07.2022 13:26:57
Tom
Ich habe eine Datei wo in einem Feld eine oder "mehrere" Perioden innerhalb eines Monates drinnen stehen:
z.B.:
Feld A1:
9.3.22-12.3.22;17.3.22-21.3.22
Jetzt sollen mir im Feld A2 die Tage zwischen den Perioden summiert angegeben werden:
Feld A2:
5
weil
zwischen 9.3.22-12.3.22 - 2 Tage
zwischen 17.3.22-21.3.22 - 3 Tage
wie lässt sich das möglichst einfach umsetzen - vielleicht sogar ohne VBA?
Recht herzlichen Dank für eure Hilfe!
Tom

33
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
mach die Daten erst mal vergleichbar / findbar
04.07.2022 13:39:51
WF
mit LINKS / RECHTS / TEIL nullo problemo
aber statt
9.3.22
steht da
17.12.22
statt 6 Zeichen sind das 8 und das wird ein Problem.
also: 09.03.22
WF
AW: mach die Daten erst mal vergleichbar / findbar
04.07.2022 13:52:39
Tom
Das Format achtstellig anzugeben, stellt kein Problem dar - du kannst also von einheitlichen Daten mit 8 Stellen ausgehen.
dann ist es pille-palle
04.07.2022 14:07:34
WF
=TEIL(A1;10;8)-LINKS(A1;8)+RECHTS(A1;8)-TEIL(A1;19;8)
WF
AW: mach die Daten erst mal vergleichbar / findbar
04.07.2022 14:14:45
UweD

=TEIL(A1;10;8)-LINKS(A1;8)-1+RECHTS(A1;8)-TEIL(A1;19;8)-1
LG UweD
so ein Quatsch
04.07.2022 14:35:59
WF
vom 17.03.22 bis 18.03.22 sind es bei Dir also null Tage.
Halleluja
AW: so ein Quatsch
04.07.2022 14:39:48
UweD
er wollte die Tage dazwischen (für welchen Zweck auch immer)
da sein Beispiele 5 ergeben sollte ist das die Formel dafür.
Anzeige
tschuldigung: da hast Du Recht
04.07.2022 14:56:56
WF
dazwischen ist nicht von-bis.
AW: so ein Quatsch
05.07.2022 08:46:04
Tom
Hallo,
zur Aufklärung: diese Perioden entsprechen den Abwesenheitstagen von Bewohnern eines Heimes (in der Regeln Krankenhausaufenthalte) - uns werden alle Tage abgezogen - außer der Eintritts oder der Austrittstag (hier fallen ja Aufwände in unserem Haus an). Die Tage die also in der Formel berechnet werden, sind jene Tage für die wir keine Bezahlung bekommen.
Im obigen Beispiel wären also tatsächlich 0.
17.03.22 bis 18.03.22 - da wir ja den Eintritts und Austrittstag bezahlt bekommen, sind es 0 Tage die nicht bezahlt werden.
Vielleicht hilft das um zu verstehen wozu ich das brauche.
Lieben Gruß
Tom
Anzeige
AW: Perioden ausrechnen (Datum)
04.07.2022 14:49:30
Daniel
Hi
am einfachsten wahrscheinlich mit der Uralt-Version von VBA, nämlich Excel4-Makros.
1. markiere die Zelle B1
2. lege jetzt einen Namen, z.B. AnzahlTage mit dieser Formel bei "bezieht sich auf"

=AUSWERTEN("-"""&WECHSELN(WECHSELN(!A1;"-";"""-1+""");";";"""-""")&"""")
3. Schreibe in die Zelle B1 die Formel =AnzahlTage.
die Funktion AUSWERTEN berechnet einen Text, der wie eine Formel aussieht als solche.
diese kann in den aktuellen Excelversionen innerhalb von NAMEN verwendet werden, aber nicht als reguläre Funktion.
Obs da inzwischen in Excel 365 eine Änderung gab weiß ich nicht, falls ja würde des ja das Vorgehen vereinfachen, wenn hier eine reguläre Funktion nutzbar wäre.
Im Prinzip muss man dann nur noch den Text so umbauen, dass er wie eine berechenbare Formel aussieht, Excel kann für einfache Rechenoperationen einen Text, der wie ein Datum aussieht, innerhalb der Formel in ein solches wandeln, dann muss man nur doch die richtigen Rechen- und Vorzeichen einsetzen, dh alle BIS-Termine müssen addiert und alle AB-Termine müssen subtrahiert werden.
das macht das zweifache WECHSELN.
Gruß Daniel
Anzeige
AW: Du schreibst von "auch mehreren" Perioden ...
04.07.2022 14:51:09
"auch
Hallo Tom,
... grundsätzlich würde ich Dir deshalb zu einer anderen Datenerfassung (je Datum eine Spalte) raten oder einer anderen Lösungsart
Denn die bisher aufgezeigten Formel berücksichtigen momentan genau zwei Perioden und dies auch nur, wenn die Datumswerte exakt immer mit 8 Zeichen angegeben werden.
Gruß Werner
.. , - ...
AW: Du schreibst von "auch mehreren" Perioden ...
05.07.2022 08:48:41
"auch
Ich verstehe deinen Ansatz natürlich, aber am Originalformat darf ich leider keine Änderunen vornehmen - das ist mir vorgegeben. Bei einer ordentlichen Datenstruktur wäre es denkbar einfach, soweit ist es mir klar!
Liebe Grüße und großen Dank
Tom
Anzeige
AW: Perioden ausrechnen (Datum)
04.07.2022 16:05:12
Daniel
Hi
so jetzt nochmal eine reine Excelformellösung
ich teil das mal über mehrere Spalten auf, damit das Formelwerk übersichtlich bleibt.
Man kann aber auf die zusätzlichen Spalten verzichten, wenn man die Formeln aus den Hilfsspalten in die Hauptformel einsetzt.
Bei Excel 365 auch gerne mit Hilfe von LET, da einige Berechnungen mehrfach verwendet werden. Da ich kein 365 habe, hier das Formelwerk wie es ab Excel 2013 funktionieren würde:
A1: die Perioden, so wie angegeben. Anzahl beliebig.
B1: Anzahl der einzelnen Datumswerte berechnen:

=(Länge(A1)-Länge(Wechseln(A1;"-";""))*2
C1: Text aus A1 so umbauen, dass er mit XMLFORMAT gesplittet werden kann:

=""&WECHSELN(WECHSELN(A1;"-";";");";";"")&""
D1: Summe der AB-Datumswerte

=SUMMENPRODUKT(XMLFILTERN(B4;"//x/y")*ISTUNGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;B1;1))))
E1: Summe der BIS-Datumswerte

=SUMMENPRODUKT(XMLFILTERN(B4;"//x/y")*ISTGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;B1;1))))
F1: Summe der Differenzen:

=E1-F1-B1/2
wie gesagt, das lässt sich auch zu einer einzigen Formel zusammenfassen, aber das überlasse ich jedem selbst als Fleißaufgabe.
in Excel 365 lässt sich das mit LET und SEQUENZ noch sicherlich vereinfachen.
Sollte es das AUSWERTEN aus den Excel4Makros wieder in die normalen Excelfunktionen schaffen, kann man natürlich auch die von mir zuerst gezeigte Methode verwenden.
als VBA würde das ganze natürlich ganz einfach gehen, hier der Code für die entsprechende Funktion, die dann verwendet werden kann:
dh folgender Code in einem allgemeinen Modul

Function AnzahlTage(Perioden As String, Optional AngebrocheneTageZählen As Long = 0)
Dim arrDatum
Dim i As Long
Perioden = Replace(Perioden, "-", ";")
arrDatum = Split(Perioden, ";")
For i = 1 To UBound(arrDatum) Step 2
AnzahlTage = AnzahlTage + CDate(arrDatum(i)) - CDate(arrDatum(i - 1)) + AngebrocheneTageZählen
Next
End Function
und dann in A2

=AnzahlTage(A1;-1)
der zweite Parameter gibt hier an, wie mit den angebrochenen Tagen umgegangen werden soll (ab- und bis-Tag)
# -1 beide werden nicht mitgezählt (so wie her gewünscht), dh 1.1 bis 2.1 = 0
# 0 ein ein Tag wird gezählt (also die Übernachtungen), so wie bei normaler Differenzbildung, dh 1.1 bis 2.1 = 1
# +1 beide werden voll mitgezählt, dh 1.1 bis 2.1 = 2
Gruß Daniel
Anzeige
sorry, formeln nochmal korrigiert:
04.07.2022 16:20:34
Daniel
A1: die Perioden, so wie angegeben. Anzahl beliebig.
B1: Anzahl der einzelnen Datumswerte berechnen:

=(Länge(A1)-Länge(Wechseln(A1;"-";""))*2
C1: Text aus A1 so umbauen, dass er mit XMLFORMAT gesplittet werden kann:

="&LTx&GT&LTy&GT"&WECHSELN(WECHSELN(A1;"-";";");";";"&LT/y&GT&LTy&GT")&"&LT/y&GT&LT/x&GT"
D1: Summe der AB-Datumswerte

=SUMMENPRODUKT(XMLFILTERN(C1;"//x/y")*ISTUNGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;B1;1))))
E1: Summe der BIS-Datumswerte

=SUMMENPRODUKT(XMLFILTERN(C1;"//x/y")*ISTGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;B1;1))))
F1: Summe der Differenzen:

=E1-D1-B1/2
Gruß Daniel
Anzeige
AW: sorry, formeln nochmal korrigiert:
04.07.2022 16:54:02
Daniel
und hier nochmal die finale Gesamtformel für A2 oder B1:

=SUMMENPRODUKT(XMLFILTERN(""&WECHSELN(WECHSELN(A1;"-";";");";";"")&"";"//x/y")*ISTGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))*2;1))))
-SUMMENPRODUKT(XMLFILTERN(""&WECHSELN(WECHSELN(A1;"-";";");";";"")&"";"//x/y")*ISTUNGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))*2;1))))
-(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))
wie gesagt, mit Excel 365 und LET noch einkürzbar.
vorteil dieser Formelvariante:
- sie funktioniert mit beliebig vielen Periodenangaben in der Zelle (zumindest, solange nicht andere Grenzen überschritten werden)
- man kann das Datum in jeder Form angeben, die Excel als Datum erkennt, dh mit oder ohne führende 0; Monat als Zahl, 3-Zeichenkürzel oder ausgeschrieben, Jahr 2 oder 4-stellig, oder auch ganz fehlend (aktuelles jahr)
Gruß Daniel
Anzeige
Gesamtformel nochmal gekürzt
04.07.2022 22:24:00
Daniel
So hier die Formel nochmal etwas optimiert, hier jetzt für die Variante Ergebnis 7, dh einen der Start- und Endtage mitzählen, aber das zu korrigieren ist ja kein problem

=SUMMENPRODUKT(XMLFILTERN(""&WECHSELN(WECHSELN(A1;"-";";");";";"")&"";"//x/y") *(2*ISTGERADE(ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))*2;1)))-1)) 
für Excel 365 könnte man noch das

ZEILE(BEREICH.VERSCHIEBEN(A1;0;0;(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))*2;1))
durch

Sequenz((LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))*2) 
verkürzen.
Gruß Daniel
Anzeige
AW: Gesamtformel nochmal gekürzt
05.07.2022 08:36:20
Tom
Hallo,
vielen, vielen Dank für eure raschen Reaktionen und offensichtlich tollen Ansätzen. Leider erhalte ich immer nur #Wert als Ergebnis - woran kann das liegen?
Leider kann ich die Formel nicht nachvollziehen - werde sie mir aber zu einem späteren Zeitpunkt im Detail verifizieren.
Vielleicht habt ihr ja einen Tipp, vielleicht habe ich ein falsches Zahlenformat oder muss irgendwelche Tools aktivieren?
Vielen Dank und liebe Grüße - echt coole und rasche Hilfe!!!!
Tom
AW: Gesamtformel nochmal gekürzt
05.07.2022 09:58:30
Tom
Hallo Daniel,
leider checke ich meinen Fehler nicht, aber ich erhalte immer einen #Wert Fehler
https://www.herber.de/bbs/user/153994.xlsx
Hast du noch einen Tipp?
Vielen Dank schon jetzt!
Gruß Tom
AW: Gesamtformel nochmal gekürzt
05.07.2022 09:58:38
Daniel
Hi
Um zu sehen was du falsch gemacht hast, müsstest du uns schon zeigen, was du gemacht hast, also die Datei hochladen.
Prinzipiell sollte meine Formel mit dem XMLFiltern ab Excel 2013 funktionieren.
Die Formel funktioniert eigentlich ganz einfach:
Zuerst wird der Text mit dem XMLFilter in ein Array aufgeteilt, das ist dann so, als würde jeder Datumswert in einer eigenen Zelle stehen. Dann erstelle ich ein zweites Array das genauso groß ist und abwechselnd die Zahlen -1 und 1 enthält.
Dann multiplizieren ich beide Arrays miteinander und bilde die Summe, die Ab-Datumswerte stehen dann als negativer Wert da, deswegen gibts die Differenz.
Also im Prinzip so: die Datumswerte werden nach A1:A4 geschrieben und in B1:B4 abwechselnd -1 und 1. dann wird zeilenweise multipliziert (A1 mit B1, A2 mi B2 usw) und dann das ganze summiert.
Nur passiert das Formelintern und nicht in Zellen.
Leider benötigt das XMLFiltern als Trennzeichen die XML-Tags, was das ganze etwas unübersichtlich macht, aber leider hat Excel noch keine andere Funktion, um einen Text in einer Formel an Trennzeichen zu teilen.
Du siehst ja an der VBA-Variante, wie einfach das mit der Funktion SPLIT geht, nur gibt es die so nicht in Excel.
Gruß Daniel
AW: Gesamtformel nochmal gekürzt
05.07.2022 11:08:57
Daniel
Sorry da hab ich vergessen, dass die herber-Forensoftware mit den Zeichen &Lt und &GT ein Problem hat.
Bei diesem Wechseln

=""&WECHSELN(WECHSELN(A1;"-";";");";";"")&""
Musst du anstelle der "" folgendes ergänzen

="&ltx&GT&lty&gt"&WECHSELN(WECHSELN(A1;"-";";");";";"&lt/y&GT&lty&gt")&"&lt/y&gt&lt/x&gt"
Gruß Daniel
AW: Gesamtformel nochmal gekürzt
05.07.2022 11:49:22
Tom
Hallo Daniel!
Ich freue wirklich sehr - das hätte ich ohne deine Unterstützung nicht so schnell hingebracht. Vielen Dank nochmals - es klappt jetzt super!
Tom
AW: Gesamtformel nochmal gekürzt
05.07.2022 12:04:21
Tom
Hallo Daniel,
jetzt brauch ich doch noch einen Hinweis:
Kopiere ich jetzt den gleichen Periodenwert von Zelle A1 nach A2 und berechne mit deiner Formel das Ergebnis der 2. Zeile, dann erhalte ich (für die gleichen Periodenpaare) ein falsches Ergebnis.
Da ich leider die Formel erst zu 75% geknissen habe, bitte ich um einen kleinen Hinweis.
https://www.herber.de/bbs/user/153999.xlsx
Danke!
Thomas
AW: Gesamtformel nochmal gekürzt
05.07.2022 12:14:26
Daniel
Hi
Im Bereich.Verschieben muss der Zellbezug auf Zeile fixiert werden, der muss immer auf A1 bleiben, egal wo die Formel steht.
Nimm mal statt Zeile(Bereich.Verschieben;A1;0;0;AnzahlDatumswerte;1))
Das hier: Zeile(Indirekt("A1:A"&AnzahlDatumswerte))
Gruß Daniel
AW: Gesamtformel nochmal gekürzt
05.07.2022 12:47:43
Tom
Hallo Daniel,
dein Terminus sieht so aus:
(ZEILE(BEREICH.VERSCHIEBEN(A$1;0;0;(LÄNGE(A$1)-LÄNGE(WECHSELN(A$1;"-";"")))*2;1))))
was davon soll ich mit
Zeile(Indirekt("A1:A"&AnzahlDatumswerte))
ersetzen?
Die andere Lösung mit Zeile fixieren klappt schon mal.
Danke
AW: Gesamtformel nochmal gekürzt
05.07.2022 12:49:27
Daniel
Noch besser ist, du erzeugt die Zahlenfolge 1-AnzahlDatumswerte nicht über Zeile(Zellbereich) sondern mit Sequenz (AnzahlDatumswert).
Gruß Daniel
AW: Gesamtformel nochmal gekürzt
05.07.2022 12:58:32
Tom
Da bin ich jetzt leider ausgestiegen - das check ich jetzt nicht mehr.
AW: Gesamtformel nochmal gekürzt
05.07.2022 13:54:03
Daniel
HI
Zeile(A1:A4) erzeugt {1;2;3;4}
Sequenz(4) erzeugt ebenfalls {1;2;3;4}
Gruß Daniel
jetzt aber die Formeln richtig
05.07.2022 13:29:48
Daniel
so jetzt nochmal die Formeln vollständig
a) für Excel 2013

=SUMMENPRODUKT(XMLFILTERN("&LTx&GT&LTy&GT"&WECHSELN(WECHSELN(A1;"-";";");";";"&LT/y&GT&LTy&GT") &"&LT/y&GT&LT/x&GT";"//x/y")*(2*ISTGERADE(ZEILE(INDIREKT("A1:A"&(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")) )*2)))-1))-(LÄNGE(A2)-LÄNGE(WECHSELN(A1;"-";""))) 
für Excel 365 und alle die über die Funktion SEQUENZ verfügen.

=SUMMENPRODUKT(XMLFILTERN("&LTx&GT&LTy&GT"&WECHSELN(WECHSELN(A1;"-";";");";";"&LT/y&GT&LTy&GT") &"&LT/y&GT&LT/x&GT";"//x/y")*(2*ISTGERADE(Sequenz((LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";"")))*2))-1)) -(LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";""))) 
für Excel 365 BETA gibt es wohl das TextTrennen, was das XMLFILTERN ersetzt, dashier

XMLFILTERN("&LTx&GT&LTy&GT"&WECHSELN(WECHSELN(A1;"-";";");";";"&LT/y&GT&LTy&GT")&"&LT/y&GT&LT/x&GT";"//x/y")
wird dann zuu

TEXTTRENNEN(WECHSELN(A1;"-";";");";")
für EXCEL 365 -BETA müsste die Formel dann so aussehen, da man die Berechnung der Anzahl braucht, kann man noch LET verwenden.

=LET(anz;LÄNGE(A1)-LÄNGE(WECHSELN(A1;"-";""));SUMMENPRODUKT(TEXTTRENNEN(WECHSELN(A2;"-";";");";") *(2*ISTGERADE(SEQUENZ(anz*2))-1)) -anz
alles was für Excel 365 ist, habe ich nicht getestet, da ich nur Excel2016 habe
Gruß Daniel
AW: jetzt aber die Formeln richtig
05.07.2022 14:50:47
Tom
Danke Dir. Es klappt prima!
Tom
AW: Gesamtformel nochmal gekürzt
05.07.2022 08:50:40
Tom
Das mit den Anfangs- und Endtag ist natürlich kein Problem, man muss ja nur am Ende 2 Tage abziehen.
AW: Perioden ausrechnen (Datum)
05.07.2022 09:10:41
Tom
Hallo,
in deiner obigen Erklärung sprichst du in Zelle D1 und E1 jeweils das Feld B4 an - was steht da drinnen?
In F1 ergibt sich dann aus obiger Sicht ein Zirkelbezug - hast du dich da vertan?
Was genau macht //x/y ?
Liebe Grüße
Tom
AW: Perioden ausrechnen (Datum)
05.07.2022 09:40:21
Daniel
Sorry, Fehler von mir, ich hab das un verschiedenen Zeilen zusammengebaut und dann vergessen anzupassen, muss natürlich alles in einer Zeile stehen.
Nimm die korrigierte oder besser die Gekürzte Variante.
Gruß Daniel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige