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 関数が実行されるデータの範囲を制限するために使用される文字列式。 たとえば、 条件 は、多くの場合、WHERE という単語を含まない SQL 式の 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 関数を使用すると、クエリの [抽出条件] 行、クエリの計算フィールド式、または更新クエリの [Update To] 行で条件を指定できます。

集計クエリの計算フィールド式では、 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 テーブルです。 criteria 引数は、結果のレコード セットを ShipCountryRegion が UK と等しいレコードに制限します。


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

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


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

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


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