Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1728to1732
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

Funktion um Zellen mit Hintergrundfarbe zu ermitteln

Funktion um Zellen mit Hintergrundfarbe zu ermitteln
11.12.2019 12:34:41
Kailash
Hallo Excel Freunde!
Ich brauche eine Funktion, die die Anzahl der grün gefärbten Zellen zurück gibt. Ich möchte diese Funktion dann in einer Matrixformel verwenden um weitere Bedingungen hinzuzufügen.
In den grün gefärbten Zellen stehen verschiedene Texte, diese Texte ensprechen Zahlen(die in einer anderen Tabelle stehen). Will die Zahlen addieren.
Das muss ich ja mit einer Matrixformel lösen oder mit SummeWenn oder so.
Aber meine Funktion funktioniert da nicht so richtig.
=CountCcolor($AQ$9;O10:AG10)
=CountCcolor($AQ$9;{"S1"\"S1"\"S1"\"S1"\"S1"\""\""\"T"\"T"\"T"\""\"N"\"N"\"N"\"N"\""\""\""\""})
=2
Function CountCcolor(criteria As Range, ParamArray range_data())
Dim xcolor As Long
Dim datax As Variant
Dim cell As Range
xcolor = criteria.Interior.ColorIndex
For Each datax In range_data
For Each cell In datax
If cell.Interior.ColorIndex = xcolor Then
CountCcolor = CountCcolor + 1
End If
Next cell
Next datax
End Function

Ich hänge mal eine Datei an wo du das genauer angucken kannst.
Ich vermute dass die Funktion dafür nicht geeignet ist.
https://www.herber.de/bbs/user/133719.xlsm
Viele Grüsse

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Funktion um Zellen mit Hintergrundfarbe zu ermitteln
11.12.2019 14:00:18
fcs
Hallo Kailash,
damit die Funktion SUMMENPRODUKT in Zelle L7 funktioniert, muss die benutzerdefinierte VBA-Funktion ein Array mit den Werten 1 und 0 zurückgeben. ( 1= Farbe stimmt überein, 0 keine Übereinstimmung).
Formel in L7:
=SUMMENPRODUKT(((C7:I7)=tab[Schicht])*tab[Stunden]*ColorArray($L$2;C7:I7))
Benutzerdefinierte Funktion:
Function ColorArray(criteria As Range, range_data As Range) As Variant
'Gibt ein Array zurück mit Wert = 1, wenn Farbe in Zelle mit Vorgabewert in _
Zelle criteria übereinstimmt.
Dim xcolor As Long
Dim lRow As Long, lCol As Long
Dim ergArray() As Integer
xcolor = criteria.Interior.ColorIndex
ReDim ergArray(1 To range_data.Rows.Count, 1 To range_data.Columns.Count)
For lRow = 1 To range_data.Rows.Count
For lCol = 1 To range_data.Columns.Count
If range_data.Cells(lRow, lCol).Interior.ColorIndex = xcolor Then
ergArray(lRow, lCol) = 1
End If
Next lCol
Next lRow
ColorArray = ergArray
End Function
LG
Franz
Anzeige
AW: Funktion um Zellen mit Hintergrundfarbe zu ermitteln
13.12.2019 12:28:44
Kailash
Hallo Franz!
Herzlichen Dank,habe ich schon eingebaut. Deine Hilfe hat mir tagelanges rumprobieren erspart.
Um etwas zu lernen habe ich deinen Code noch mal geschrieben, und wollte ihn als Paramarray schreiben, so dass man mehrere Bereiche berechnen kann. Ich bin da aber totaler Anfänger und weiss eigentlich nicht was ich tue.
Hier unten mein Code, der aber nicht funktioniert. Schon bei y ist was falsch.
Und bei
If CellRange(iRow, iCol).Interior.ColorIndex = ColorCrit Then
weiss ich auch nicht wie ich das schreiben soll.
Viele Grüsse
Function ColorRangeParam(criteria As Range, ParamArray CellRange()) As Variant
'returns an array with value 1 if the cells have a certain bakgrounds color
Dim iRow As Long 'counter for rows
Dim iCol As Long 'counter for columns
Dim ColorCrit As Long 'which color should be investigated
Dim ColorArr() As Byte ' Array which holds the results from all the cells
Dim RangeItem As Variant
Dim cell As Range
Dim x As Integer 'first dimention of paramarray
Dim y As Integer 'second dimention of paramarray
x = UBound(CellRange, 1) - LBound(CellRange, 1) + 1 'number of rows in paramarray
y = UBound(CellRange, 2) - LBound(CellRange, 2) + 1 'number of columns in paramarray
ColorCrit = criteria.Interior.ColorIndex
ReDim ColorArr(1 To x, 1 To y) 'give array the size
For Each RangeItem In CellRange
For Each cell In RangeItem
'Fill array with 1 when a color is detected
For iRow = 1 To x
For iCol = 1 To y
If CellRange(iRow, iCol).Interior.ColorIndex = ColorCrit Then
ColorArr(iRow, iCol) = 1
End If
Next iCol
Next iRow
Next cell
Next RangeItem
ColorRangeParam = ColorArr
End Function

Anzeige
AW: Funktion um Zellen mit Hintergrundfarbe zu ermitteln
13.12.2019 15:03:21
fcs
Hallo Kailash,
mehrere Zellbereiche lassen sich meines Wissens nicht als ein Array von Range-Objekten in einer Tabellenformel an eine Benutzerdefinierte Funktion übergeben.
Man kann Die Parameter der Function dann so festlegen, dass der 1. Bereich ein Mussparameter ist und die weiteren Bereiche als Optionale Parameter definieren.
Alle Rangeobjekte, die einem Parameter zugeordnet wurden, kann man dann in ein entsprechendes Array übernehmen.
Dieses Array kann man dann dann in For next Schleifen abarbeiten und die Zellen auswerten.
LG
Franz
Statt einer speziellen UDF könntest du auch ...
11.12.2019 18:48:29
Luc:-?
…2 bereits im Archiv enthaltene verwenden, Kailash,
von denen die Farbauslesende ab Xl14/2010 auch eine aus BedingtFormatierung resultierende ZellFarbe auslesen kann. Allerdings muss sie stets mit der Auswertungsfkt zusammen eingesetzt wdn, weil Xl den direkten Einsatz von .DisplayFormat in einer ZellFml mit #WERT! quittiert, wohl, damit niemand auf die Idee kommt, das auch wieder in BedingtFormat-RegelFmln einzusetzen, was wahrscheinlich (auch in der folgd Form!) zum Xl-Absturz führen würde. Die singulare MatrixFml, die dein WunschErgebnis liefern würde, sähe dann so aus:
L7[:L13]: {=SUMME((MTRANS(TxEval(WECHSELN("CellColor(#)";"#";ADRESSE(ZEILE(C7);
SPALTE(C:I);4))))=TxEval("CellColor(L2)"))*(C7:I7=tab[Schicht])*tab[Stunden])}
Archiv-Link zu den UDFs CellColor und TxEval (Vs1.0):
https://www.herber.de/forum/archiv/1476to1480/1476498_Projektplan.html#1477400
Gruß, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
AW: Statt einer speziellen UDF könntest du auch ...
13.12.2019 12:58:14
Kailash
Hallo Luc :-?
Danke für deine Antwort. Das ist mir als Anfänger aber noch zu kompliziert und ich versuche erstmal das mit den Arrays zu verstehen.
Das kann ich mir später noch mal anschauen. Ist ja toll wenn man damit auch benutzerdefinierte Formatierung auslesen kann.
Alles Gute!

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige