2016-07-26 7 views
3

色付きセルの数をカウントしようとしています(別の条件も満たしています)。次のようにSUMPRODUCTを使用して色付きセルを確認する

マイ細胞である:

enter image description here

私の意図は、「B」、どこ隣接するセルの色が緑である細胞をカウントすることです。次のように

私はまた、関数を書く:

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

次のように私は、その後SUMPRODUCT機能を使用します。

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

はしかし、私はエラーに#VALUE!

UPDATE

を取得します

次のように私は私の式を変更した:

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 

を、次のように私は式を使用します。私が手

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

答えが間違っている、6です。

+0

は、なぜあなたは代わりに '' SUMPRODUCT'のCOUNTIF'を使用していけませんか? – NatNgs

+0

私はグーグルで、SUMPRODUCTが関数をより良く受け入れることができるところを読んでいます –

+0

あなたの関数が一意の値として 'CheckColor(W40:W50)'を計算していると思いますので、 '= SUMPRODUCT( - (V40:V50) = "B"); 0) 'これは異なるサイズのパラメータのために'#Value'をスローします。あなたはステップ式の計算を試みる能力を持っていますか? – NatNgs

答えて

2

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

あなたはそれを理解したと思います。これは、渡された範囲の最初の列でのみ機能します。たとえば、A3:C3の場合は、A3:A3のセルのみをチェックします。 – Slai

0

これはVBAなしでも実行できますが、「ヘルパー」列が必要です。

セルC1にこの数式を入力し、(それは、セルA1に開始しますと仮定した場合)あなたの例を使用して名前CellColourと式=GET.CELL(63,Sheet1!$B1)

名前付き範囲を作成します。C11:=CellColour。あなたのスクリーンショットの外観によって、それは緑のために43を返すはずです。 =COUNTIFS($A$1:$A$11,"B",$C$1:$C$11,43)

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

フォントの色:Excel formula to get cell color

0

編集、補正

その後、列Bの緑と、列Aをカウントするために、この式を使用することができますこの関数では、関数に範囲を与え、それをColorIndexと比較します。つまり、範囲全体にセル間のカラーインデックスがないかどうかを尋ねることができます。

Excelが自動的に正しいセルを参照して値と比較すると、あなたがしていることはうまくいくが、私はそれをしないだろう。

実際にこれを管理する方法はいくつかあります。まず、あなたはダレンBartrup・クックmeantionのようなVBAなしでそれを行うには、ヘルパーの列でそれを行うと

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

のようにそれを書いて、COUNTIFで真の値をカウントするか、VBAでそれを書くが、その後、あなたは必要とすることができますループへの細胞のような一つ一つのトラフ:列範囲のための配列が少し異なっている

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

私の編集した説明を確認できますか? –

関連する問題