2016-04-01 6 views
1

でセルにI以下のVBAコードを持っている:#VALUEエラー」機能

簡単に言えば
Function AvgNoColor(rngData As Range, color As String) As Variant 

Dim sum As Double 
Dim amount As Double 
Dim C As Range 

    For Each C In rngData 
     If color = "Red" Then 
      If Not COLORINDEX(C) = 44 And Not COLORINDEX(C) = 3 Then 
       sum = sum + C.Value 
       amount = amount + 1 
      Else 
    'HERE 
       AvgNoColor = "" 
      End If 
     ElseIf color = "Orange" Then 
      If Not COLORINDEX(C) = 44 Then 
       sum = sum + C.Value 
       amount = amount + 1 
      Else 
    'HERE 
       AvgNoColor = "" 
      End If 
     End If 
    Next 

AvgNoColor = sum/amount 

End Function 

、私は色ではありませんされている範囲内のセルの平均たい「赤"または"オレンジ "。平均値は期待どおりに返されますが、セルを空にする必要がある場合、セルには#VALUEというエラーが発生します。

答えて

1

にしてみてください、あなたがあれば、すべての方向にエラーがスローされますされ、ゼロ/未定義で除算するようにコードをオープンしましたトリガーされた。

このリビジョンを試してみてください:

Function AvgNoColor(rngData As Range, color As String) As Variant 

Dim sum As Double 
Dim amount As Double 
Dim C As Range 

    For Each C In rngData 
     If color = "Red" Then 
      If Not COLORINDEX(C) = 44 And Not COLORINDEX(C) = 3 Then 
       sum = sum + C.Value 
       amount = amount + 1 
      End If 
     ElseIf color = "Orange" Then 
      If Not COLORINDEX(C) = 44 Then 
       sum = sum + C.Value 
       amount = amount + 1 
      End If 
     End If 
    Next 

If sum <> 0 And amount <> 0 Then 
    AvgNoColor = sum/amount 
Else 
    AvgNoColor = "" 
End If 

End Function 
私は `Each`用と` AvgNoColor =合計/ amount`後の前に `IsError`を入れてみました、と出命じ
+0

であるはずのセルを除いては空です。しかし、ダブルではエラーになるので変数の和と量を変更する必要がありました。今、うまく動作します、ありがとう! – Grafit

+0

それは私のための監視です。私はそれを修正します。これがうまくいく場合は、答えの横にあるチェックマークをクリックしてこれを示す必要があります。 – Vegard

+0

私はそれがどのように動作するのか知っています。ありがとう! – Grafit

0

ISERROR(値)関数を試す:

If Not IsError(AvgNoColor) Then 
    'your code 
End If 

値はエラー値(#N/A、#VALUE!、#REF!、#DIV/0!、#NUM!#NAME場合?または#NULL)、この関数はTRUEを返します。それ以外の場合は、FALSEを返します。

+0

' AvgNoColor = "" 'が、これはうまくいかないようです。 – Grafit

+0

「セルが空である必要があるときにセルに#VALUEエラーが発生しました」と言うと、結果に#VALUEが表示されていますか? – Mrig

+0

私はワークシートのセルがAvgNoColor書き込みをdiplayingながら – Grafit

0

PLSはのif-elseブロックの外に、この行(AvgNoColor = sum/amount)を置くことによって、細胞

=IF(ISERROR(AvgNoColor(A3:A14,"Red"))="FALSE",AvgNoColor(A3:A14,"Red"),"") 
+0

何らかの理由で今ではすべてのセルが存在しています – Grafit