Excel 2007 zählen wenn farbe

Hallo

Es gibt viele Threats, die dieses Thema haben - ich weiß. Mein Problem ist aber, das bei mir in Excel 2007 immer nur „NAME“ oder „BEZUG“ auftaucht, wenn ich versuche, die jeweiligen Codes einzugeben. Kann man mal GENAU schreiben, was man tippen muß? Angefangen von: wie rufe ich VBA auf? bis was muß ich genau in die Zelle als Suchfunktion eingeben?
Ich verzweifel hier grade…

LG
Diana

Hallo

Welchen Thread meinst du denn zum Beispiel?
Mir ist im Moment noch dein Wunschergebnis und ein evtl. bevorzugter Lösungsweg (Formel oder VBA …) etwas schleierhaft.

Ich habe das bisher immer nach diesem Tipp gemacht:
http://www.excelformeln.de/formeln.html?welcher=433

Das hier: Einfügen - Namen - Definieren, Name: Farbe
findest du in Excel 2007 unter „Formeln/Namensmanager“

Gruß
Brink

Hallo Diana,

Es gibt m.W. keine eingebaute Arbeitsblattfunktion, die Zellformatierungen auswertet, sondern nur Zellinhalte. Über VBA wäre es allerdings weniger ein Problem, da könnte man eine eigene Funktion definieren, die das kann. Voraussetzung sind vorhandene Infos über die Art des Bereichs, der ausgewertet werden soll sowie die Farbe.

VBA rufst Du einfach mit Alt + F11 auf. Das wird Dir vermutlich aber ohne Kenntnisse dieser Sprache auch nicht weiterhelfen. Darum habe ich Dir mal einen Code geschrieben, den Du evtl anpassen kannst. Er gehört in ein VBA-Modul gespeichert. Dann kannst Du die neue Arbeitsblattfunktion „Farbzellenzählen(Bereich)“ verwenden. Der Bereich wird als Zelladressen eingegeben und muss rechteckig sein. Gezhlt werden alle im Bereich nicht eingefärbten Zellen.

Gruß
smalbop

Function Farbzellenzählen(ByRef Bereich As Range)
 Dim Zelle As Range
 Dim n As Long
 For Each Zelle In Bereich
 If Zelle.Interior.ColorIndex = xlColorIndexNone Then
 n = n + 1
 End If
 Next Zelle
 Farbzellenzählen = n
End Function

Hallo

Mein Problem ist nicht vorrangig der Code selbst. Ich hab im Internet schon einige Codes gefunden. Das Problem ist, dass mein Excel 2007 immer nur „Name“ sagt, wenn der Code ausgeführt werden soll. Iregndeine Einstellung läßt die VBA Sachen nicht durch. Ich gebe den Befehl ein, aber die entsprehende Rechnung wird einfach nicht ausgeführt! Ich habe schon im Vertrauenscenter auf alle Makros aktivieren und VBA zulassen gestellt, aber irgendwie macht der das trotzdem nicht.
Ich weiß also nicht, ob die Codes, die ich gefunden habe funktionieren und/oder ob meine Sicherheitseinstellungen das alles blockieren.

Wenn jemand weiß, wie ich das einstellen kann, bitte helfen! Aber für Dumme Schritt für Schritt, weil ich mich mit Excel 2007 nicht besonders gut auskenne.

LG
Diana

Hallo

Wie lautet denn der Code? Wo hast Du ihn gespeichert?

Versuchst Du, das Makro manuell zu starten, um die Berechnung durchzuführen? Das ist nämlich bei dem von mir eingestellten Code überflüssig - der arbeitet dezent im Hintergrund.

Gruß
smalbop

Grüezi Diana

Mein Problem ist nicht vorrangig der Code selbst. Ich hab im
Internet schon einige Codes gefunden. Das Problem ist, dass
mein Excel 2007 immer nur „Name“ sagt, wenn der Code
ausgeführt werden soll. Iregndeine Einstellung läßt die VBA
Sachen nicht durch. Ich gebe den Befehl ein, aber die
entsprehende Rechnung wird einfach nicht ausgeführt! Ich habe
schon im Vertrauenscenter auf alle Makros aktivieren und VBA
zulassen gestellt, aber irgendwie macht der das trotzdem
nicht.

Als erstes muss der Code in der Mappe am richtigen Ort abgelegt und gespeichert werden.

  • Rechtsklich auf einen Tabellenblattreiter
  • Code anzeigen (der VBA-Editor öffnet sich)
  • Menü: ‚Einfügen‘ (im VBA-Editor)
  • Modul
  • In dieses leere Fenster den Code kopieren
  • Mit Alt+Q den VBA-Editor verlassen.
  • Mappe speichen, schliessen und wieder öffnen

Nun die Makros aktivieren und die neue Funktion steht dir zur Verfügung.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Thomas

Danke! Das war genau einer meiner Fehler: ich hatte keine Ahnung, was sich da mit Alt F11 öffnet. Ich hab immer den Code in das sich da öffnende Fenster geschrieben und kein neues Modul erzeugt! Das kommt davon, wenn man keine Ahnung hat :wink:
Aber es wäre ja zuu einfach, wenn das schon alle meine Probleme lösen würde. Hier die nächste Hürde: wie kann ich die Hintergrundfarbenabfrage verknüpfen mit der Schrift darin? Ich möchte nur dann summieren, wenn die Farbe grün ist UND ein blaues x in dem Feld steht. Bisher sieht mein Code so aus:

Public Function HFarbeZählen(Bereich As Range, Farbe As Integer)
Dim Zelle As Range
Application.Volatile
For Each Zelle In Bereich
If Zelle.Interior.ColorIndex = Farbe Then
HFarbeZählen = HFarbeZählen + 1
End If
Next Zelle
End Function

Hab ich natürlich nur kopiert. Selbst schreiben kann ich nicht ;-( Bin VBA-Noobie!

Nochmal Danke schön für die Lösung des Hauptproblems! :wink:

Diana

Grüezi Diana

Danke! Das war genau einer meiner Fehler: ich hatte keine
Ahnung, was sich da mit Alt F11 öffnet. Ich hab immer den Code
in das sich da öffnende Fenster geschrieben und kein neues
Modul erzeugt! Das kommt davon, wenn man keine Ahnung hat :wink:

Keine Ahnung von etwas zu haben ist keine Schande - Du hast ja fix gelernt und umgesetzt :smile:

Aber es wäre ja zuu einfach, wenn das schon alle meine
Probleme lösen würde. Hier die nächste Hürde: wie kann ich die
Hintergrundfarbenabfrage verknüpfen mit der Schrift darin? Ich
möchte nur dann summieren, wenn die Farbe grün ist UND ein
blaues x in dem Feld steht.

[Code gesnippt]

Nochmal Danke schön für die Lösung des Hauptproblems! :wink:

Na, dann versuchen wir uns doch auch noch auf dem Nebenschauplatz :smile:

Die folgende Funktion lässt (fast) keine Wünsche mehr offen und richtei sich immer nach einer Zelle die genau so formatiert ist wie diejenigen die Du prüfen willst. Der Inhalt der Zelle, hier also das ‚x‘ wird dabei ausser Acht gelassen.

Für jeden Typen des Formates ist einer der 4 Parameter verantwortlich, wenn Du eine ‚1‘ oder WAHR setzt wird er berücksichtigt.
Schau dir auch die Kommentare im Code drin gut an - das Ganze hat nämlich einen groben Haken, weil keine Formeln neu berechnet werden, wenn sich das Format einer Zelle ändert.

Public Function ZählenWennFormat(Bereich As Range, \_
 ReferenzZelle As Range, \_
 Optional ZellenFarbe As Boolean = True, \_
 Optional ZellenMuster As Boolean = False, \_
 Optional SchriftFarbe As Boolean = False, \_
 Optional SchriftFett As Boolean = False, \_
 Optional SchriftKursiv As Boolean = False) \_
 As Variant

 '© [email protected], 26.08.2009
 'Funktion zur Anwendung von ZÄHLENWENN() mit Hintergrund-,
 'Schriftfarbe, Fett, Kursiv als Zählkriterium
 'Beliebig erweiterbar um weitere Kriterien
 '
 'Die Parametereingabe erfolgt in derselben Reihenfolge
 'wie in der Funktion ZÄHLENWENN():
 ' - Der erste Parameter erwartet den Suchbereich
 ' - Der zweite Parameter erwartet einen Zellbezug der als Kriterium
 ' verwendet wird - die einzelnen Formate werden aus dieser Zelle ermittelt
 ' - Der dritte Parameter erwartet Wahr/Falsch für die Hintergrund-Farbe
 ' - Der vierte Parameter erwartet Wahr/Falsch für die Schrift-Farbe
 ' - Der fünfte Parameter erwartet Wahr/Falsch für fette Schrift
 ' - Der sechste Parameter erwartet Wahr/Falsch für kursive Schrift

 'Zur automatischen Aktualisierung im Tabellenblatt den folgenden Term
 'anhängen: +(0\*JETZT()) und durch F9 drücken die Funktion aktualisieren
 'Also z.B. wie folgt: =ZählwenWennFarbe(A1:A10;A1)+(0\*JETZT())

Dim lngI As Long
Dim varWerte As Variant
Dim varKrit1 As Variant
Dim varKrit2 As Variant
Dim Anzahl As Long


 If Bereich.Rows.Count \> 1 And Bereich.Columns.Count \> 1 Then
 ZählenWennFormat = CVErr(xlErrRef)
 Exit Function
 End If

 ReDim varWerte(1 To Bereich.Count)

 'Prüfen auf die Farbe der Zelle
 If ZellenFarbe Then
 varKrit1 = ReferenzZelle(1).Interior.ColorIndex
 For lngI = 1 To Bereich.Count
 If Bereich(lngI).Interior.ColorIndex varKrit1 Then
 varWerte(lngI) = 0
 End If
 Next
 End If

 'Prüfen auf das Muster der Zelle
 If ZellenMuster Then
 varKrit1 = ReferenzZelle(1).Interior.Pattern
 varKrit2 = ReferenzZelle(1).Interior.PatternColorIndex
 For lngI = 1 To Bereich.Count
 If (Bereich(lngI).Interior.Pattern varKrit1) Or \_
 (Bereich(lngI).Interior.PatternColorIndex varKrit2) Then
 varWerte(lngI) = 0
 End If
 Next
 End If

 'Prüfen auf die Farbe der Schrift
 If SchriftFarbe Then
 varKrit1 = ReferenzZelle(1).Font.ColorIndex
 For lngI = 1 To Bereich.Count
 If Bereich(lngI).Font.ColorIndex varKrit1 Then
 varWerte(lngI) = 0
 End If
 Next
 End If

 'Prüfen auf fette Schrift
 If SchriftFett Then
 varKrit1 = ReferenzZelle(1).Font.Bold
 For lngI = 1 To Bereich.Count
 If Bereich(lngI).Font.Bold varKrit1 Then
 varWerte(lngI) = 0
 End If
 Next
 End If

 'Prüfen auf kursive Schrift
 If SchriftKursiv Then
 varKrit1 = ReferenzZelle(1).Font.Italic
 For lngI = 1 To Bereich.Count
 If Bereich(lngI).Font.Italic varKrit1 Then
 varWerte(lngI) = 0
 End If
 Next
 End If

 ZählenWennFormat = Bereich.Count - WorksheetFunction.Count(varWerte)

End Function

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -