ルアー 2番目の質問への回答。
フォーム
worksheetfunction.countif(rng , 1)
とrng
であなたのVBAでワークシート関数COUNTIFを使用しているまず、単一の範囲であることが必要です。
次へ]を、あなたは範囲を返すメソッドSheets("Sheet1").Range("A2:A645").SpecialCells(xlCellTypeVisible)
特にSpecialCells、あるを使用していますが、範囲は単一continguousブロックではありません。あなたがあなたのコードをデバッグ、およびこの範囲に時計を置く場合は代わりに、あなたは、プロパティエリアは、実際に2
Set rng = Sheets("Sheet1").Range("b2:b645").SpecialCells(xlCellTypeVisible)
Set areaCount = rng.Areas.Count
の数を持っているので、問題はあなたのCOUNTIFの方法ではなく、むしろことを確認しますCountIfに渡すRangeが異なる範囲で構成されている、つまり間違った型のものです。
このシナリオでは、CountIfを使用することができません。使用する必要があるのは、フィルタ処理されたデータセットで作業するためのワークシート関数です。
したがって、範囲のリストを取る関数Subtotalは、必要に応じてより適切なWorksheetFunctionであるようです。今度は、最初のパラメータに2番目または3番目の適切なAggregateメソッドを選択する必要があります。カウント数のみ:2またはカウントなし空白セル:3
便利には、Aggregate functionは使用できる集計のリストを提供します。
あなたは今も、集計関数SUMを使用することによって、あなたの目に見える範囲を合計する集計関数または小計機能を使用することができます。ここで一緒にこのすべてを置く9.
はあなたのために提案コードスニペット..です
Sub test31()
Dim rngToUse As Range
Dim visibleSum As Long
Dim countOfVisible As Long
Set rngToUse = Sheets("Sheet1").Range("b2:b645")
visibleSum = WorksheetFunction.Subtotal(9, rngToUse)
countOfVisible = WorksheetFunction.Subtotal(3, rngToUse)
Debug.Print "Sum Visible Cells only: " & visibleSum
Debug.Print "Count of Visible Cells : " & countOfVisible
If countOfVisible > 0 Then
Debug.Print "Ok"
End If
End Sub
もう少し有益だったと思います。
よろしく ガレス
あなたはどんな出力を期待していますか? 'COUNTIF(* range *、1)'はあなたのリストの中の1の数を探します。あなたはそれらを数えようとしていますか?または、表示されている数字の数を数えますか? – micstr
ルアーあなたが投稿する前にそれを検索する必要があります - チェックアウトhttp://stackoverflow.com/a/12009904/4606130 – micstr
ありがとう、あなたは答え、micstr。私は大きなデータでこのコードをループで使いたいと思っています。次回はより良い検索をします=) – Lure