2016-06-29 7 views
0

私のVBコードは次のとおりです。私は、スプレッドシートに「ピーター」についてのすべての異なるレコードを重複なく数えたいと思う。 コードを実行すると、「実行時エラー '13':Type Mismatch」が常に表示されます。私はデバッグに失敗します。私のコードに何が問題なのですか?VB関数が配列を返すエラー

Private Sub CheckBox5_Click() 
 

 
Dim myarray As Variant 
 

 
myarray = WorksheetFunction.If(Range("C7:C266") = "Peter", 1/(WorksheetFunction.CountIfs(Range("C7:C266"), "Peter", Range("F7:F266"), Range("F7:F266"))), 0) 
 

 
If CheckBox5.Value = True Then 
 
TextBox6.Value = WorksheetFunction.Sum(myarray) + 1 
 
End If 
 

 
If CheckBox5.Value = False Then 
 
TextBox6.Value = "" 
 
End If 
 

 
End Sub

+0

どのラインでエラーが返されますか? – RGA

+0

私の推測では、 'Range(" C7:C266 ")=" Peter "コールからのタイプの不一致がありますが、IF関数のドキュメントに完全に慣れていません – RGA

+0

" myarray = WorksheetFunction.If(Range ( "F7:F266")、範囲( "F7:F266")、範囲( "C7:C266")= "ピーター"、1 /(WorksheetFunction.CountIfs )、0) " – mobility

答えて

0

あなたが取得しているエラーがIF関数が呼び出された方法の結果です。第1項は論理的な結果でなければなりませんが、マルチセル範囲(Range( "C7:C266"))のvalueを呼び出すことはできません。この問題を解決するには、私が気づいていないIF以外のものを使ってもっと巧妙な解決法があるかもしれませんが、それぞれの細胞をループして行動する必要があると思います。

0

できますこのように:

Sub findPeter() 

Dim ws As Worksheet 
Dim peterCount As Long 
Set ws = Worksheets("nameofyoursheet") 

With ws 
    For i = 7 To 266 
     If .Cells(i, 3) = "Peter" Then 
      peterCount = peterCount + 1 
     End If 
    Next 
End With 

If CheckBox5.Value = True Then 
    TextBox6.Value = peterCount + 1 
End If 

If CheckBox5.Value = False Then 
    TextBox6.Value = "" 
End If 

End Sub 

peterCountPeterのすべての出現箇所の合計です。

+0

私はこのコードを試しました。 Set ws = ActiveWorksheet – mobility

+1

@mobilityをActiveSheetに変更すると、オブジェクトが必要になります。 – RGA

+0

ああ、編集しました。 –

関連する問題