Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1484to1488
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Zählen nach Farbe und Zellinhalt

Zählen nach Farbe und Zellinhalt
06.04.2016 10:18:41
Wolle
Hallo liebe Excel Gemeinde,
ich benötige Hilfe bei einen VBA Code.
Der anhängende VBA Code zählt zwar alle Zellen zusammen die Schriftfarbe Rot haben,
ich benötige aber als zusätzliche Einschränkung, es soll nur die Anzahl der Zellen gezählt werden, wenn die Farbe Rot ist und der Zellinhalt >0 ist.
MfG
Wolle
Anbei mein bisheriger Code:
Option Explicit

Function SumColor(Bereich As Range, iIndex As Integer) As Long
Application.Volatile
For Each Bereich In Bereich
If Bereich.Font.ColorIndex = 3 And IsNumeric(Bereich) Then
SumColor = SumColor + Bereich
End If
Next Bereich
End Function
Function FarbeZählen(Bereich, Farbe)
Dim zelle As Object
Application.Volatile
For Each zelle In Bereich
If zelle.Font.ColorIndex = Farbe Then FarbeZählen = FarbeZählen + 1
Next
End Function

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zählen nach Farbe und Zellinhalt
06.04.2016 10:39:26
Michael
Hallo!
Mit
And Bereich.Value > 0
Im gesamten Code:
Function SumColor(Bereich As Range, iIndex As Integer) As Long
Application.Volatile
For Each Bereich In Bereich
If Bereich.Font.ColorIndex = 3 And IsNumeric(Bereich) And Bereich.Value > 0 Then
SumColor = SumColor + Bereich
End If
Next Bereich
End Function
Function FarbeZählen(Bereich, Farbe)
Dim zelle As Object
Application.Volatile
For Each zelle In Bereich
If zelle.Font.ColorIndex = Farbe And zelle.Value > 0 Then
FarbeZählen = FarbeZählen + 1
End If
Next
End Function
LG
Michael

Anzeige
AW: Zählen nach Farbe und Zellinhalt
06.04.2016 11:02:06
Wolle
Hallo Michael,
danke für den Code.
Leider zählt er auch die Zelle mit, wenn statt eine Zahl auch Text drin steht
Kannst du das noch mal prüfen
Danke
MfG
Wolle

AW: Zählen nach Farbe und Zellinhalt
06.04.2016 11:33:01
Michael
Hallo!
Du hast doch in Deiner Funktion "SumColor" bereits eine Prüfung auf numerische Zell-Inhalte, nämlich
And IsNumeric(Bereich)
Die kannst Du ja auch in der Funktion "FarbeZählen" verwenden:
If zelle.Font.ColorIndex = Farbe And IsNumeric(zelle) And zelle.Value > 0
Das hab ich Dir insofern nicht angepasst, weil in Deinem Original-Code nicht vorhanden! Dachte das kannst Du Dir selbst entsprechend anpassen...
LG
Michael

Anzeige
AW: Zählen nach Farbe und Zellinhalt
06.04.2016 12:11:59
Wolle
Hallo Michael,
Super hat jetzt geklappt.
Vielen Dank für deine Hilfe
MfG
Wolle

Gern, Danke für die Rückmeldung owT
06.04.2016 12:59:18
Michael

Das ist doch alles Mumpitz, ...
06.04.2016 13:56:58
Luc:-?
…Leute,
denn worauf kommt's hier doch in 1.Linie an? Die FestStellung der ZellFarbe!
Das kann man mit der alten XLM-Fkt ZELLE.ZUORDNEN in benannter Fml (ggf unter Einbeziehung einer volatilen XlStandardFkt) nur für DirektFärbungen oder ab Xl14/2010 für alle gezeigten ZellFarben (auch aus BedingtFormat) mit einer trivialen UDF (die allerdings nicht ganz so trivial eingesetzt wdn muss, wobei eine weitere Trivial-UDF oder die XLM-Fkt AUSWERTEN ins Spiel kommt) erreichen.
Alles, was hier gezeigt wird, ist viel zu speziell und damit in der Anwendung unnötig eingeschränkt. Will man alles zu einem spezifischen Zweck kombinieren, muss alles, was variabel sein könnte, auch als Argument übergebbar sein. Die UDF muss dann auch das alles unterscheiden und fallweise entsprd reagieren können. Das ist das allgemeine Prinzip von Xl-StandardFktt! Das hier Gezeigte entspricht eher der Vorgehensweise von Pgmmierern, die mal schnell ein paar (fallweise häufige) PgmSchritte in eine Fkt auslagern wollen. Bei einer ZellFml ist Xl aber das HptPgm und man muss dann auch dessen Möglichkeiten beachten, wenn die UDF in einer ZellFml eingesetzt wdn soll. Anderenfalls produziert man womöglich einen ganzen Haufen ähnlicher UDFs für spezielle EinsatzZwecke, über die man schnell die Übersicht verlieren wird.
Im Prinzip reicht also, wenn man universell sein will, eine UDF wie bspw folgende:
Function CellColor(Zelle As Range): CellColor = Zelle.DisplayFormat.Interior.Color: End Function
Die ist natürlich nur auf EinzelZellen ausgelegt, man kann das aber auf ZellBereiche erweitern oder in der ZellFml für die Verarbeitung ganzer ZellBereiche sorgen.
Will man generell keine XLM-Fktt verwenden, muss eine weitere Trivial-UDF her, denn MS hat die DirektAnwendung von Fktt, die .DisplayFormat verwenden, in ZellFmln blockiert (#WERT!). Das könnte dann die folgende sein:
Function FTextEval(FText As String): FTextEval = Evaluate(FText): End Function
Um die Farbe einer EinzelZelle (hier A1ff) zu erhalten, muss man dann folgende Fml verwenden:
=FTextEval(T(JETZT())&"CellColor("&ADRESSE(ZEILE(A1);SPALTE(A1))&")")
Man kann natürlich auch nachstehendes Fml-Konstrukt verwenden:
=FTextEval(T(JETZT())&WECHSELN("CellColor(#)";"#";ADRESSE(ZEILE(A1);SPALTE(A1))))
Auf dieser Basis kann man auch versuchen, ganze ZellBereiche mit einer geeigneten XlFkt zu verarbeiten, falls man das nicht gleich in eine der UDFs integrieren will. Das wäre hier sinnvoll, um einen ganzen Vektor zu erhalten, der von einer 1zelligen Fml mit SUMME bzw SUMMENPRODUKT benötigt würde. Aber das können Interessierte ja mal selbst versuchen… ;-)
Anmerkung: Hier würde natürlich noch der Vgl mit der VorgabeFarbe in der Fml hinzukommen.
Gruß, Luc :-?
Besser informiert mit …
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige