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.)