DCount 関数を使用して、指定したレコード セット (ドメイン) 内のレコード数を確認できます。 DCount関数は、Visual Basic for Applications (VBA) モジュール、マクロ、クエリ式、または演算コントロールで使用します。
たとえば、モジュールで 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'")
制限を指定せずに、単に domain 内のすべてのレコードをカウントするには、Count 関数を使用します。
ヒント Count 関数は、クエリ内のレコードが高速にカウントされるように最適化されています。 クエリ式で DCount 関数ではなく Count 関数を使用し、省略可能な criteria を使用して結果の制限を設定します。 コード モジュールまたはマクロのドメイン、または演算コントロール内にあるレコードをカウントする必要がある場合、DCount 関数を使用します。
DCount 関数を使用して、フォームまたはレコードの基になっているレコード ソース内に含まれていない特定のフィールドを含むレコード数をカウントできます。 たとえば、Products テーブルに基づくフォームの演算コントロールで、Orders テーブルの注文数を表示できます。
DCount 関数では、expr がアスタリスク (*) のワイルドカード文字でない場合、expr から参照されているフィールドに Null 値を含むレコードはカウントされません。 アスタリスクを使用すると、DCount 関数は、Null フィールドを含むレコードを含めて、レコードの合計数を計算します。 次の例は、Orders テーブルのレコード数を計算します。
intX = DCount("*", "Orders")
domain が主キーのあるテーブルの場合、主キー フィールドに 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 を伝達したい場合を除き、数値の加算以外の用途で加算演算子を使わないでください。
この関数を使用する場合、domain 内のレコードに対する未保存の変更は含まれません。 変更した値に基づいて DCount 関数を実行する場合は、[データ] タブの [レコード] にある [レコードの保存] をクリックして、別のレコードへフォーカスを移動するか、または Update メソッドを使用して、最初に変更を保存する必要があります。
クエリの例
式 |
結果 |
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#