
ACCESSのテーブルの中から、条件に合ったレコードの件数を計算したい時がありますよね。
こういった時に役に立つのがDCount関数です。
EXCELでも同じ関数がありますが、ACCESSでは構文が少し異なります。
レコード数をカウントする際に非常に便利なこのDcount関数の使い方を説明しましょう。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
構文
Dcount関数は以下の構文で利用します。
DCount ( フィールド , テーブル , 抽出条件 )
引数は、レコード数を計算する対象のフィールド名、そのフィールドが含まれるテーブル名、レコードの抽出条件の3つです。
比較的わかりやすい関数ですね。
Dcount関数の利用例
今回はサンプルとして以下の売上情報が入力された「TRN_売上」テーブルを準備しました。
こちらのテーブルに対して、DCount関数で様々な条件でレコード件数を集計します。

それでは、いくつかの例をご提示します。
1.レコードの総件数を調べる
単純にtest_売上テーブルのレコード件数を調べたい場合は以下のように記述します。
DCount ("売上ID","TRN_売上")
今回の場合、結果は26になります。
便宜的に売上ID(主キー)を集計対象フィールドにしていますが、レコード件数を調べたいだけであれば、全レコードに必ず値が入っているフィールドであればどのフィールドを指定しても構いません。ただ、主キーは必ず値が入っているフィールドですので全レコードの件数を調べたい場合には無難と言えます。
もしくは、
DCount ("*","TRN_売上")
という記述方法でもレコードの総数を調べることができます。
2.特定のフィールドに値が入っている件数を調べる
売上日フィールドの件数を調べたい場合は以下のようになります。
DCount ("売上日","TRN_売上")
1つ目の引数のフィールド名に「売上日」を指定しました。
今回のサンプルでは売上日に値が入っていないレコードが3つあるため、結果は全レコードの26件から3件を引いて23になります。
3.特定の条件に合致する件数を調べる
ここから少し実践的になります。
特定の条件に合致するレコードの件数を調べる場合として、小計が100,000円以上の件数を調べます。
DCount ("売上ID","TRN_売上","小計 >= 100000")
1つ目の引数の集計対象フィールドは主キーである売上ID(これも件数が正しく測れればどのフィールドでも構いません)にしています。
3つ目の引数の抽出条件に小計>= 100000と設定しています。
今回の場合、結果は3になります。
4.テキストが部分一致する件数を調べる
上記は数値での抽出条件でしたが、テキストの部分一致の抽出条件でレコード件数を調べることも可能です。
しかし、今回サンプルで準備したTRN_売上にはテキスト型のフィールドがありません。
そこで、TRN_売上と顧客IDでリレーションするMST_顧客テーブルを準備しました。

TRN_売上とMST_顧客をリレーションさせた売上クエリを作成します。

データシートビューで見ると以下の結果になります。

売上クエリに「顧客名」を追加しましたので、このフィールドを使ってレコード件数を調査しましょう。
例えば、顧客名に「ブルー」を含む件数を調べるのであれば以下のようになります。
DCount ("売上ID","売上クエリ","顧客名 like '*ブルー*'")
今回の場合、結果は11になります。
ここでは、あいまい抽出をするために「Like」演算子を使用し、「*」を使うことで「ブルーを含む」を指定しています。
また、「*」の前後に「’(シングルクオーテーション)」を入れていますが、こちらは文字列型を示す「”(ダブルクオーテーション)」の内側で更に文字列型を指定するために使用します。
このシングルクォーテーションの利用方法については以下の記事を参照ください。

フォームでの使用例
それでは実際に、ACCESSのフォームでDCount関数を使用する例を見てみましょう。
フォームをデザインビューで作成します。

1.抽出条件を直接指定
まずはテキストボックスでDCount関数の抽出条件を直接指定するケースです
フォームに、非連結のテキストボックスを配置しましょう。
ACCESSメニューからフォームデザインを選択し、テキストボックスを配置します。

配置したテキストボックスにDcount関数で集計したのレコード件数が表示されるように設定します。
作成したテキストボックスを選択し、プロパティシートの「データ」タブの「コントロールソース」にDcount関数を記述します。

フォームのプロパティを右側に表示していますが、コントロールソースには下記のように記載しています。
=DCount("売上ID","売上クエリ","顧客名 like '*ブルー*'")
売上クエリから顧客名に「ブルー」を含むレコードの売上ID数を集計する式です。
では、フォームビューで結果を見てみましょう。

このように、DCountの集計結果がフォームに表示されました。
2.抽出条件をフォームで指定
先ほどの例では、DCountの抽出条件を直接コントロースソースに記載しました。
“顧客名 like ‘*ブルー*'”の部分です。
しかし、これでは条件を変更したい時にいちいちコントロースソースを変更しなければいけないので面倒です。
そこで、同じフォームの別のコントロールを使って抽出条件を変更する設定をしてみましょう。
フォームのデザインビューで下記のように設定します。

今度は、入力用コントロール「入力」を追加しました。
そして、結果表示用コントロール「条件指定」のコントロールソースには以下のように記述します。
=DCount("売上ID","売上クエリ","顧客名 like '*" & [入力] & "*'")
売上クエリから、「入力」コントロールの値と一部が一致する「顧客名」を持つ売上IDの件数を集計するようにしています。
ではフォームビューで動作を試してみましょう。
まずは入力欄に先ほどと同じように「ブルー」と入力します。

結果欄に正しく11と表示されました。
入力欄の値を変えると、

このように結果も連動して変えることができます。
こういうのを作れるようになるとACCESSの面白さが分かってきますよね。
DCount関数とCount関数の違い
ACCESSにはレコード数を計算する関数として、DCount関数ともうひとつ、Count関数があります。
基本的にはDCount関数の方が汎用性が高く使いやすいのですが、検索フォーム等でレコードの抽出結果に応じてレコード件数をリアルタイムに集計する際はCount関数の方が便利です。
詳しくは以下の記事に記載していますのでご参照ください。

以上、ACCESSのDCount関数でレコード数を集計する方法をご紹介しました。
この記事の内容を実際に試したい方へ
本記事の内容を実際にACCESSを動かしながら確認したいという方向けに、記事で紹介した機能が実装されたサンプルファイルを販売しています。記事内で解説しているテーブル、クエリ、フォーム、レポート、VBAのプロシージャなどをそのまま動く形で実装しました。
学習用としてはもちろん、加工して自社業務に利用することも可能です。
ご興味のある方は以下からご覧ください。

ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に300以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。
