皆さん、こんにちは。Excel VBA講師です。前回に引き続き、COUNTIF関数を実務でどう使いこなすか、その核心に迫ります。
今回は「月別や期間別の件数をカウントする」という、実務で頻出のテーマです。参考資料では関数を組み合わせて手動で行う方法が紹介されていますが、ベテランの我々はここから一歩進んで「VBAで自動化するための設計思想」を学びましょう。
MONTH関数とCOUNTIFの連携をVBAで再現する
セル上でMONTH関数を使って「5」という数値を取り出し、それをCOUNTIFの条件式にするという手順は、VBAでいえば「配列への格納」や「ループ処理」の考え方の基礎になります。
例えば、大量のデータから月別の件数を抽出する場合、毎回シート上に作業列(MONTH関数を入れる列)を作るのは、ファイルが重くなる原因にもなります。VBAであれば、以下のようなアプローチでスマートに処理できます。
実務で差がつくVBAのコード設計例
セルに関数を埋め込むのではなく、VBA側で日付を判定してカウントするロジックを組むと、柔軟性が劇的に向上します。
【考え方のヒント】
1. 対象範囲をループで回す(For Eachなど)。
2. DatePart関数を使い、その日付が何月かを判定する。
3. 判定結果を「連想配列(Dictionary)」のキーとして登録し、値をカウントアップする。
こうすることで、「書式なしコピー」といった手作業の手間を一切排除し、ボタン一つで集計表を完成させることができます。
オートフィル操作をVBAで制御するなら
もしVBAで関数をセルに入力させる処理を書くなら、以下の点に注意してください。
.AutoFill Destination:=Range(“G5:G12”)
このように記述することで、コピー作業を自動化できます。参考本文にもあるように、書式を崩したくない場合は、数式を直接セル範囲に一括入力する(Range(“G5:G12”).Formula = “=MONTH(F5)”)手法をおすすめします。VBAなら、オートフィルを使わずに一瞬で全セルに数式を埋め込むことが可能です。
実務においては「関数をどう使うか」だけでなく、「その作業をVBAでどう置き換えるのが最適か」という視点を常に持っておきましょう。次回は、さらに一歩進んだCOUNTIFの活用術について解説します。
