Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1524to1528
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

Schlaufe Anzahl Monate mit jeweils Monatsanfang

Schlaufe Anzahl Monate mit jeweils Monatsanfang
19.11.2016 15:28:40
Peter
Hallo zusammen
https://www.herber.de/bbs/user/109552.xlsm
Ich habe folgendes Problem:
- In B5 steht das Startdatum, immer mit dem Monatsanfang, z.B. 1.11.2016.
- In B6 wird die Anzahl der Monate eingegeben, z.B. 14 Monate.
- Das Startdatum von B5 wird in D7 angezeigt.
- Von dort ab, nach rechts, sollen in Zeile 7, ab D7 die 14 Monatsanfänge geschrieben werden. D.h. in D7 der erste Monat 1.11.2016, in E7 der 2. Monat, 1.12.2016 bis Q7 mit 1.12.2017 der letzte Monat. Es soll jeweils immer der erste Tag des Monats in die Zelle geschrieben werden (=MONATSENDE(D$7;0)+1).
Wie kann ich das automatisch mit VBA realisieren?
Danke
Viele Grüsse,
Peter

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Schlaufe Anzahl Monate mit jeweils Monatsanfang
19.11.2016 15:35:33
Hajo_Zi
Hallo Peter,

Tabelle1
 DE
7Nov 16Dez 16

verwendete Formeln
Zelle Formel Bereich N/A
D7=B5  
E7=WENN(SPALTE()-5<$B$6;EDATUM($B$5;SPALTE()-4);"")  
Excel-Inn.de
Hajo-Excel.de
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 23.07 einschl. 64 Bit



Anzeige
AW: Schlaufe Anzahl Monate mit jeweils Monatsanfang
19.11.2016 16:13:41
Peter
Hallo Hajo
Danke für Deine Hilfe, funktioniert super. Jetzt brauche ich das Ganze noch in VBA. Der Grund ist, wenn was in einer Zelle steht, dann werden via VBA die Gitternetzlinien gezeichnet und eine Formel in der Zelle wird vom VBA-Code als Zellinhalt gesehen. D.h. die Zelle mit der Formel erhält die Formatierung, obwohl nichts drin steht.
Hast Du eine Idee, wie ich diese Formel in VBA schreiben kann?
Danke
Viele Grüsse,
Peter
VBA
19.11.2016 16:31:52
Michael
Hi,
Sub datum()
Dim d As Date, i&
d = Range("d7").Value
For i = 2 To Range("B6"): Cells(7, i + 3).Value = DateAdd("m", i - 1, d): Next
End Sub
Gruß
Michael
Anzeige
AW: VBA
19.11.2016 16:58:23
Peter
Hallo Michael
Danke für Deine Antwort, es gibt noch das Problem, dass das Startdatum B5 nicht gefunden wird. Das erste Datum ist der 31.01.1900, anstatt der 1.11.2016, was muss ich korrigieren?
Danke
Viele Grüsse,
Peter
AW: VBA
19.11.2016 17:15:08
Peter
Hallo Michael
Dein Code stimmt schon, Du nimmst das Startdatum von D7 und nicht von B5 (wie ich es geschrieben habe). Ich verstehe den Code noch nicht ganz, kannst Du mir bitte den Code kommentieren, so dass ich verstehe und weiss, wie ich diesen auf Startdatum B5 anpassen kann?
Danke Dir.
Viele Grüsse,
Peter
AW: Ohne Schlaufe mit jeweils Monatsanfang
19.11.2016 21:52:52
Gerd
Hallo Peter!
Sub test()
Range("D7") = CDate(Range("B5"))
Range("D7").Resize(1, Range("B6").Value).DataSeries Type:=xlChronological, Date:=xlMonth
End Sub
Gruß Gerd
Anzeige
AW: Abschl. Frage, wie vorherige Daten löschen?
20.11.2016 10:02:32
Peter
Hallo Gerd
Läuft super, danke Dir!
Noch eine abschließende Frage, wenn ich eine neue, längere Dauer eingebe, z.B. von 14 Mt auf 20 Mt, dann wird alles überschrieben und die zusätzlichen Monate hinzugefügt.
Wenn jedoch die Dauer kürzer ist, z.B. von 14 Mt auf 5 Mt, dann werden die neuen 5 Mt überschrieben, jedoch die alten 9 Mt bleiben bestehen.
Wie kann der Code angepasst werden, damit alle vorherigen Daten in Zeile 7, nach der Eingabe der Dauer gelöscht werden?
Danke.
Viele Grüsse,
Peter
AW: Vorherige Daten vorher löschen!
20.11.2016 10:51:55
Gerd
Hallo Peter,
ungetestet.
Sub test2()
With Range("D7")
Range(.Cells, Cells(7, Application.Max(7, Cells(7, Columns.Count).End(xlToLeft).Column))). _
ClearContents
.Value = CDate(Range("B5"))
.Resize(1, Range("B6").Value).DataSeries Type:=xlChronological, Date:=xlMonth
End With
End Sub
Gruß Gerd
Anzeige
AW: Vorherige Daten vorher löschen!
20.11.2016 11:24:11
Peter
Hallo Gerd
Funktioniert bestens, vielen Dank.
Wünsche Dir ein schönes Wochenende.
Gruss,
Peter
@Gerd L: bissl Senf noch
20.11.2016 17:38:23
Michael
Hi,
auf .DataSeries wäre ich nie gekommen: vielen Dank für die Erweiterung meines "Werkzeugkastens"!
Ein kleines Mecker hab ich aber: an der ersten Anweisung habe ich etwas geknabbert, bis ich begriffen habe, wo der Hund begraben liegt, und zwar gibt
MsgBox Application.Max(7, Cells(7, Columns.Count).End(xlToLeft).Column)
immer mindestens 7 aus, was in der Praxis belanglos ist, aber theoretisch "vertippt": bei .Max(7 ist die Zeilen- anstelle der Spaltennummer reingerutscht.
Eine Variante:
.Resize(, Cells(7, Columns.Count).End(xlToLeft).Column).ClearContents
Die löscht zwar auch immer "zu viel", schreibt sich aber schöner.
Danke nochmal & Grüße,
Michael
Anzeige
AW: @Gerd L: bissl Senf noch
20.11.2016 17:57:37
Gerd
Hallo Michael,
da hast du natürlich Recht. 7 ist die Zeile, 4 die Spalte von $D$7.
With Range("D7")
Range(.Cells, Cells(7, Application.Max(4, Cells(7, Columns.Count).End(xlToLeft).Column))). _
ClearContents
'.................
'.................
End With
Bei deinem "Resize" müsste man, so auf die Schnelle betrachtet, ein paar Spalten abziehen.
Gruß Gerd
AW: @Gerd L: bissl Senf noch
20.11.2016 18:23:45
Michael
Hallo Gerd,
im Prinzip ja: auch auf die Schnelle: die 3, die links von D liegen.
Aber egal: es gibt ja so oder so rechts vom zuletzt eingetragenen Datum keine Daten bzw. wenn, dann werden sie weggebügelt (mit jedem unserer Ansätze)...
Wenn man es ganz genau nimmt, bräuchte man ja auch erst ab .Offset(,range(b6)) löschen.
Aber was soll's - lassen wir lieber das Wochenende ausklingen.
Schönen Abend noch,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige