【VBAリファレンス|実務向け】[実務のデータ集計を効率化!DCOUNTA関数で「複雑な条件」をカウントする方法]

スポンサーリンク

なぜデータベース関数が重要なのか

実務の現場では、単なる個数カウント(COUNTIFなど)では対応できない、「AまたはBという条件」や「複数の列をまたぐ複雑な条件」による集計が頻繁に発生します。Excelのデータベース関数(D関数シリーズ)は、条件をセル範囲に書き出すことで、複雑な抽出条件をスマートかつ正確に処理できるのが最大の特徴です。数式が長くなりすぎるのを防ぎ、メンテナンス性も高めることができます。

基礎知識:DCOUNTA関数とは

データベース関数は、指定したリスト(データベース)の中から、条件に一致するデータを抽出して集計する関数です。
その中でもDCOUNTA関数は、数値だけでなく、文字列が入っているセルも含めて「データが入っているセル」を数える関数です。
・データベース:集計対象となるリスト全体。
・フィールド:集計したい列(見出し)を指定。
・条件:集計するためのルールを記述したセル範囲。
この3つの引数を指定するだけで、複雑な条件設定が可能になります。

実装のポイント

実務で重要なのは、「条件範囲」の作り方です。
1. 条件の見出しを、元のデータリストと同じ名称でセルに入力します。
2. 条件の内容を、その下に記述します。

  • 横に並べると「AND条件(かつ)」
  • 縦に並べると「OR条件(または)」

として機能します。今回の「売上5万円以上」または「見込度◎」という条件も、縦に並べるだけで簡単に設定できます。

サンプルプログラム:VBAで条件を指定して結果を取得する

VBAからこの関数を利用すれば、ボタン一つで動的なレポート作成が可能です。以下のコードは、シート上の条件を読み取って結果をメッセージボックスに表示する例です。

Sub GetCountByDatabaseFunction()
‘ データベース関数の結果を取得する変数
Dim result As Variant
Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets(“Sheet1”)

‘ WorksheetFunctionオブジェクトを通じてDCOUNTAを呼び出す
‘ 引数:(データベース範囲, フィールド名, 条件範囲)
‘ ※ここではセル範囲を直接指定しています
result = Application.WorksheetFunction.DCountA( _
ws.Range(“B7:I16”), _
“訪問先名”, _
ws.Range(“C2:D4”))

‘ 結果を出力
MsgBox “条件に一致する件数は ” & result & ” 件です。”, vbInformation
End Sub

応用・注意点

1. フィールドの指定方法: フィールド引数は、列番号(例:1)や列見出しの文字列(例:”訪問先名”)で指定可能です。列の挿入・削除が多いシートでは、列見出しを直接指定するほうがエラーになりにくいです。
2. 条件範囲の空白に注意: 条件範囲を広めに取りすぎると、空白セルが「すべてのデータ」と見なされ、意図しない集計結果になることがあります。必ず使用する条件のみを囲むように範囲を指定してください。
3. データが更新されたら: データリストに新規行を追加した場合、データベース範囲(今回の例ではB7:I16)を「テーブル機能(Ctrl + T)」で管理しておくと、範囲が自動拡張されるため、VBAコードを修正する必要がなくなり非常に便利です。

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