2017-03-16 14 views
0

ここで間違っていることがわかりません。私は、呼び出されると、その特定のRGB色を持つ入力された範囲内の空でないセルをすべてカウントする関数を作成しようとしています。私はブック内の関数を使用しようとしますが、#NAMEを取得しますか?代わりに番号を返します。VBAでの機能

Function countProspect(rng1 As Range, rng2 As Range) As Long 

Dim cel As Variant 

countProspect = 0 
For Each cel In Range(rng1, rng2) 
    If cel.Interior.Color = RGB(248, 203, 173) And IsEmpty(cel.Value) = False Then 
     countProspect = countProspect + 1 
    End If 
Next cel 

End Function 
+2

* *はこのコードですか?それは標準モジュール(どこにあるべきか)やシート1コードモジュール(どこにあるべきでない)にありますか? –

+1

それが正しい場所にあれば私のために働きます。 – YowE3K

+3

どのように使用していますか? '= countProspect(A1、A10)'または '= countProspect(A1:A10)'?それは最初のバージョンのために書かれていて、2番目のバージョンでは動作しません。そして、これはUDFにとっては非常に珍しいことです。 –

答えて

1

異なるサイズの範囲で1つまたは2つの入力をサポートするようにコードを作成する場合は、これを行う必要があります。間にあるセルが変更されたときに関数が更新されないため、単セル2個だけではなく、範囲を使用する方が良いです。

あなたはセル=countProspect(A3,C10)を持っている場合はB4がcountProspectでを使用していないあるとして、B4への変更は更新されません。これを考慮する必要があります。そうしないと、結果が不正確になります。

Option Explicit 

Function countProspect(rng1 As Range, Optional rng2 As Range) As Long 
    Dim allCell As Range, cel As Range, count As Long 

    Set allCell = rng1 
    If Not rng2 Is Nothing Then Set allCell = Union(allCell, rng2) 
    For Each cel In allCell.Cells 
     If cel.Interior.Color = RGB(248, 203, 173) And Not IsEmpty(cel) Then 
      count = count + 1 
     End If 
    Next cel 
    countProspect = count 
End Function