DCount 関数

指定されたレコードのセット (定義域 (ドメイン: テーブル、クエリ、または SQL 式で定義されるレコードのセット。定義域集計関数は、特定のドメインまたはレコードのセットに関する統計的な情報を返します。)) に含まれるレコードの数を返します。DCount 関数は、Visual Basic for Applications (VBA) モジュール、マクロ (マクロ: 1 つまたは複数のアクションを自動的に実行させるための仕組み。マクロは Visual Basic for Applications プログラミング言語で記述します。)、クエリ式、または演算コントロール (演算コントロール: 演算結果を表示するコントロール。フォーム、レポート、またはデータ アクセス ページで使用します。演算結果は、式の値が変わるたびに再計算されます。)で使うことができます。

たとえば、DCount 関数をモジュール内で使用して、 [受注] テーブル内の特定の日の受注数を返すことができます。

構文

DCount(expr, domain [, criteria] )

DCount 関数の構文には、次の引数があります。

引数 説明
expr 必ず指定します。対象となるデータが含まれているフィールドを表す式です。テーブルまたはクエリ内のフィールドを表す文字列式 (文字列式: 1 つの文字列として評価される式。文字列を返す関数、バリアント型 (Variant) の文字列 (VarType 関数の文字列が 8) を返す関数、リテラル文字列、文字列定数、文字列変数、またはバリアント型 (Variant) 文字列などを組み合わせて構成できます。)か、またはそのフィールドのデータを使用して計算を実行する式を指定します。テーブルのフィールド名、フォームのコントロール、定数、または関数を指定できます。関数を指定する場合は、組み込み関数またはユーザー定義関数のいずれも指定できますが、他の定義域集計関数や SQL 集計関数は指定できません。
domain 必ず指定します。定義域を構成するレコードセットを識別する文字列式。テーブル名、またはパラメータを必要としないクエリのクエリ名を指定できます。
criteria 省略可能です。演算対象となるデータの範囲を指定する文字列式です。たとえば、criteria は、多くの場合、SQL 式の WHERE 句と同じ役割を果たします (ただし WHERE という語は使用しません)。引数 criteria を省略すると、定義域全体に対して expr が適用されます。criteria に含まれるフィールドが domain のフィールドでない場合、DCount 関数は Null (Null: 存在しないデータまたは未知のデータを表す値。フィールドに入力したり、式やクエリで使用したりできます。Visual Basic の Null キーワードは Null 値を表します。主キー フィールドなど、Null 値を格納できないフィールドもあります。) 値を返します。

解説

この関数は、レコードの特定の値ではなく、定義域に含まれるレコードの総数を求めるときに使います。引数 expr には、フィールドのデータを使った計算式を指定することもできますが、DCount 関数で計算されるのは、レコードの総数だけです。DCount 関数で expr の計算結果を利用することはできません。

抽出条件を指定してデータ範囲を制限する必要がある場合は、DCount 関数を演算コントロールで使用します。たとえば、愛知県に出荷する受注の数を表示するには、テキスト ボックスの "ControlSource/コントロールソース" プロパティを次のように設定します。

=DCount("[受注コード]", "受注", "[出荷先都道府県] = '愛知県'")
      

domain に含まれるすべてのレコード数を計算する場合は、Count 関数を使います。

表示ヒント

Count 関数は、クエリのレコード数を高速で計算できるように最適化されています。クエリ式では、DCount 関数の代わりに Count 関数を使用し、必要に応じて抽出条件を指定して特定の制限を適用するようにします。コード モジュール、マクロ、または演算コントロールで定義域に含まれるレコード数を計算する場合は DCount 関数を使ってください。

DCount 関数では、基になるレコード ソースにはない特定のフィールドのレコード数をフォームやレポートに表示することもできます。たとえば、[商品] テーブルに基づくフォームの演算コントロールに、[受注] テーブルから計算された受注数を表示できます。

expr がワイルドカード文字 (*) でない限り、expr で参照されるフィールド内にある Null 値が入ったレコードは計算対象になりません。ワイルドカード文字を使うと、Null フィールドを持つレコードも含め、すべてのレコードの総数を計算することができます。次に示すのは、[受注] テーブルに含まれるレコードの総数を計算する場合の例です。

intX = DCount("*", "受注")
      

指定した domain主キー (主キー: テーブル内の各レコードを一意に識別する値を持つフィールド (列)。主キーには Null 値を含めることができません。また、必ず一意のインデックスを持つ必要があります。主キーは、テーブルと他のテーブルの外部キーを関連付ける際に使用されます。)を含むテーブルである場合は、expr に主キーのフィールドを指定することでレコードの総数を計算することができます。これは、主キーのフィールドが Null 値になることはないためです。

引数 expr に複数のフィールドを指定する場合は、フィールド名を結合演算子のアンパサンド (&) または正符号 (+) で区切ります。アンパサンドで区切った場合は、指定したフィールドのいずれかにデータが入っているレコードがすべて数えられます。正符号で区切った場合は、指定したフィールドすべてにデータが入っているレコードのみが数えられます。次に示すのは、すべてのレコードでデータが入っている [出荷先名] フィールドと、データが一部しか入っていない [都道府県] フィールドを指定してこれらの記号を使った場合の例です。

intW = DCount("[出荷先名]", "受注")
intX = DCount("[都道府県]", "受注")
intY = DCount("[出荷先名] + [都道府県]", "受注")
intZ = DCount("[出荷先名] & [都道府県]", "受注")
      

 メモ    文字列を連結する場合は、できる限りアンパサンド (&) を使ってください。数値の足し算以外に正符号 (+) を使うのは、Null 値を意図的に式に含める場合を除き、できる限り避けてください。

domain のレコードを変更しても、保存されていない値は Dcount 関数の演算に反映されません。変更した値を使って計算する場合は、計算前に、[データ] タブの [レコード] の下にある [レコードの保存] をクリックするか、フォーカスを別のレコードに移動するか、または Update メソッドを使って変更を保存する必要があります。

使用例

 メモ   次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。VBA の使用方法の詳細については、[検索] の横にある一覧の [開発者用リファレンス] をクリックし、検索ボックスに検索する語句を入力してください。

次の例では、指定した日付以降の特定の都道府県への受注の数が返されます。定義域は [受注] テーブルです。

Public Function OrdersCount _
    (ByVal strCountryRegion As String, _
    ByVal dteShipDate As Date) As Integer

    OrdersCount = DCount("[出荷日]", "受注", _
        "[出荷先都道府県] = '" & strCountryRegion & _
        "' AND [出荷日] > #" & dteShipDate & "#")
End Function

      

この関数を呼び出すには、イミディエイト ウィンドウで次のコード行を使います。

:OrdersCount "愛知県", #1/1/96#
      
 
 
適用対象:
Access 2007