4.4k Aufrufe
Gefragt in Tabellenkalkulation von
Tabelle6
In Zelle A1 habe ich das Startdatum 'Eingabe z.B. 1.2.15

Spalte A SpalteB
Text Tag Datum

Wert ab Zeile 5 bis 35


Nun möchte ich nach ändern des Startdatums nach Sonntag eine Leerzeie eingefügt wird und die Kalenderwocheder Vorwoche ausgegeben wird. Wenn ich dann das Startdatum ändere, müssen die Leerzeilen entsprechend neu definiert werden.
So 1.2.15
KW 6
Mo 2.2.15
Di 3.2.15
Mi 4.2.15
Do 5.2.15
Fr 6.2.15
Sa 7.2.15
So 8.2.15
KW 7
Mo 9.2.15
Di 10.2.15
Mi 11.2.15
Do 12.2.15
Fr 13.2.15
Sa 14.2.15
So 15.2.15
KW 8
Mo 16.2.15
Di 17.2.15
Mi 18.2.15
Do 19.2.15
Fr 20.2.15
Sa 21.2.15
So 22.2.15
KW 9
Mo 23.2.15
Di 24.2.15
Mi 25.2.15
Do 26.2.15
Fr 27.2.15
Sa 28.2.15
KW 10

18 Antworten

0 Punkte
Beantwortet von paul1 Experte (4.9k Punkte)
Hallo,

ich glaube mit an Sicherheit grenzender Wahrscheinlichkeit, dass das so nicht umsetzbar ist, allerdings nur ich.

Gruß
Paul1
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

... ich auch.

Zumindest die KW sollte in einer separaten Spalte stehen!

Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ein Ansatz ?

gruss nighty

Sub MachMalMeinenKalender()
Dim EndeD As Date
Dim EndeT As Integer
Range("A2:B366").Clear
Cells(2, 1).FormulaR1C1 = "=R1C1"
Cells(2, 2).FormulaR1C1 = "=R1C1"
EndeD = "31.12." & Year(Cells(1, 1))
EndeT = EndeD - Cells(1, 1) + 2
Range(Cells(3, 1), Cells(EndeT, 2)).FormulaR1C1 = "=R[-1]C+1"
Range(Cells(2, 1), Cells(EndeT, 1)).NumberFormat = "dddd"
Range(Cells(2, 2), Cells(EndeT, 2)).NumberFormat = "dd/mm/yyyy"
Range(Cells(2, 3), Cells(EndeT, 3)).FormulaR1C1 = "=EKalenderWoche(RC[-1])"
End Sub

Function EKalenderWoche(Edatum As Date) As Integer
EKalenderWoche = (Edatum - DateSerial(Year(Edatum + (8 - Weekday(d)) Mod 7 - 3), 1, 1) - 3 + (Weekday(DateSerial(Year(Edatum + (8 - Weekday(d)) Mod 7 - 3), 1, 1)) + 1) Mod 7) \ 7 + 1
End Function
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

den makronamen hatte ich wohl verkorkst

gruss nighty
0 Punkte
Beantwortet von
Vielleicht war meine Aufgabenstellung nicht so deutlich..

Also in der Zelle ($B$1) trage ich den ersten gewünschten Tag eine Monats ein


Ab Spalte A5 bis B35 zeigt er mir nur die Tages des gewünschten Monats ein.

Mein erster Wunsch ist es, das automatisch nach jedem Sonntag eine Leerzeile eingefügt wird.

Ändere ich nun den gewünschten Monat, so soll Excel die vorhandenen Leerzeilen herausnehmen und
entsprechend dem geänderten Monat hinter jedem Sonntag neu einfügen.

Mein zweiter Wunsch ist es nun, das er über der Leerzeile Sonntag aus dem Datumswert die KW ermittelt und in die darunterliegende
Leerzeile anzeigt.

Spalte A = Tag ( Formel =TEXT(B5;"ttt) bis Zeile 35
Spalte B = Datum (Formel Zeile 5: = B1)
Spalte B= Datum (Formel Zeile 6 bis35: = =WENNFEHLER(WENN(MONAT($B$5)=MONAT(B5+1);B5+1;"");"")

Für Eure Hilfe bedanke ich mich schon einmal (auch für Teillösungen) :-)
0 Punkte
Beantwortet von
Vielleicht war meine Aufgabenstellung nicht so deutlich..

Also in der Zelle ($B$1) trage ich den ersten gewünschten Tag eine Monats ein


Ab Spalte A5 bis B35 zeigt er mir nur die Tages des gewünschten Monats ein.

Mein erster Wunsch ist es, das automatisch nach jedem Sonntag eine Leerzeile eingefügt wird.

Ändere ich nun den gewünschten Monat, so soll Excel die vorhandenen Leerzeilen herausnehmen und
entsprechend dem geänderten Monat hinter jedem Sonntag neu einfügen.

Mein zweiter Wunsch ist es nun, das er über der Leerzeile Sonntag aus dem Datumswert die KW ermittelt und in die darunterliegende
Leerzeile anzeigt.

Spalte A = Tag ( Formel =TEXT(B5;"ttt) bis Zeile 35
Spalte B = Datum (Formel Zeile 5: = B1)
Spalte B= Datum (Formel Zeile 6 bis35: = WENNFEHLER(WENN(MONAT($B$5)=MONAT(B5+1);B5+1;"");"")

Für Eure Hilfe bedanke ich mich schon einmal (auch für Teillösungen) :-)
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Hallo,

anbei ein Vorschlag wie ich es lösen würde.

Gruß
Rainer
0 Punkte
Beantwortet von rainberg Profi (14.9k Punkte)
Nachtrag:

falls du die Spalte C bereits für andere Daten geplant hast, kannst du es auch so machen.

Gruß
Rainer
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

probier mal :-)

gruss nighty

noch optimierungsbeduerftig !

B1=Datum

Sub Kalender1()
Range("A5:B45").Clear
Dim intWochenTage As Integer
Cells(5, 1).Value = DateSerial(Year(Cells(1, 2)), Month(Cells(1, 2)), Day(Cells(1, 2)))
Cells(5, 1).AutoFill Range("A5:A45")
Range("A5:A36").NumberFormat = "dd.mm.yyyy"
intWochenTage = 5
Do
If Month(Cells(1, 2)) = Month(Cells(intWochenTage, 1)) Then
Cells(intWochenTage, 2) = WeekdayName(Weekday(Cells(intWochenTage, 1) - 1))
Else
Cells(intWochenTage, 1).Clear
Cells(intWochenTage, 2).Clear
End If
intWochenTage = intWochenTage + 1
Loop While intWochenTage < 45
intWochenTage = 5
Rows(intWochenTage & ":" & intWochenTage).Insert Shift:=xlDown
Cells(intWochenTage, 1) = EKalenderWoche(Cells(intWochenTage + 1, 1))
Range("A" & intWochenTage).NumberFormat = "KW " & "##"
intWochenTage = intWochenTage + 2
Do
If Cells(intWochenTage, 2) = "Montag" Then
Rows(intWochenTage & ":" & intWochenTage).Insert Shift:=xlDown
Range("A" & intWochenTage).NumberFormat = "KW " & "##"
Cells(intWochenTage, 1) = EKalenderWoche(Cells(intWochenTage + 1, 1))
intWochenTage = intWochenTage + 2
End If
intWochenTage = intWochenTage + 1
Loop While intWochenTage < 45
End Sub

Function EKalenderWoche(Edatum As Date) As Integer
EKalenderWoche = (Edatum - DateSerial(Year(Edatum + (8 - Weekday(d)) Mod 7 - 3), 1, 1) - 3 + (Weekday(DateSerial(Year(Edatum + (8 - Weekday(d)) Mod 7 - 3), 1, 1)) + 1) Mod 7) \ 7 + 1
End Function
0 Punkte
Beantwortet von
Der Lösungsvorschlag von Nighty kommt meiner Lösung schon verdamm nahe.

Aber :-)

Jetzt habe ich das Problem, dass wenn ich das Datum in Zelle "B1" ändere, sich
die Tage des gewünschten Monats nicht mehr automatisch verändern.

Wer kann mir nochmal unter die Arme greifen, heute schwitze ich auch nicht ...


Digitales Embrio grüßt alle Helfer - nochmals vielen Dank.

Wenn ich die Lösung habe - einfach bei Interesse Posten - sende ich Euch, wenn fertig zu.
...