この記事ではExcelのDMAX関数について解説します。DMAX関数は「データベース形式の表から、指定した条件に一致するレコードの中で最大値を返す」関数です。売上表から特定の店舗・期間の最高売上を抽出したり、成績表から特定クラスの最高点を取り出したりと、実務で重宝する関数のひとつです。
この記事は次のような方におすすめです。
- 条件を満たす数値データの最大値を求めたい
- DMAX関数とMAXIFS関数の違いを知りたい
- 他のデータベース関数(DSUM・DAVERAGE・DMIN・DCOUNT)との使い分けを整理したい
- 検索条件(criteria)の書き方が分からない
DMAX関数とは
読み方と機能
読み方は「ディーマックス」関数です。頭文字の「D」はデータベース(Database)を表しており、Excelの「データベース関数」グループに属します。DMAX関数は、データベース形式の表(1行目が見出し、2行目以降がレコード)の中から、指定したフィールド(列)を検索し、条件を満たすレコードの最大値を返します。
DMAX関数が力を発揮する場面
次のようなシーンで特に便利です。
- 「東京支店かつ2025年度」の最大売上を一発で取り出したい
- 「営業部」の中での最高年齢・最年少を調べたい
- 複数条件(AND・OR)を柔軟に切り替えながら集計したい
単純な最大値ならMAX関数、1条件・複数条件付きならMAXIFS関数でも対応できますが、「条件が頻繁に変わる」「複雑なAND/OR条件を扱う」ケースではDMAX関数の柔軟性が光ります。
DMAX関数の構文
=DMAX(データベース, フィールド, 検索条件)
引数は3つあり、すべて必須です。
引数1:データベース
データベース形式の表全体を、見出し行(1行目)を含めて指定します。例えば表がB2:E10にあり、B2:E2が見出しなら、B2:E10を指定します。見出しを含めないとエラーまたは意図しない結果になるので注意しましょう。
引数2:フィールド
最大値を求めたい列(フィールド)を指定します。指定方法は次の3通りがあります。
- 見出し文字列をダブルクォーテーションで囲む:
"売上" - データベースの左から何列目かを数字で指定:
3 - 見出しセルを直接参照:
D2
実務では見出し文字列で指定する方法がおすすめです。列順が変わっても式が壊れにくく、後から読み返したときに意図が伝わりやすいためです。
引数3:検索条件
検索条件(criteria)は、見出し行と条件行の2行以上で構成される別表として用意します。例えば「支店が東京」という条件なら、次のように書きます。
| 支店 |
|---|
| 東京 |
この2セル(F1:F2)を検索条件として指定します。条件を書き換えるだけで集計結果が変わるため、ダッシュボード的に使えるのがデータベース関数の最大の強みです。
検索条件(criteria)の書き方パターン
DMAX関数の要となるのが検索条件の書き方です。代表的な4パターンを押さえておきましょう。
パターン1:単一条件
| 部署 |
|---|
| 営業部 |
「部署が営業部」のレコードのみを対象にします。
パターン2:AND条件(同じ行に複数列を並べる)
| 部署 | 年度 |
|---|---|
| 営業部 | 2025 |
「部署が営業部 かつ 年度が2025」のように、同じ行に条件を並べるとANDになります。
パターン3:OR条件(条件を別の行に書く)
| 部署 |
|---|
| 営業部 |
| 広報部 |
「部署が営業部 または 広報部」のように、条件を別の行に書くとORになります。
パターン4:比較演算子
| 売上 |
|---|
| >=1000000 |
「売上が100万円以上」のように、>=や<などの比較演算子を使うこともできます。数値フィールドに対する条件はこの書き方が基本です。
ワイルドカードを使った部分一致条件
「支店名に"東"を含む」「担当者名が"田"から始まる」のように、文字の一部だけで絞り込みたいケースは実務でよくあります。DMAX関数の検索条件(criteria)では、ワイルドカードを使った部分一致が可能です。
使えるワイルドカードは2種類です。
*(アスタリスク):0文字以上の任意の文字列?(疑問符):任意の1文字
例えば「支店名に"東"を含む」レコードを対象にしたいなら、検索条件を次のように書きます。
| 支店 |
|---|
| 東 |
東 は「前後に任意の文字列があってもよく、その中に"東"が含まれる」という意味になります。結果として「東京」「関東」「城東」など、"東"を含むすべてのレコードがマッチします。
「"田"から始まる担当者」なら、後ろにだけ * を付けます。
| 担当 |
|---|
| 田* |
これで「田中」「田村」「田口」などにマッチします。逆に「中で終わる」なら *中 と書きます。
なおMAXIFS関数でもワイルドカードは使えますが、その場合は条件を数式内に文字列として渡します(例:"東")。条件を表で管理できるDMAXのほうが、書き換えるだけで対象を切り替えられて扱いやすい場面が多いです。
日付範囲(期間)で絞り込む条件
「2025年4月1日から6月30日までの最高売上を出したい」というように、日付や数値を範囲(〜以上かつ〜以下)で絞りたいケースも頻出です。この場合は、検索条件の表に同じフィールドを2列並べて、それぞれに比較演算子を書きます。
| 日付 | 日付 |
|---|---|
| >=2025/4/1 | <=2025/6/30 |
同じ行に並べているのでAND条件になり、「2025/4/1以上 かつ 2025/6/30以下」という期間指定になります。この条件表を使えば、指定期間内の最高売上をDMAX関数で一発で取り出せます。
=DMAX(B2:E10, "売上", F1:G2)
逆にフィールドを"日付"に切り替えれば、期間内の「最も新しい日付(=最終取引日)」を抽出することもできます。
=DMAX(B2:E10, "日付", F1:G2)
注意点として、criteriaのセルに ">="&A1 のような文字列結合式をそのまま入力しても、Excelはこれを文字列として扱うため条件として機能しません。日付を別セルから動的に参照したい場合は、criteriaのセルに =">="&TEXT(A1,"YYYY/M/D") のように、評価結果が比較演算子付きの文字列になる数式を入力してください。意図どおりの結果が返るか、別のセルで動作確認しておくと安心です。
AND条件とOR条件を組み合わせる(複合条件)
ANDとORは独立して使うだけでなく、組み合わせることもできます。考え方はシンプルで、「条件表の1行が1つのANDセット」であり、「行が複数あればそれらのOR」になります。
例えば「東京支店の佐藤さん、または大阪支店の鈴木さんの最高売上」を求めたい場合、次のように書きます。
| 支店 | 担当 |
|---|---|
| 東京 | 佐藤 |
| 大阪 | 鈴木 |
これは「(東京 かつ 佐藤) または (大阪 かつ 鈴木)」という意味になります。横方向がAND、縦方向がORと覚えておくと迷いません。
=DMAX(B2:E10, "売上", F1:G3)
このような複合条件は、MAXIFS関数だとMAX(MAXIFS(...), MAXIFS(...))のように複数の式を組み合わせる必要があり、式が一気に長くなります。条件表を1つ用意するだけで済むDMAX関数の強みが、最も際立つ場面と言えるでしょう。
DMAX関数の使用例
ここでは次のような売上表(B2:E10)を想定します。
| 日付 | 支店 | 担当 | 売上 |
|---|---|---|---|
| 2025-04-01 | 東京 | 佐藤 | 120,000 |
| 2025-04-02 | 大阪 | 鈴木 | 98,000 |
| 2025-04-03 | 東京 | 田中 | 150,000 |
| ... | ... | ... | ... |
例1:特定支店の最高売上
検索条件(F1:F2)に次のように入力します。
| 支店 |
|---|
| 東京 |
数式:
=DMAX(B2:E10, "売上", F1:F2)
結果:東京支店の最高売上が返ります。
例2:AND条件(支店 × 担当)
| 支店 | 担当 |
|---|---|
| 東京 | 田中 |
数式:
=DMAX(B2:E10, "売上", F1:G2)
結果:東京支店の田中さんの最高売上が返ります。
例3:比較演算子を使った条件
| 売上 |
|---|
| >=100000 |
数式:
=DMAX(B2:E10, "日付", F1:F2)
結果:売上10万円以上のレコードの中で、最も新しい(値の大きい)日付が返ります。フィールドを切り替えるだけで色々な集計ができるのがDMAX関数の便利なところです。
最大値だけでなく「その行の担当者名や日付」も取り出したい
DMAX関数で返せるのは、あくまで指定フィールドの最大値という「数値」だけです。実務では「最高売上の金額そのもの」より「最高売上を出したのは誰か」「それはいつか」を知りたい場面のほうが多いかもしれません。
DMAX関数単体では他の列の値を取り出せませんが、INDEX関数とMATCH関数を組み合わせると、最大値と同じ行の別の列を引っ張ってこられます。
=INDEX(C2:C10, MATCH(DMAX(B2:E10,"売上",F1:F2), E2:E10, 0))
この式は次の手順で動いています。
DMAX(B2:E10,"売上",F1:F2)で条件に合う最高売上の金額を求めるMATCHでその金額が売上列(E2:E10)の何行目にあるかを探すINDEXで担当列(C2:C10)の同じ行を返す
これで「最高売上を出した担当者名」が取得できます。INDEXとMATCHの基本的な使い方はINDEX関数の使い方とMATCH関数の使い方で詳しく解説しています。
Microsoft 365やExcel 2021を使っている場合は、FILTER関数やXLOOKUP関数を使うともっと直感的に書けます。条件で絞り込んでから最大値の行を取り出すアプローチです。詳しくはFILTER関数の使い方やXLOOKUP関数の使い方を参考にしてください。
ひとつ注意点があります。同じ最大値のレコードが複数行ある場合、MATCHは最初に見つかった1件のみを返します。同点が想定されるデータでは、結果が一意でないことを念頭に置いておきましょう。
Excelテーブル(構造化参照)と組み合わせる
データを「テーブル」(挿入 → テーブル)として管理している場合、DMAX関数のデータベース引数にテーブルを指定できます。書き方はテーブル名をそのまま入れるだけです。
=DMAX(売上テーブル[#すべて], "売上", F1:F2)
[#すべて]を付けると見出し行を含めた範囲が対象になります。DMAX関数はデータベース引数に見出し行を含める必要があるため、この指定が安全です。
テーブルを使う最大の利点は、データを追加しても範囲が自動で広がることです。B2:E10のようなセル範囲指定だと、行を追加するたびに数式の修正が必要ですが、テーブルなら追加分も自動的に集計対象になります。
ただし検索条件(criteria)のほうは、テーブルの外にある通常のセル範囲で用意してください。条件表までテーブル化すると、かえって参照が複雑になりがちです。なお、Dシリーズの考え方はDSUM関数の使い方やDGET関数の使い方でも共通なので、あわせて読むと理解が深まります。
DMAX関数に関するよくある質問(FAQ)
Q1. 検索条件に空白行が含まれているとどうなりますか
検索条件の範囲に空白の行が混ざっていると、その空白行が「条件なし=すべてのレコードが対象」として扱われ、意図せず全体の最大値が返ってしまうことがあります。
これは「OR条件は別の行に書く」という仕様の副作用で、空白行も1つの(条件のない)OR行とみなされるためです。検索条件の範囲は、見出し行と実際に使う条件行だけになるよう、最小限に絞って指定してください。表の下に余分な空白セルを含めないことがポイントです。
Q2. 条件を毎回入力するのが面倒です。もっとラクに切り替えられませんか
検索条件のセルに「データの入力規則」でドロップダウンリストを設定すると、リストから選ぶだけで集計対象を切り替えられます。
例えば支店の条件セルに「東京・大阪・名古屋」のドロップダウンを設定しておけば、セルを選ぶたびにDMAX関数の結果が自動で更新されます。条件を表で管理できるDMAX関数ならではの使い方で、簡易的な集計ダッシュボードとして活用できます。
Q3. DMAXで出した最大値と同じ行の担当者名を取り出すにはどうすればいいですか
DMAX関数単体では数値の最大値しか返せないため、INDEX関数とMATCH関数を組み合わせます。=INDEX(担当列, MATCH(DMAX(...), 売上列, 0))の形で、最大値と同じ行の別の列を取り出せます。詳しい式は本文「最大値だけでなく『その行の担当者名や日付』も取り出したい」のセクションで解説しています。
Q4. GoogleスプレッドシートでもDMAX関数は使えますか
GoogleスプレッドシートにもDMAX関数は用意されており、基本的な構文=DMAX(データベース, フィールド, 検索条件)はExcelと同じです。ただし日付の扱いや一部のワイルドカード挙動など、細かい動作に差異がある場合があります。実際に使う際は、想定どおりの結果が返るか動作確認をしておくと安心です。Sheets版の詳しい使い方はスプレッドシートのDMAX関数で解説しています。
Q5. DMAXとMAXIFSはどちらを使うべきですか
条件が固定で単純なAND条件だけならMAXIFSがシンプルです。一方、条件を頻繁に変える、OR条件や複合条件を扱う、古いバージョンのExcel(2016以前)で動かす必要がある、といった場合はDMAX関数が有利です。MAXIFSの詳細はMAXIFS関数の使い方を参考に、状況に応じて使い分けてください。
まとめ
DMAX関数は、データベース形式の表から条件に一致するレコードの最大値を柔軟に取り出せる関数です。ポイントを整理しておきましょう。
- 構文は
=DMAX(データベース, フィールド, 検索条件)の3引数 - データベース範囲には見出し行を含めて指定する
- 検索条件は「見出し + 条件行」の別表で用意し、同じ行はAND・別の行はORになる
- 条件が頻繁に変わる・OR条件が必要 → DMAX、条件固定のシンプルなAND → MAXIFSが便利
- DMIN・DSUM・DAVERAGEなどDシリーズは構文が共通なので、一気に覚えられる
特に「条件を表で管理したい」「集計ダッシュボードを作りたい」というシーンでは、DMAX関数をはじめとするデータベース関数が強い味方になります。ぜひ実務で活用してみてください。