【VBAリファレンス|実務向け】[実務で差がつく!COUNTIF関数とVBAによる効率的な集計術]

スポンサーリンク

導入:なぜ今、COUNTIFの「活用」が必要なのか

実務の現場では、日々蓄積される大量のデータから「特定の条件に一致する件数」を抽出する作業が欠かせません。関数を直接セルに打ち込むのも一つの手ですが、データ量が増えたり、毎月同じ集計作業を繰り返したりする場合、手作業ではミスが発生しやすく非効率です。

今回は、COUNTIF関数の基本をしっかり押さえた上で、それをVBAで自動化するための考え方を解説します。この技術を習得すれば、ボタン一つで月別集計表が完成するような「ミスゼロの業務自動化」への第一歩が踏み出せます。

基礎知識:COUNTIF関数の仕組み

COUNTIF関数は「指定した範囲の中で、条件に一致するセルがいくつあるか」をカウントする関数です。
構文:=COUNTIF(範囲, 検索条件)

実務で特に重要なのが絶対参照の概念です。範囲を固定(例:$G$5:$G$12)しておかないと、数式をコピーした際に範囲がずれてしまい、正しい集計ができなくなります。VBAでコードを書く際も、この「範囲を固定して検索条件を変化させる」というロジックを再現することが重要です。

実装/解決策:VBAでCOUNTIFを操る

VBAでCOUNTIFを利用する場合、WorksheetFunctionオブジェクトを使用します。これにより、Excelの強力な関数機能をVBAのプログラム内に組み込むことができます。

ポイントは「検索条件」を動的に変化させることです。例えば、月ごとの集計をする場合、ループ処理(For Nextなど)を使って、検索条件となる月(5, 6, 7…)を順番に入れ替えて計算させます。

サンプルプログラム:月別集計を自動化するマクロ

以下のコードは、G列にある「月数」を元に、J列にある「対象月」の件数をカウントし、L列に結果を出力する例です。

Sub 自動集計マクロ()
Dim i As Long
Dim targetRange As Range
Dim criteriaValue As Variant

‘ 集計範囲をセット(G5からG12まで)
Set targetRange = Range(“G5:G12”)

‘ J5からJ10にある月数リストに対してループ処理
For i = 5 To 10
‘ 検索条件となる月を取得
criteriaValue = Cells(i, “J”).Value

‘ COUNTIFを使って集計し、L列に結果を書き込む
‘ Application.WorksheetFunctionを使うことでVBAから関数を呼び出せる
Cells(i, “L”).Value = Application.WorksheetFunction.CountIf(targetRange, criteriaValue)
Next i

MsgBox “月別集計が完了しました!”
End Sub

応用・注意点:現場で陥りやすい罠

1. 検索条件のデータ型に注意
セルに入力されている値が「数値」なのか「文字列」なのかを必ず確認してください。例えば、セルに「5」と入力されていても、データ形式が「文字列の5」であれば、数値の5とは別物として扱われ、カウントが0件になることがあります。

2. 範囲の可変対応
今回は固定範囲(G5:G12)としましたが、実務ではデータ数が増減することが一般的です。最終行を自動取得するコード(Cells(Rows.Count, “G”).End(xlUp).Row)と組み合わせることで、データ量が変わっても自動で範囲を調整する「堅牢なマクロ」に進化させることができます。

まずはこのサンプルを動かしてみて、集計のロジックを自分のものにしてください。ここから一歩進んで、次は「期間指定」の集計に挑戦してみましょう。

タイトルとURLをコピーしました