2016-07-26 4 views
3

Ich versuche, die Anzahl der farbigen Zellen zu zählen (die auch eine andere Bedingung erfüllen).Überprüfen von farbigen Zellen mit SUMMENPRODUKT

sind meine Zellen wie folgt:

enter image description here

Meine Absicht ist es, die Zellen zu zählen, wo es ein ‚B‘ ist und wo die benachbarten Zellen in der Farbe grün.

Ich schreibe auch eine Funktion wie folgt:

Function CheckColor(rng As Range) As Boolean 
    If rng.Interior.ColorIndex = 43 Then 
     CheckColor = True 
    Else 
     CheckColor = False 
    End If 
    End Function 

ich dann SUMPRODUCT Funktion wie folgt:

=SUMPRODUCT(--(V40:V50="B");--CheckColor(W40:W50)) 

aber ich erhalte eine Fehlermeldung #VALUE!

UPDATE

Ich habe meine Formel wie folgt geändert:

Function CheckColor(rng As Range) As Variant 
Dim arr As Variant 
Dim n As Integer 
ReDim arr(0 To rng.Count - 1) As Variant 
n = 0 
For Each cell In rng 
    If cell.Interior.ColorIndex <> 43 Then 
     bl = False 
    Else 
     bl = True 
    End If 
    arr(n) = bl 
    n = n + 1 
Next cell 
CheckColor = arr 
End Function 

Und ich verwenden Sie die Formel wie folgt:

=SUMPRODUCT((V40:V50="B")*CheckColor(W40:W50)) 

Die Antwort, die ich bekommen ist 6, was falsch ist.

+0

Warum Sie 'COUNTIF' statt' SUMPRODUCT' nicht verwenden? – NatNgs

+0

Ich habe gegoogelt und irgendwo gelesen, dass SUMPRODUCT Funktionen besser unterbringen kann –

+0

Ich denke (aber nicht sicher), dass Ihre Funktion 'CheckColor (W40: W50)' als ein eindeutiger Wert berechnet, so '' SUMMENPRODUKT (- (V40: V50 = "B"); 0) 'das wird einen" # Wert "aufgrund von Parametern unterschiedlicher Größe werfen; haben Sie die Möglichkeit, Schritt für Schritt Formeln zu berechnen? – NatNgs

Antwort

2

sind die Arrays für die Spaltenbereiche ein bisschen anders Variant(1 To 11, 1 To 1)

Function CheckColor(rng As Range) 
    Dim arr() 
    ReDim arr(1 To rng.Count, 1 To 1) 
    ' arr = rng.Value2 ' arr Type in the Locals window shows as Variant(1 To 11, 1 To 1) 
    For i = 1 To rng.Cells.Count 
     arr(i, 1) = rng.Cells(i, 1).Interior.ColorIndex = 43 
    Next i 
    CheckColor = arr 
End Function 
+0

Ich denke du hast es herausgefunden. Dies funktioniert nur mit der ersten Spalte des übergebenen Bereichs. Zum Beispiel wird für A3: C3 nur die Zellen in A3: A3 geprüft – Slai

0

Sie können dies ohne VBA tun, aber Sie benötigen eine 'Helfer' Spalte.

einen benannten Bereich mit dem CellColour Namen erstellen und der Formel =GET.CELL(63,Sheet1!$B1)

Arbeiten mit dem Beispiel (es beginnt in Zelle A1 vorausgesetzt), diese Formel in Zellen C1 eingeben: C11: =CellColour. Nach dem Aussehen Ihres Screenshots sollte es 43 für Grün zurückgeben.

Anschließend können Sie diese Formel verwenden, um Spalte A mit grün in Spalte B zu zählen: =COUNTIFS($A$1:$A$11,"B",$C$1:$C$11,43)

Hintergrundfarbe: How to count cells in a range with a value less than another cell in excel?

Schriftfarbe: Excel formula to get cell color

0

bearbeiten, Korrektur

In Mit der Funktion geben Sie der Funktion eine Reichweite und vergleichen sie mit einem ColorIndex. Das heißt, Sie fragen, ob der ganze Bereich den Farbindex hat und nicht die Zellen dazwischen.

Was Sie tun würden, würde funktionieren, wenn Excel automatisch die richtigen Zellen referenziert und vergleicht sie mit dem Wert, aber ich würde das nicht für Sie tun.

So gibt es verschiedene Möglichkeiten, wie Sie dies tatsächlich verwalten können.Zuerst können Sie es ohne vba wie Darren Bartrup-Koch meantion tun, können Sie es mit einem Helfer-Spalte tun und schreiben Sie es wie

=If(V40="B";CheckColor(W40) 

und zählen die mit Countif die wahren Werte oder Sie es in VBA schreiben, aber dann müssen Sie Schleife die Zellen nacheinander wie folgt Trog:

For x = 1 to 50 
    If Cells(x,10).Value = "b" AND Cells(x,11).ColorIndex = 43 Then 
     counter = counter + 1 
Next x 
Endif 
+0

Können Sie meine bearbeitete Beschreibung überprüfen? –

Verwandte Themen