忍者ブログ
バイオインフォマティックス技術者試験、情報処理試験など、IT系の試験を基礎から勉強します。また、Javaなどプログラミングを勉強します。

【VBAスタンダード対策】WorksheetFunction.CountIf による条件付きデータ件数のカウントを攻略!

指定した条件に一致するセルの個数を数えるExcel関数 COUNTIF。VBAの WorksheetFunction オブジェクト を経由して呼び出す際の正しい構文と引数の指定方法をマスターしましょう。

1. 問題:WorksheetFunction オブジェクトを用いた COUNTIF 関数の実行

【 問題 】 下記のコードは、Sheet1 のセル範囲 A2:A100 の中から、セル B1 に入力されている検索条件に一致するセルの個数をカウントし、変数 cnt に格納してメッセージボックスに表示しようとしています。空欄 ( A ) に入る正しい記述はどれでしょうか?

Sub CountMatchingRows()
    Dim cnt As Long
    Dim rng As Range
    Dim criteriaCell As Range

    Set rng = Worksheets("Sheet1").Range("A2:A100")
    Set criteriaCell = Worksheets("Sheet1").Range("B1")

    cnt = ( A )

    MsgBox "該当件数: " & cnt & " 件"
End Sub

① WorksheetFunction.CountIf(rng, criteriaCell)
② Application.WorksheetFunction.CountIf(rng, criteriaCell)
③ Application.WorksheetFunction.CountIf(rng.Address, criteriaCell.Value)
④ WorksheetFunction.Count(rng, criteriaCell)

2. 正解:WorksheetFunction.CountIf の呼び出しに関する正解

正解: ② Application.WorksheetFunction.CountIf(rng, criteriaCell)

3. 解説:WorksheetFunction.CountIf の構文と引数指定のルール

VBAで条件付きカウントを行う際は、Application.WorksheetFunction.CountIf(範囲, 検索条件) の形式で呼び出します。

[ CountIf 関数の構造と引数指定のポイント ]

1. 階層構造の完全指定(Application.WorksheetFunction)
VBAの標準的な記法として、最上位の Application オブジェクトから明示的に指定した Application.WorksheetFunction.CountIf(...) が最も厳密かつ推奨される呼び出し方法です。

2. 検索対象の範囲は Range オブジェクトで渡す!
第1引数(カウント対象範囲)には、文字列アドレス("A2:A100")ではなく、Range オブジェクト(rngを渡す必要があります。
・③の rng.Address のように文字列を渡すと型が一致せずエラーとなります。

3. COUNT 関数との違い(④のひっかけ)
COUNT:数値が含まれるセルの個数を数える(条件指定不可)
COUNTIF:指定した条件を満たすセルの個数を数える
そのため、条件セル(criteriaCell)を指定して数える場合は CountIf を使う必要があります。

ここが試験に出る!: スタンダード試験では、CountIfSumIf などのワークシート関数を呼び出す際、「第1引数にセル範囲(Rangeオブジェクト)が正しくセットされているか」「Application.WorksheetFunction のオブジェクト階層が正しいか」 が狙われます。


4. まとめ

「条件に一致する件数を数えるなら Application.WorksheetFunction.CountIf(範囲, 条件) 」。この構文をマスターしておけば、Forループで1行ずつ判定・カウントする重い処理を書かずに、1行のコードで高速にデータ件数を取得できるようになります。


PR