Anzahl der Monate im gleichen Jahr ermitteln
#1
Ich habe eine Formel, die die Monate zwischen zwei Datumsangaben ermittelt und jeden einzelnen Monat in die anliegenden Zellen schreibt.
Als Beispiel: 1. Datum: 01.08.2022 2. Datum: 31.l01.2024 (Anmerkung: Der Zwischenzeitraum wird immer 18 Monate betragen wegen feste Laufzeiten). Nach klicken auf Monate eintragen werden in den nächsten 18 Spalten die entsprechenden Monate eingetragen, wo ich dann in den letzten 3 Spalten die jeweilige Anzahl der Monate ausgeben möchte.
Wie kann ich nun über VBA in Spalte U,V,W die Anzahl der Monate in den jeweiligen Jahren ausgeben?
Die kurze Beispieltabelle habe ich mal als Anlage angehängt. Einen Button "Monate eintragen" ist enthalten und trägt erstmal nur die erste Zeile in der Tabelle ein.
Gruß und Danke im Voraus

Royalty


Angehängte Dateien
.xlsm   Test-Tabelle.xlsm (Größe: 18 KB / Downloads: 6)
Antworten Top
#2
(24.07.2022, 17:11)Royalty schrieb: Einen Button "Monate eintragen" ist enthalten und trägt erstmal nur die erste Zeile in der Tabelle ein.
Der Button ist ja schon mal das Wichtigste.
Dein Makro trägt aber mehr als ein Datum EIN - eigentlich sogar eins zu viel.
Wir sehen uns!
... Detlef

Meine Beiträge können Ironie oder Sarkasmus enthalten.

Antworten Top
#3
Hier Korrektur der Datei.... jetzt gehts richtig


Angehängte Dateien
.xlsm   Test-Tabelle.xlsm (Größe: 17,58 KB / Downloads: 2)
Antworten Top
#4
Hallo Royalty,

mit einer VBA-Funktion leicht möglich.
Da die Laufzeit immer 18 Monate ist, brauchst du nur das Beginndatum. (s. Mappe)

Gruß Sigi


Angehängte Dateien
.xlsm   Test-Tabelle 2.xlsm (Größe: 19,6 KB / Downloads: 6)
Antworten Top
#5
Nochmals die Datei mit geleerter Zeile

(24.07.2022, 17:48)Sigi.21 schrieb: Hallo Royalty,

mit einer VBA-Funktion leicht möglich.
Da die Laufzeit immer 18 Monate ist, brauchst du nur das Beginndatum. (s. Mappe)

Gruß Sigi

Hallo Sigi,
vielen Dank

Gruß
Royalty


Angehängte Dateien
.xlsm   Test-Tabelle1.xlsm (Größe: 18,32 KB / Downloads: 7)
Antworten Top
#6
Hallo,

falls auch eine Nicht-Makro Lösung möglich ist, mal eine Möglichkeit im Anhang. Spalte B ist nur Deko und eigentlich nicht notwendig.


Angehängte Dateien
.xlsx   Test-Tabelle.xlsx (Größe: 11,64 KB / Downloads: 6)
Cadmus
Antworten Top
#7
Hallo,

hier hast du die Datei (von Sigi überarbeitet) mit den Einträgen in den Spalten UVW.

Ist auch so aufgebaut, dass du in den Folgezeilen Einträge vornehmen kannst.
Ist das nicht erwünscht (Eingaben sollen nur in Zeile 2 vorgenommen werden) ist die Eingabe in Zelle A2 zu löschen.
 Stehen allerdings in den Zeilen darunter Eingaben, muss im Makro eine Änderung vorgenommen werden, da die letzte beschriebene Zelle in Spalte A gesucht wird (es reicht aber den Wert iZeile auf 2 zu setzen).

Gruß Rudi


Angehängte Dateien
.xlsb   Monate eintragen.xlsb (Größe: 20,37 KB / Downloads: 5)
Antworten Top
#8
Wie so oft, kommt nach dem Regelfall eine "notwendige" Ausnahme, die dann alles wieder auf Anfang setzt. So hab ich mal den Threat wieder auf unerledigt gesetzt, da nun "ein" Fall in der Praxis auftritt, der doch nicht nur auf 18 Monate ausgelegt ist.

Um zukünftigen Einzelfällen nun vorbeugen zu können, möchte ich doch tatsächlich auf Start- und Enddatum setzen. Dabei kann ich aber die Einschränkung festlegen, dass der Zeitraum "immer" und "ohne" Ausnahme zwischen 01.01.2022 und 31.12.2030 liegt, da hier ein zugrunde liegende Projekt ausläuft. 

Nun habe ich versucht, den Code von Sigi.21 nachvollziehen zu können, verstehe aber nicht ganz genau, wie dieser funktioniert und wie ich diesen ggf. umschreiben muß.

Function AnzMonateImJahr(Beginn As Date) As String
         
          Dim M As Long, J As Long, Asg As String
          Dim x1 As Long, x2 As Long, x3 As Long

          Application.Volatile
          J = Year(Beginn): M = Month(Beginn)
          x1 = 13 - M
          x3 = (M + 17) Mod 12
          If x3 = 0 Then x3 = 12
          x2 = 18 - (x1 + x3)
          If x2 = 0 Then
              Asg = CStr(J) & ": " & x1 & "/" & CStr(J + 1) & ": " & x3
          Else
              Asg = CStr(J) & ": " & x1 & " / " & CStr(J + 1) & ": " & x2 & " / " & CStr(J + 2) & ": " & x3
          End If
AnzMonateImJahr = Asg

End Function


Die ersten beiden Zeilen legen die Variablen für Jahr Monat und AsG sowie x1, x2 und x3 fest
Mit "Applicaton.Vlatile" markiert eine benutzerdefinierte Funktion als veränderlich.
J = Year(Beginn): M = Month(Beginn) nimmt das Startjahr und den Startmonat in die Funktion auf

Ab "x1 = 13 - M" hört mein Verständnis aber für den Beispielcode leider auf. Warum wird beispielsweise hier mit 13 begonnen?
Insgesamt ist der Ansatz mit der Funktion auch nicht das, was mich weiter bringt, da ich die Anzahl der Monate in bestimmte Zellen einer Zeile benötige und ich nicht als ein Text wie mit der Variable Asg.

Die Excelliste wird für eine Serienbrieffunktion benötigt, aus der die Monate in den Jahren dann in einen Brief übernommen werden.

Ich habe mal eine Beispieltabelle vorbereitet, so dass man zumindest sieht, wie ich es benötige. Code fehlt hier mal komplett, da ich nicht wirklich weiß, wie ich das umsetzen könnte, da ich viel zu wenig mit Datumsangaben in Excel gearbeitet habe.

Gruß
Roy


Angehängte Dateien
.xlsm   Beispiel-Anzahl der Monate pro Kalenderjahr.xlsm (Größe: 10,05 KB / Downloads: 6)
Antworten Top
#9
Hallo Roy,

ich sehe, du hast das Thema wieder eröffnet. Jetzt also Laufzeiten ungleich 18 Monate.

Was ist, wenn Beginn und/oder Ende während eines Monats (10.02., 25.10., etc.) liegen? Oder kommt das nicht vor?
Wie lang ist ein Monat bei dir? Ein Monat kann ja 28-31 Tage haben! Also was soll dann werden?

Gruß Sigi
Antworten Top
#10
Bisher haben wir immer 18 "volle" Monte gehabt. Jetzt kommen (wohl häufiger) aber Fälle auf, in denen die Laufzeit halt länger ist. (z.B. 01.10.2022-30.09.2024)

Der überwiegende Teil beginnt immer am 01.eines Monates - in seltenen Fällen aber auch mal in der Mitte des Monats, wobei dann aber auch in der Mitte des Montes geendet wird (Beispiel 15.08.2022 -14.02.2024)

Wir rechnen mit Monatspauschalen, so das eine tagweise Berechnung nicht nötig wäre. Ich schaue mir deshalb gerade die DATEDIFF Anweisung an, die vielleicht eine Ansatzmöglichkeit sein könnte. Muß mich da noch einlesen.

Falls das mit den Tagen wichtig ist: In einer anderen Abteilung wird 1/30 zugrunde gelegt, wenn mal etwas gekürzt werden muss, daher dann 30 Tage.

Gruß
Roy
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste