DMin、DMax 関数

適用先
Access for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

DMin 関数と DMax 関数を使用して、指定したレコード セット (ドメイン) の最小値と最大値を決定できます。 Visual Basic for Applications (VBA) モジュール、マクロ、クエリ式、または演算コントロールで DMin 関数と DMax 関数を使用します。

たとえば、レポートの演算コントロールで DMin 関数と DMax 関数を使用して、各顧客の最小値と最大値の注文金額を表示できます。 また、クエリ式で DMin 関数を使用して、最小割引額よりも大きな割引額の注文をすべて表示することもできます。

構文

DMin(expr, domain [, criteria] )

DMax(expr, domain [, criteria] )

DMin 関数と DMax 関数には次の引数があります。

引数 説明
expr 必須。 最小値または最大値を検索するフィールドを特定する式。 テーブルまたはクエリ内のフィールドを識別する文字列式、またはそのフィールド内のデータに対して計算を実行する式を指定することができます。 expr では、テーブル内のフィールド名、フォーム上のコントロール、定数、または関数の名前を含めることができます。 expr に関数が含まれている場合は、組み込み関数またはユーザー定義関数にすることができますが、別のドメイン集約関数または SQL 集約関数は含まれません。
domain 必須。 定義域を構成するレコード セットを識別する文字列式。 テーブル名の場合もあれば、パラメーターを必要としないクエリのクエリ名の場合もあります。
criteria 省略可能です。 DMin または DMax 関数が実行されるデータの範囲を制限するために使用される文字列式。 たとえば、 抽出条件 は、多くの場合、SQL 式の WHERE 句と等しく、WHERE という単語は含まれません。 条件を省略した場合、DMin 関数と DMax 関数は、ドメイン全体に対して expr を評価します。 条件に含まれるフィールドはドメイン内のフィールドでなければなりません。そうでない場合、DMin 関数と DMax 関数は Null を返します。

解説

DMin 関数と DMax 関数は、条件を満たす最小値と最大値を返します。 expr 関数が数値データを識別する場合、DMin 関数と DMax 関数は数値を返します。 expr が文字列データを識別する場合は、アルファベット順で最初または最後にある文字列を返します。

DMin 関数と DMax 関数は、expr によって参照されるフィールドの Null 値を無視します。 ただし、 条件 を満たすレコードがない場合、 またはドメイン にレコードが含まれていない場合、 DMin 関数と DMax 関数は Null を返します。

マクロ、モジュール、クエリ式、または演算コントロールで DMin 関数または DMax 関数を使用する場合でも、正しく評価されるように criteria 引数を慎重に作成する必要があります。

DMin 関数と DMax 関数を使用すると、クエリの [抽出条件] 行、クエリの集計フィールド式、または更新クエリの [更新先] 行で条件を指定できます。

集計クエリの集計フィールド式では、 DMin 関数、 DMax 関数、または Min 関数、 Max 関数を使用できます。 DMin 関数または DMax 関数を使用する場合、値が評価されてから、データがグループ化されます。 Min 関数または Max 関数を使用する場合、データがグループ化されてから、フィールド式の値が評価されます。

抽出条件を特定する必要があるときは、演算コントロールの DMin 関数または DMax 関数を使用して、関数が実行されるデータ範囲を制限します。 たとえば、カリフォルニアに出荷される配送コストの最高値を表示するには、テキスト ボックスの ControlSource プロパティに次の式を設定します。

=DMax("[Freight]", "Orders", "[ShipRegion] = 'CA'")

ドメイン内のすべてのレコードの最小値または最大値を求めるだけの場合は、Min 関数または Max 関数を使用します。

表示する必要があるフィールドが、基となるフォームのレコード ソースにない場合は、モジュールやマクロ、フォームの演算コントロールの DMin 関数または DMax 関数を使用できます。

ヒント

DMin または DMax 関数を使用して、外部テーブルのフィールドから最小値または最大値を検索できますが、両方のテーブルから必要なフィールドを含むクエリを作成し、そのクエリに基づいてフォームまたはレポートを作成する方が効率的な場合があります。

これらの関数を使用する場合、 ドメイン 内のレコードに対する未保存の変更は含まれません。 変更した値に基づいて DMax 関数または DMin 関数を実行する場合は、[データ] タブの [レコード] にある [レコードの保存] をクリックするか、別のレコードにフォーカスを移動するか、または Update メソッドを使って、最初に変更を保存する必要があります。

次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の使用方法の詳細については、[検索] の横にあるドロップダウン リストで [開発者用リファレンス] を選び、検索ボックスに検索する用語を入力します。

次の例では、英国に出荷される注文に対し、"船荷" フィールドの値の最小値と最高値を返します。 定義域は Orders テーブルです。 条件引数は、結果のレコード セットを ShipCountryRegion が UK と等しいレコード セットに制限します。


Dim curX As Currency
Dim curY As Currency
curX = DMin("[Freight]", "Orders", _
    "[ShipCountryRegion] = 'UK'")
curY = DMax("[Freight]", "Orders", _
    "[ShipCountryRegion] = 'UK'")

次の例では、 抽出条件 の引数に [受注日] というテキスト ボックスの現在の値が含まれています。 テキスト ボックスは、Orders テーブルの OrderDate フィールドにバインドされています。 コントロールへの参照は、文字列を表す二重引用符 (") で囲まれていないことに注意してください。 これにより、 DMax 関数が呼び出されるたびに、コントロールから現在の値を取得します。


Dim curX As Currency
curX = DMax("[Freight]", "Orders", "[OrderDate] = #" _
    & Forms!Orders!OrderDate & "#")

次の例では、抽出条件式に変数 dteOrderDate が含まれています。 番号記号 (#) は文字列式に含まれているので、文字列が連結されるときは、日付を囲みます。


Dim dteOrderDate As Date
Dim curX As Currency
dteOrderDate = #03/30/2000#
curX = DMin("[Freight]", "Orders", _
    "[OrderDate] = #" & dteOrderDate & "#")