ACCESS Count関数とDcount関数の違い

ACCESSにはレコード数を数える関数があります。
それがCount関数とDcount関数です。
これらはどちらも、レコードの件数を集計する関数ですが、使い方に違いがあります。
今回は、Count関数とDcount関数の違いをご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
目次
Count関数とDCount関数の違い
Count関数とDCount関数の違いは、非常に簡単にいうとCount関数はその時利用しているACCESSオブジェクト内のレコード数を数えるのに対して、DCount関数はACCESSのオブジェクト内であってもVBAであっても、特定のテーブルやクエリを指定してレコード数を数えることができる、という点です。
そのため、DCount関数の方が汎用性が高くなります。
違いをまとめると以下の通りです。

だったら、Count関数は使わずにDCount関数の身を使った方が良いのでは、と思うかもしれません。
しかし、Count関数を使った方が便利な場合も存在しますので、この後で詳しくご紹介しますね。
それぞれの関数の構文
Count関数とDCount関数がどのように違うか、まずは構文を見てみましょう。
Count関数の構文
Count関数は以下の構文で利用します。
Count ( 集計対象のフィールド名 )
引数にはフィールド名を指定するだけの簡単な関数ですが、逆に言うとそれ以外の指定ができません。
Count関数はフォームやレポートなどの特定のACCESSオブジェクト内で使用しますので、そのオブジェクト内の特定フィールドの件数を計算することしかできません。
DCount関数の構文
一方、DCount関数の構文は以下の通りです。
DCount ( フィールド名 , テーブル名 , 抽出条件 )
こちらは、フィールド名、テーブル名、抽出条件を指定して利用します。
つまり、自由に好きなテーブルやクエリを指定し、さらに一定の抽出条件で抽出したレコードの件数を計算することができます。
VBAでレコード件数を集計する際はDCount関数
では、実際の利用方法を見てみましょう。
まずはVBAでレコード件数を集計する場合です。
この場合は、Count関数は利用できず、DCount関数しか利用できません。
以下は、MST_振込先テーブルで適用中がTrueのレコードが1つでない場合に、メッセージを表示するプロシージャです。
If DCount("適用中", "MST_振込先", "適用中 = true and 削除 = false") <> 1 Then
MsgBox "振込先の指定が不適切です。", vbCritical + vbOKOnly, "振込先指定不適切"
End If
DCount関数を使ってMST_振込先テーブルで適用中フィールドがTrueかつ、削除フィールドがFalseのレコード数を計算しています。
その件数が<>1、つまり1でない場合に、MegBox関数でメッセージを表示します。
このように、VBAのプロシージャの中で指定したテーブルのレコード件数を、抽出条件を設定して計算する場合に利用できるのがDCount関数です。
フォームやレポートに表示された件数を集計するならCount関数
Count関数よりもDCount関数の方が汎用性が高いとこれまでご説明してきました。
そうなると、どこでCount関数を使うの?と疑問を持つ方も多いでしょう。
Count関数は、フォームやレポートに表示された件数を集計する際に利用すると便利です。
例えば、下記のように検索フォームで検索結果に表示された件数を計算する場合に利用します。

右上にある件数は、下段に表示されたレコードの合計件数を表示しています。
デザインビューで表示すると下記のようになります。

件数テキストボックスのコントロースソースには
=Count([数量])
と記述しています。
これにより、そのすぐ下にある数量テキストボックスのレコード件数を集計してくれます。
ここでCount関数が便利なのが、Count関数はフォームに表示されたレコード件数を自動的に集計してくれる点です。
このフォームは検索フォームですので検索条件によって表示されるレコード数が変わります。
検索結果が変わった際もCount関数は自動的に表示されたレコード件数のみを表示してくれるのです。
この機能をDCount関数で実装できないかというと、そんなことはありません。DCount関数でも適切な抽出条件を設定すれば、同じようにレコード件数の集計が可能です。
しかし、DCount関数で同じことをしようとすると、DCount関数の抽出条件にフォームに適用しているレコードの抽出条件を、検索を行うたびに設定する必要があります。
これはなかなか煩雑な処理ですし、自分で処理を作成する分エラーが発生しやすくなります。
一方でCount関数は何も考えずに基本形を記述するだけで自動計算してくれるので非常に便利です。
このようにフォームやレポートで抽出条件を適用されてレコード件数が変わる場合は、Count関数を利用すると便利でしょう。
以上、Count関数とDcount関数の違いをご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に100以上のACCESSデータベースを開発してきた私(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

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