Search Results for: formatierung kalender 2010 excel
excel: kalender mit bedingten formatierungen (in vba)
vor langer zeit hab ich schonmal einmal einen kalender mit bedingten formatierungen in excel gebastelt. jetzt habe ich das mal mit vba gemacht… that’s it (eine von 100000 moeglichkeiten in quick & dirty):
Option Explicit
Sub Kalender()
'Variablen deklarieren
Dim MyStartDate As Date
Dim MyEndDate As Date
Dim MyTempDate As Date
Dim OffsetX As Integer
Dim OffsetY As Integer
Dim BGWE As Integer
Dim BGKW1 As Integer
Dim BGKW2 As Integer
Dim MyTempKW As Integer
Dim Zähler As Integer
Dim MyWorksheet As String
Dim KWBackgrund As Integer
Dim MyHeadLine As Variant
Dim i As Integer
'Start- und Endedatum setzen; möglich mit verschiedenen Schreibweisen
MyStartDate = "01. Mai 2012"
MyEndDate = "31.01.2014"
'Tabellenblatt für den Kalender
MyWorksheet = "Tabelle1"
'in welcher Zeile soll der Kalender beginnen?
OffsetY = 1
'in welcher Spalte soll der Kalender beginnen?
OffsetX = 1
'Hintergrundfarbe für Wochenende
BGWE = 15
'Hintergrundfarbe für KW im Wechsel
BGKW1 = 0
BGKW2 = 16
'Überschriften
MyHeadLine = Array("Datum", "Tag", "KW")
'Inhalt aller Zeilen löschen
Rows("1:65536").ClearContents
'Alle Formatierungen löschen
Cells.ClearFormats
'Überschriften
For i = 0 To UBound(MyHeadLine)
Worksheets(MyWorksheet).Cells(OffsetY, OffsetX + i).Value = MyHeadLine(i)
Worksheets(MyWorksheet).Cells(OffsetY, OffsetX + i).Font.FontStyle = "Fett"
Next
'Kalender ausgeben
For Zähler = 0 To DateDiff("d", MyStartDate, MyEndDate)
MyTempDate = DateAdd("d", Zähler, MyStartDate)
'Wochenende grau Markieren
If Format(MyTempDate, "DDD") = "Sa" Or Format(MyTempDate, "DDD") = "So" Then
Worksheets(MyWorksheet).Cells(1 + Zähler + OffsetY, OffsetX + 1).Interior.ColorIndex = BGWE
End If
'Farbwechsel für die KW
KWBackgrund = IIf(kw_nach_din(MyTempDate) And 1, BGKW1, BGKW2)
Worksheets(MyWorksheet).Cells(1 + Zähler + OffsetY, OffsetX + 2).Interior.ColorIndex = KWBackgrund
'aktuellen Tag rot Markieren
If MyTempDate = Date Then
Worksheets(MyWorksheet).Range(Cells(1 + Zähler + OffsetY, OffsetX), Cells(1 + Zähler + OffsetY, OffsetX + 2)).Interior.Color = vbRed
End If
'erste Spalte mit Datum
Worksheets(MyWorksheet).Cells(1 + Zähler + OffsetY, OffsetX).Value = MyTempDate
'zweite Spalte mit Wochentag
Worksheets(MyWorksheet).Cells(1 + Zähler + OffsetY, OffsetX + 1).Value = Format(MyTempDate, "DDD")
'dritte Spalte mir KW (aber nur am ersten Tag der KW ausgeben)
If MyTempKW <> kw_nach_din(MyTempDate) Then
Worksheets(MyWorksheet).Cells(1 + Zähler + OffsetY, OffsetX + 2).Value = kw_nach_din(MyTempDate)
MyTempKW = kw_nach_din(MyTempDate)
End If
Next Zähler
End Sub
Function kw_nach_din(datum As Date) As Byte
Dim kw As Date
kw = 4 + datum - Weekday(datum, 2)
kw_nach_din = (kw - DateSerial(Year(kw), 1, -6)) \ 7
End Function
das ergebnis ist vergleichbar mit dem von damals:
excel – kalender mit bedingten formatierungen
mehr als notiz fuer mich gedacht, aber vielleicht interessierts ja jemanden. ich war genoetigt, quasi was kalenderaehnliches in excel zu machen.
damit das endergebnis halbwegs passabel aussieht und man nicht immer alles wie wild manuell formatieren muss, hab ich mir mal rausgeguckt, was man machen muss, damit das ergebnis so aussieht, wie in dem nebenstehenden bild.
drei spalten mit datum, wochentag und kalenderwoche. der aktuelle tag ist immer automatisch rot markiert, das datum wechselt monatlich die hintergrundfarbe, genauso wie die kalenderwochen. die wochenenden (samstag und sonntag) sind auch farbig vom rest der woche abgehoben und der optik wegen wird die KW nur zu beginn der woche eingeblendet.
das einzige, was quasi gefuellt (mit der maus nach unten gezogen) werden muss, ist die spalte B. die spalten C und D sowie die formatierungen werden automatisch generiert.
das ist nur ein loesungsvorschlag, denn diese gibts wie sand am meer. mit ein paar installierten addons fuer excel gehts sicherlich auch einfacher, aber das hier gezeigte bezieht sich auf die standardinstallation und mitgelieferten funktionen. ich kann mir schon fast denken, dass es die harcore excel heroes besser und schneller loesen, aber fuer mich ist das schon ein highlight, denn excel ist einfach nicht meine welt…
und so gehts:
die bedingte formatierung auf die komplette spalte B anwenden. die monate bekommen somit einen farbwechsel. die formel dazu:
=(MONAT(B1))/2=GANZZAHL((MONAT(B1))/2)
die zweite bedingung dient dazu, das aktuelle datum in rot anzuzeigen.
die bedingte formatierung auf die komplette spalte C anwenden. die wochenenden werden damit andersfarbig dargestellt.
diese bedingte formatierung auf die spalte D bewirkt, dass die kalenderwochen einen automatischen farbwechsel bekommen und die jeweilige KW nur am ersten tag der woche angezeigt wird. die formel dazu:
=((KÜRZEN((B1- DATUM(JAHR(B1-REST(B1-2;7)+3); 1;REST(B1-2;7)-9))/7)))/2=GANZZAHL(((KÜRZEN((B1- DATUM(JAHR(B1-REST(B1-2;7)+3); 1;REST(B1-2;7)-9))/7)))/2)
(sieht durch den blocksatz hier im blog etwas zerhackstueckelt aus. das soll eine zeile formel sein.)