MS Office-Logo

Heute gibt’s mal einen aktualisierten Artikel, den ich schon mal auf meiner alten Webseite hatte. Weil das Thema grad wieder mal bei mir aktuell war…

Die Anzahl Zellen mit Daten zu zählen ist ja in Excel mit der ANZAHL-Funktion kein Problem, eine Summe über mehrere Zellen zu bilden geht mit der SUMME-Funktion genauso problemlos.

Was aber wenn die Zellen aufgrund ihrer Hintergrundfarbe gezählt werden sollen? Oder es sollen nur die Zellen summiert werden, die eine bestimmte Hintergrundfarbe haben? Excel selbst bietet da keine fertigen Funktionen an. Es geht aber trotzdem, mit ein wenig VBA …

Und wie geht’s?

Fügen Sie die folgende Funktion im VBA-Editor in Ihre Arbeitsmappe ein (oder besser gleich in VBA-Projektmappe, dann stehen die Funktionen immer zur Verfügung). Danach kann die Funktion in Excel genauso genutzt werden wie die SUMME-Funktion. Der Aufruf lautet also “=SummeRot(Zellbereich)” und es wird die Summe der Werte zurückgegeben, deren Zellenhintergrund rot ist.


Public Function SummeRot(Bereich As Object) As Double

    Dim s As Double
    Dim a As Object

    Application.Volatile

    s = 0

    For Each a In Bereich
        If a.Interior.ColorIndex = 3 Then
            s = s + a.Value
        End If
    Next

    SummeRot = s

End Function

Geht das auch mit Zählen?

Klar. Die folgende Funktion macht das Gleiche wie die SummeRot-Funktion, nur wird hier nicht der Inhalt der Zellen aufsummiert, sondern es werden lediglich die entsprechenden Zellen gezählt. Der Aufruf lautet dementsprechend “=AnzahlBlau(Zellbereich)”.


Public Function AnzahlBlau(Bereich As Object) As Double

    Dim s As Double
    Dim a As Object

    Application.Volatile

    s = 0

    For Each a In Bereich
        If a.Interior.ColorIndex = 5 Then
            s = s + 1
        End If
    Next

    AnzahlBlau = s

End Function

Kann man nur farbige Hintergründe auswerten?

Nein. Genauso lässt sich die Schriftfarbe auswerten. Anstelle des Interior-Objektes (Hintergrund) muss das Font-Objekt (Schrift-Objekt des Zellinhaltes) ausgewertet werden. Die entsprechende Eigenschaft heißt ebenfalls ColorIndex.


Public Function AnzahlSchriftBlau(Bereich As Object) As Double

    Dim s As Double
    Dim a As Object

    Application.Volatile

    s = 0

    For Each a In Bereich
        If a.Font.ColorIndex = 5 Then
            s = s + 1
        End If
    Next

    AnzahlSchriftBlau = s

End Function

Und woher bekomme ich die Farbwerte?

Nun kann man sich für jede beliebige Farbe eine solche Funktion erstellen. Dazu benötigt man aber den jeweiligen Farbindex. Diesen kann man sich aus der Online-Hilfe heraussuchen. Oder aber ganz einfach selbst ermitteln …

Dabei ist zu beachten das verschiedene Office-Versionen abweichende Objektmodell haben und man natürlich das passende Objektmodell nutzen muss


Public Function GetColorIndex(Bereich As Object)

    'Funktion zum ColorIndex ermitteln, nur eine Zelle angeben !!!
    'Die übergebene Zelle muss in der gewünschten Farbe formatiert sein.

    Application.Volatile

    'Ältere Office-Versionen
    GetColorIndex = Bereich.Interior.ColorIndex

    'Neue Office-Versionen ab Office 2007
    GetColorIndex = Application.ThisCell.Interior.ColorIndex

End Function

Da ist doch ein Haken, oder?

Die beschriebenen Funktionen haben allerdings einen kleinen Haken, der nicht verschwiegen werden soll. Excel (hier Version 2000 bis 2010) löst leider keine Neuberechnung der Werte aus, wenn die Hintergrundfarbe einer Zelle oder die Schriftfarbe geändert wird. Wenn also Farbänderungen vorgenommen werden, dann muss danach mit F9 eine Neuberechnung erzwungen werden. Eine andere Lösung habe ich noch nicht gefunden.

Fertige Funktionen

Für Office 2007 und Neuer: Anzahl Zellen im markierten Bereich, die die gleiche Hintergrundfarbe haben wie die Zelle mit der enthaltenen Formel.


Public Function AnzahlBackgroundColor(rngZellen As Object) As Double

    Dim s As Double
    Dim a As Object
    Dim c As Variant

    Application.Volatile
    
    'Farbwert der Eltern-Zelle, wo die Function eingetragen ist, ermitteln
    c = Application.ThisCell.Interior.ColorIndex

    s = 0

    'Range durchlaufen und Zellen zählen
    For Each a In rngZellen
        If a.Interior.ColorIndex = c Then
            s = s + 1
        End If
    Next

    AnzahlBackgroundColor = s

End Function

 

Markiert in:                    

2 thoughts on “Microsoft Excel – Farbige Zellen zählen

  • 28. März 2012 um 11:44
    Permalink

    Ich bin echt immer wieder beeindruckt, was mit Excel alles möglich ist. Aber auf die Idee farbig markierte Zellen zu zählen bin ich auch noch nicht gekommen :D Ich hatte schonmal versucht so etwas für farbige Zahlen zu erstellen, abin aber nicht bewandert genug gewesen ;) Top, dass das so auch funktioniert, danke für den bericht!

    Antworten
  • 7. Mai 2013 um 12:19
    Permalink

    … oder man nutzt hochwertige Software, welche entsprechende Funktionen von Haus aus enthält.
    Persönlich nutze ich da lieber GoogleDrive, statt einer Software, welche nach 20 Jahren wirkt wie nach 2 Jahren Entwicklung ….

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.