【マクロVBA】カウントをCOUNT・COUNTIF・COUNTIFSで求める!複数条件にも対応

計算・関数

エクセルの関数にはカウントするCOUNT/COUNTIF/COUNTIFS関数が存在します。
この関数は、なんとマクロVBAでも使用することができます。

使用方法は関数と同じです。
関数は下記リンクを参照してください。

カウントはよく使用する機能ですよね。
ぜひ身に着けて活用してみてください。

それでは見ていきましょう。




■COUNT関数で指定範囲の平均を求める

・プログラムの仕組み

Application.WorksheetFunction.Count(カウントしたい範囲)

・使用方法


では下図の例をもとに進めていきましょう

出勤状態をC列に入力しているシートですね。
出勤すると出勤時間を打ち込んでいます。
今回はその出勤日数を「F3」に入力してみましょう。

ではプログラムを組んでみましょう。
カウントを求めたい範囲は「C3からC12」ですので下記のようになります。

Sub カウント()

Cells(3, 6) = Application.WorksheetFunction.Count(Range(“C3:C12“))

End Sub

それでは実行した結果を見てみましょう。

カウントすることができました。数値が「6個」あるので「6」が出力されます。
ちなみにCellsで表示するとこのようになります。

Cells(3, 6) = Application.WorksheetFunction.Count(Range(Cells(3, 3), Cells(12, 3)))

さらにRange変数を使用してもカウントすることは可能です。

Sub カウント()

Dim A As Range

Set A = Range(“C3:C12“)

Cells(3, 6) = Application.WorksheetFunction.Count(A)

End Sub

■CountIF関数で条件に当てはまるカウントを求める

・プログラムの仕組み

Application.WorksheetFunction.CountIf(条件の範囲,絞り込む条件)

・使用方法

では下図の例をもとに進めていきましょう

先ほどのシートの勤務時間に「10」が加わりました。
今回は「10時間勤務の日数」をカウントしてみましょう。

条件の範囲は「C3からC12」になります。
絞り込む条件は「10」ですね。

プログラムを組むとこのようになります。

Sub 条件に当てはまるカウント()

Cells(3, 6) = Application.WorksheetFunction.CountIf(Range(“C3:C12“), “10“)

End Sub

それでは実行してみましょう。

機能していますね。
こちらもCellsで表してみましょう。

Cells(3, 6) = Application.WorksheetFunction.CountIf(Range(Cells(3, 3), Cells(12, 3)), “10“)

Range変数を使用するとこのようになります。

Sub 条件に当てはまるカウント()

Dim A As Range

Set A = Range(“C3:C12“)

Cells(3, 6) = Application.WorksheetFunction.CountIf(A, “10“)

End Sub

■CountIFS関数で条件に当てはまるカウントを求める

・プログラムの仕組み

Application.WorksheetFunction.CountIfs(絞り込む範囲1,絞り込む条件1,絞り込む範囲2,絞り込む条件2….)

・使用方法


では下図の例をもとに進めていきましょう

今回はさらに「勤務内容」も追加しました。
では実際にプログラムを組んでみましょう。

今回は条件を「勤務時間:8」「勤務内容:通常」としてみましょう。

 

絞り込む条件の範囲は1つ目は勤務時間なので「C3からC12」です。
絞り込む条件の1つ目は「8」ですね。
絞り込む条件の範囲は2つ目は勤務内容なので「D3からD12」です。
絞り込む条件の2つ目は「通常」ですね。

それでは作成したプログラムを見てみましょう。

Sub 複数条件に当てはまるカウント()

Cells(9, 7) = Application.WorksheetFunction.CountIfs(Range(“C3:C12“), “8“, Range(“D3:D12“), “通常“)

End Sub

実行するとこのようになります。

「勤務時間が8」「勤務内容が通常」に当てはまるデータの数、「3」が出力されてますね。

ではCellsでもプログラムを見てみましょう。

Cells(9, 7) = Application.WorksheetFunction.CountIfs(Range(Cells(3, 3), Cells(12, 3)), “8“, Range(Cells(3, 4), Cells(12, 4)), “通常“)

長くなりますが、変数を使う場合はこちらを活用してみましょう。

Range変数を使用するとこのようになります。

Sub 複数条件に当てはまるカウント()

Dim A As Range, B As Range

Set A = Range(“C3:C12“)
Set B = Range(“D3:D12“)

Cells(9, 7) = Application.WorksheetFunction.CountIfs(A, “8“, B, “通常“)

End Sub

■練習問題

練習問題も別の記事でまとめているので是非参考にしてみてください!

⬛︎公式の説明

わかりやすいように説明したため公式と使用する語句が異なりますが
マイクロソフト公式の説明については下記のリンクを参照してください。☟

WorksheetFunction オブジェクト (Excel) | Microsoft Learn

■まとめ

いかがだったでしょうか。

マクロVBAでもカウント機能を使用することができました。

ぜひ活用してみてください。

 

次回はVBAでMAX/MIN関数を使用する方法についてまとめています。記事はこちらから☟

【マクロVBA知識 21】データの最大値・最小値をMAX.MINを使用して求める ► 独学エクセル塾 (dokugakuexcel.com)

それでは次回の記事でお会いしましょう。