DCount 関数を使用して、指定したレコードのセット (ドメイン) 内にあるレコードの数を決定できます。 Visual Basic for Applications (VBA) モジュール、マクロ、クエリ式、または計算コントロールで DCount 関数を使用します。
たとえば、モジュールで DCount 関数を使用して、特定の日付の発注に関連する Orders テーブルのレコード数を返します。
構文
DCount(expr, domain* [, criteria] )
DCount 関数構文の引数は次のとおりです。
| 引数 | 説明 |
|---|---|
| expr | 必須。 レコード数をカウントするフィールドを識別する式。 テーブルまたはクエリ内のフィールドを識別する文字列式、またはそのフィールド内のデータに対して計算を実行する式を指定できます。 expr では、テーブル内のフィールドの名前、フォーム上のコントロール、定数、または関数を含めることができます。 expr に関数が含まれている場合は、組み込み関数またはユーザー定義関数を使用できますが、別のドメイン集計関数や SQL 集計関数は使用できません。 |
| domain | 必須。 定義域を構成するレコード セットを識別する文字列式。 テーブル名の場合もあれば、パラメーターを必要としないクエリのクエリ名の場合もあります。 |
| criteria | 省略可能です。 DCount 関数を実行するデータの範囲を制限するために使用される文字列式。 たとえば、 条件 は、多くの場合、WHERE という単語を含まない SQL 式の WHERE 句と同じです。 条件を省略すると、DCount 関数はドメイン全体に対して expr を評価します。 条件に含まれるフィールドは、ドメイン内のフィールドである必要もあります。それ以外の場合、DCount 関数は Null を返します。 |
解説
DCount 関数を使用して、具体的な値を把握する必要のないドメイン内のレコード数をカウントします。 expr 引数はフィールドに対して計算を実行できますが、DCount 関数は単にレコードの数を集計します。 expr によって実行される計算の値は使用できません。
関数を実行する日付の範囲を制限する抽出条件を指定する必要がある場合、演算コントロールで DCount 関数を使用します。 たとえば、カリフォルニア州に出荷する注文の数を表示するには、テキスト ボックスの ControlSource プロパティを次の式に設定します。
=DCount("[OrderID]", "Orders", "[ShipRegion] = 'CA'")
制限を指定せずに ドメイン 内のすべてのレコードをカウントするだけの場合は、 Count 関数を使用します。
ヒント Count 関数は、クエリ内のレコードのカウントを高速化するように最適化されています。 クエリ式で DCount 関数ではなく Count 関数を使用し、省略可能な criteria を使用して結果の制限を設定します。 コード モジュールまたはマクロのドメイン、または演算コントロール内にあるレコードをカウントする必要がある場合、DCount 関数を使用します。
DCount 関数を使用して、フォームまたはレコードの基になっているレコード ソース内に含まれていない特定のフィールドを含むレコード数をカウントできます。 たとえば、Products テーブルに基づくフォームの演算コントロールで、Orders テーブルの注文数を表示できます。
dCount 関数は、expr がアスタリスク (*) ワイルドカード文字でない限り、expr によって参照されるフィールドに Null 値を含むレコードをカウントしません。 アスタリスクを使用すると、DCount 関数は、Null フィールドを含むレコードを含めて、レコードの合計数を計算します。 次の例は、Orders テーブルのレコード数を計算します。
intX = DCount("*", "Orders")
ドメインが主キーを持つテーブルの場合は、主キー フィールドに null が存在しないため、expr を主キー フィールドに設定することで、レコードの合計数をカウントすることもできます。
expr が複数のフィールドを識別する場合は、アンパサンド (&) または加算演算子 (+) を使用してフィールド名を連結演算子で区切ります。 アンパサンドを使用してフィールド間を区切る場合、DCount 関数は、一覧のいずれかのフィールドのデータを含むレコード数を返します。 加算演算子を使用する場合、DCount 関数は、一覧のすべてのフィールドのデータを含むレコード数を返します。 次の例では、すべてのレコード内のデータを含むフィールド (ShipName) と、データを含まないフィールド (ShipRegion) で使用する場合の各演算子の効果を示しています。
intW = DCount("[ShipName]", "Orders")
intX = DCount("[ShipRegion]", "Orders")
intY = DCount("[ShipName] + [ShipRegion]", "Orders")
intZ = DCount("[ShipName] & [ShipRegion]", "Orders")
注
文字列を連結する場合、アンパサンドが推奨される演算子です。 式で明示的に Nulls を伝達したい場合を除き、数値の加算以外の用途で加算演算子を使わないでください。
この関数を使用する場合、 ドメイン 内のレコードに対する未保存の変更は含まれません。 変更された値に基づいて DCount 関数を使用する場合は、まず、[データ] タブの [レコード] の下にある [レコードの保存] をクリックするか、フォーカスを別のレコードに移動するか、Update メソッドを使用して変更を保存する必要があります。
クエリの例
| Expression | 結果 |
|---|---|
| SELECT DCount("ProductID","ProductSales","Discount=0") AS Expr1 FROM ProductSales GROUP BY DCount("ProductID","ProductSales","Discount=0"); | "割引" 値が "0" であるテーブル "ProductSales" のフィールド "ProductID" の値の数を返します。 |
| SELECT DCount("ProductID","ProductSales","DateofSale=Date()-1") AS YesterdaySale FROM ProductSales GROUP BY DCount("ProductID","ProductSales","DateofSale=Date()-1"); | "DateofSale" が現在の日付の前日であるテーブル "ProductSales" のフィールド "ProductID" の値の数を返します。 |
VBA の例
注
次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の使用方法の詳細については、[検索] の横にあるドロップダウン リストで [開発者用リファレンス] を選び、検索ボックスに検索する用語を入力します。
次の関数は、指定した出荷日の後に指定した国/地域に出荷された注文数を返します。 domain は、[受注] テーブルです。
Public Function OrdersCount _
(ByVal strCountryRegion As String, _
ByVal dteShipDate As Date) As Integer
OrdersCount = DCount("[ShippedDate]", "Orders", _
"[ShipCountryRegion] = '" & strCountryRegion & _
"' AND [ShippedDate] > #" & dteShipDate & "#")
End Function
関数を呼び出すには、イミディエイト ウィンドウ内の次のコード行を使用します。
:OrdersCount "UK", #1/1/96#