Excelでのデータ分析において、「最大値」を特定する場面は非常に多くあります。「今月の最高売上はいくらか?」「テストの最高得点者は?」「最も時間のかかったタスクは?」こうした疑問に瞬時に答えるのがExcel MAX関数です。MAX関数は、指定された数値群から最も大きな値を見つけ出す、シンプルかつ強力な関数です。
しかし、単に最大値を求めるだけだと思っていませんか?実は、MAX関数はその使い方次第で、日付の管理から複雑な条件分岐、さらにはパフォーマンス最適化まで、実務のあらゆるシーンで活躍します。この記事では、Excel初心者の方が基本を確実に押さえられるよう、また、中級・上級者の方が実務で即戦力となる応用技術を習得できるよう、MAX関数のすべてを徹底的に解説します。基礎構文から、MAXIFS関数や配列数式との組み合わせ、よくあるエラーの対処法まで、プロのテクニックを完全網羅します。
- 目次
- Excel MAX関数とは?基礎から理解する
- 中級編:実務でよく使う5つのテクニック
- 上級編:エキスパートが使う7つの高度なテクニック
- プロフェッショナル技術:パフォーマンスと効率化
- 実務で差がつくベストプラクティス10選
- 実務シナリオ:5つの業界別活用例
- トラブルシューティング:よくある10のエラーと解決法
- よくある質問(FAQ):実際に検索・質問された15の疑問
- Q1: MAX関数で文字列は扱えますか?
- Q2: 空白セルは無視されますか?
- Q3: 範囲にエラー値(#N/Aなど)がある場合はどうなりますか?
- Q4: MAX関数とMAXA関数の違いは?
- Q5: 複数シートにまたがって使用できますか?
- Q6: 条件付きで最大値を求めるには? (例: “A”だけの最大値)
- Q7: MAX関数と LARGE(範囲, 1) の違いは?
- Q8: VBAからMAX関数を呼び出す方法は?
- Q9: Googleスプレッドシートとの互換性は?
- Q10: ピボットテーブルでMAXを使う方法は?
- Q11: 動的配列数式(SPILL)との関係は?
- Q12: モバイル版Excel(スマホ・タブレット)でも使えますか?
- Q13: 2つの列を比較して、大きい方だけの最大値を取りたい
- Q14: 0(ゼロ)を無視して最大値を求めるには?
- Q15: ショートカットキーはありますか?
- MAX関数と関連関数の完全比較
- まとめ:Excel MAX関数をマスターして業務効率を劇的に向上
目次
Excel MAX関数とは?基礎から理解する
MAX関数の定義と重要性
MAX関数は、Excelの「統計関数」に分類される関数で、その役割は「引数として指定された数値データの中から最大の値を返す」ことです。非常にシンプルですが、これがExcel実務において極めて重要です。
- なぜ重要か?: ビジネスにおける意思決定は、しばしば「ベスト」や「ワースト」の把握から始まります。MAX関数は、売上のピーク、最高のパフォーマンス、最も遅い納期など、分析の出発点となる「最大値」を瞬時に特定するために不可欠です。
- どんな場面で使われるか?:
- 営業レポートでの最高売上額の特定
- クラスのテスト結果からの最高得点の算出
- 在庫管理での最大在庫数の把握
- プロジェクト管理での最長タスク所要時間の確認
- 最新の日付(日付データはシリアル値という数値のため)の特定
基本構文の完全解説
MAX関数の構文は非常に直感的です。
=MAX(数値1, [数値2], ...)
| パラメータ | 説明 | 必須/任意 | データ型 |
|---|---|---|---|
| 数値1 | 最大値を求めたい最初の数値、セル参照、またはセル範囲。 | 必須 | 数値 / セル参照 / 範囲 |
| [数値2], … | 最大値を求めたい追加の数値、セル参照、またはセル範囲。最大255個まで指定可能。 | 任意 | 数値 / セル参照 / 範囲 |
【重要】MAX関数のルール:
- 引数に指定された数値(日付、時刻含む)の中から最大値を返します。
- 文字列や論理値 (TRUE/FALSE) は、セル範囲内にある場合は無視されます。(ただし、引数に直接 `TRUE` と入力すると `1` として扱われますが、実務では稀です)
- 空白セルは無視されます。
初級編:基本的な使い方【ステップバイステップ】
ステップ1: 最もシンプルな使用例(数値を直接入力)
複数の数値を直接関数に入力して、最大値を求めることができます。
=MAX(10, 50, 3, 120)【結果】: 120
【解説】: 引数として渡された 10, 50, 3, 120 の中で最も大きい数値である 120 を返します。
ステップ2: 範囲指定の方法(最も一般的な使い方)
実務では、セル範囲を指定してその中の最大値を見つけるのが一般的です。例えば、セルA1からA10に数値が入力されているとします。
=MAX(A1:A10)【結果】: A1セルからA10セルまでに入力されている数値の中での最大値。
【解説】: この範囲に「リンゴ」などの文字列や空白セルがあっても、それらは無視され、数値データ(日付や時刻も含む)だけで比較が行われます。
ステップ3: 複数の範囲やセルを組み合わせる
離れた場所にあるセルや範囲を組み合わせて最大値を求めることも可能です。
=MAX(A1:A10, C1:C10, E5)【結果】: 範囲A1:A10、範囲C1:C10、およびセルE5に含まれるすべての数値の中での最大値。
【解説】: カンマ(,)で区切ることで、複数の引数を指定できます。これにより、異なるデータ群を一度に比較できます。
実務での基本実例【3つのシーン】
実例1: 売上一覧から「最高売上額」を見つける
- 状況説明: B列(B2:B50)に各取引の売上額が入力されています。
- 使用する数式:
=MAX(B2:B50) - 結果と解説: B2からB50のセル範囲で最も大きな売上額を瞬時に表示します。ダッシュボードやレポートのサマリー欄で多用されます。
- ポイント・注意点: 範囲内に「欠席」や「N/A」などの文字列があっても、MAX関数はそれらを無視するため、エラーにならず便利です。
実例2: テスト結果から「クラス最高点」を出す
- 状況説明: C列(C2:C31)に30人クラスのテストの点数が入力されています。
- 使用する数式:
=MAX(C2:C31) - 結果と解説: クラスの最高得点を返します。
実例3: プロジェクトの「最新の更新日」を特定する
- 状況説明: D列(D2:D100)にタスクの最終更新日がバラバラに入力されています。最新の日付(=最も未来の日付)を知りたい。
- 使用する数式:
=MAX(D2:D100) - 結果と解説: Excelは日付を「シリアル値」という数値として管理しています(例: 2025/1/1 は 45658)。したがって、MAX関数を使うとシリアル値が最も大きい日付、つまり「最新の日付」を取得できます。
中級編:実務でよく使う5つのテクニック
テクニック1: 0(ゼロ)を含む場合の最大値(MIN関数との比較)
【解説】: MAX関数は単純に最大値を返しますが、MIN関数で最小値を求める際に「0」が問題になることがあります(例:未入力の代わりに0が入っている)。MAX関数の場合、0は他の正の数値より小さいため、通常は問題になりません。しかし、「売上がマイナス(赤字)の場合」などを考慮すると、0が最大値になるケースもあり得ます。
=MAX(-100, -50, -300, 0)【結果】: 0
【実用例】: 損益データ(利益と損失)の中から「最大の利益(または最小の損失)」を求める場合、データがすべてマイナスであれば、0(収支ゼロ)が最大値として返される可能性があります。
テクニック2: 他の関数との組み合わせ (IF関数)
【解説】: 単純な最大値ではなく、「特定の条件を満たすグループの中での最大値」を求めたい場合があります。最新のExcelでは後述する「MAXIFS関数」を使いますが、古いバージョンや特定のロジックではIF関数と組み合わせた「配列数式」が使われます。
【実用例】: A列に商品名(A, B, C)、B列に売上がある場合。「商品Aだけの最高売上」を求めたい。
{=MAX(IF(A2:A100="商品A", B2:B100))}【重要】: この数式は、入力後に Ctrl + Shift + Enter で確定する「配列数式」です(Excel 365や2021では不要な場合もあります)。
【数式の解説】:
IF(A2:A100="商品A", B2:B100): A列が “商品A” ならばB列の売上を返し、それ以外ならFALSEを返します。MAX(...): 1. の結果(例: {500; FALSE; 1200; FALSE; …})の中から最大値を求めます。MAX関数はFALSE(論理値)を無視するため、結果的に “商品A” の売上だけが比較対象となります。
テクニック3: MAXA関数との使い分け
【解説】: MAX関数には、よく似た「MAXA関数」があります。違いは文字列と論理値 (TRUE/FALSE) の扱いです。
- MAX関数: 文字列と論理値を無視します。
- MAXA関数: 文字列を
0、TRUEを1、FALSEを0として計算に含めます。
【実用例】: 範囲 A1:A3 に {100, "N/A", TRUE} と入っている場合。
=MAX(A1:A3) =MAXA(A1:A3) もしデータが {50, "N/A", TRUE} なら、MAXA の結果は 50 です。もしデータが {-10, "N/A", TRUE} なら、MAXA の結果は 1 (TRUE) になります。
【結論】: ほとんどのビジネスシーンでは、数値のみを比較対象としたいので MAX関数 を使うのが安全で直感的です。
テクニック4: 動的範囲での最大値(テーブル機能)
【解説】: データが日々追加されるリスト(例:売上台帳)でMAX関数を使う場合、=MAX(B2:B100) のように範囲を固定すると、101行目以降のデータが無視されてしまいます。=MAX(B:B) と列全体を指定する方法もありますが、パフォーマンスがわずかに低下します。
【解決策】: データを「テーブル」に変換します(データ範囲を選択し Ctrl + T)。
=MAX(テーブル1[売上])【実用例】: テーブル機能を使うと、データが追加(または削除)されても、”テーブル1[売上]” という参照範囲が自動で拡張・縮小します。これにより、数式を修正することなく、常に最新のデータ範囲に基づいた最大値を求めることができます。
テクニック5: 条件付き書式との連携
【解説】: 最大値を見つけるだけでなく、「最大値のセルを目立たせたい」というニーズも非常に多いです。
【実装手順】:
- 最大値を見つけたい範囲(例: B2:B50)を選択します。
- 「ホーム」タブ → 「条件付き書式」 → 「新しいルール」を選択します。
- 「指定の値を含むセルだけを書式設定」を選びます。
- ルールの内容を「セルの値」「次の値に等しい」「
=MAX($B$2:$B$50)」と設定します。 - 「書式」ボタンから、背景色を赤にするなどの設定を行い、OKを押します。
【結果】: B2:B50 の範囲内で最大値と一致するセルが、自動的にハイライトされます。データが更新されて最大値が変わると、ハイライトされるセルも自動で追従します。
上級編:エキスパートが使う7つの高度なテクニック
このセクションでは、MAX関数をさらに深く掘り下げ、他の関数と組み合わせた高度なデータ分析テクニックを紹介します。特に「条件付き最大値」の扱いは、実務における最重要課題の一つです。
エキスパートテクニック1: 【最重要】MAXIFS関数による複数条件の最大値
【対象者】: Excel 2019, Excel 365, Excel for the web を利用しているすべての人。
【解説】: 中級編で紹介した「配列数式(MAX + IF)」は、構文が複雑で、Ctrl+Shift+Enterという特殊な入力が必要でした。これを解決するのが MAXIFS関数 です。複数の条件を(AND条件で)指定し、すべてを満たすデータの中での最大値を返します。
【構文】:
=MAXIFS(最大対象範囲, 条件範囲1, 条件1, [条件範囲2, 条件2], ...)【実用例】: A列に「支店名」、B列に「商品カテゴリ」、C列に「売上」があるデータで、「東京支店」の「ガジェット」カテゴリにおける最大売上を求めたい。
=MAXIFS(C2:C1000, A2:A1000, "東京支店", B2:B1000, "ガジェット")【数式の分解説明】:
C2:C1000: 実際に最大値を求めたい「売上」の列。A2:A1000, "東京支店": 1つ目の条件セット。A列(支店名)が “東京支店” であること。B2:B1000, "ガジェット": 2つ目の条件セット。B列(商品カテゴリ)が “ガジェット” であること。
【メリット】: 配列数式よりはるかに直感的で、処理速度も速く、入力も簡単です。条件付き最大値を求める現在の「第一選択肢」です。
エキスパートテクニック2: 複数シート間での最大値(3D参照)
【解説】: 複数のシートに同じフォーマットのデータがある場合(例:1月、2月、3月の売上シート)、それらすべてのシートを串刺し(くしざし)で計算できます。
【実用例】: “1月”シート、”2月”シート、”3月”シートがあり、すべてB5セルにその月の最高売上が入っている。四半期の最高売上を求めたい。
=MAX('1月:3月'!B5)【解説】: '1月:3月' という表記(3D参照)により、”1月”シートから”3月”シートまで(その間にあるシートも含む)のすべてのB5セルを対象に最大値を計算します。
【注意点】: この方法が使えるのは、集計対象のセル位置が全シートで同じ場合です。範囲(例:`’1月:3月’!B2:B100`)に対しても使えます。
エキスパートテクニック3: エラー値を無視して最大値を求める (AGGREGATE関数)
【問題】: =MAX(A1:A10) の範囲内に #N/A や #DIV/0! などのエラー値が1つでもあると、MAX関数の結果もエラーになってしまいます。
【解決策】: AGGREGATE関数 を使います。この関数は、集計方法やエラーを無視するオプションを指定できます。
=AGGREGATE(4, 6, A1:A10)【数式の分解説明】:
4: 関数番号(4はMAXを意味します)。6: オプション(6はエラー値を無視する)。A1:A10: 対象範囲。
【実用例】: VLOOKUPなどでエラーが発生している可能性のあるデータ範囲から、エラーを無視して最大値だけを安全に抽出したい場合に非常に有効です。
エキスパートテクニック4: OR条件での最大値(配列数式)
【解説】: MAXIFS関数はAND条件(すべての条件を満たす)しか扱えません。「商品A」または「商品B」の最大売上、といったOR条件で最大値を求めたい場合は、配列数式を使います。
【実用例】: A列に商品名、B列に売上がある場合。「商品A」または「商品B」の最大売上を求める。
{=MAX(IF((A2:A100="商品A")+(A2:A100="商品B"), B2:B100))}【数式の分解説明】:
(A2:A100="商品A")+(A2:A100="商品B"): 配列数式内では、TRUE/FALSEの配列同士を+(プラス)で計算するとOR条件になります(どちらかがTRUEなら1以上になる)。IF(..., B2:B100): 条件がTRUE(1以上)の行の売上だけを返します。MAX(...): 抽出された売上の中から最大値を求めます。
エキスパートテクニック5: グループごとの最大値(ピボットテーブル)
【解説】: 関数で頑張る方法もありますが、データ分析の王道は「ピボットテーブル」です。
【実用例】: A列に「支店名」、B列に「売上」が大量にあるデータから、「各支店ごとの」最大売上を一覧表示したい。
【実装手順】:
- データ範囲を選択し、「挿入」タブ → 「ピボットテーブル」をクリック。
- ピボットテーブルのフィールドで、
- 「行」に「支店名」をドラッグ
- 「値」に「売上」をドラッグ
- 「値」フィールドの設定(例:「合計 / 売上」となっている部分)をクリックし、「値フィールドの設定」を選択。
- 集計の方法を「合計」から「最大値」に変更します。
【結果】: 東京支店の最大値、大阪支店の最大値… という一覧表が瞬時に完成します。関数で複雑なことをするより、早く正確な場合があります。
エキスパートテクニック6: テキスト形式の数値を無視する (SUMPRODUCT関数)
【問題】: 見た目は数値なのに、Excelが「文字列」として認識しているデータ(例:’100)は、MAX関数では無視されます。その結果、本来の最大値が返らないことがあります。
【解決策】: SUMPRODUCT関数とMAX関数を組み合わせた配列数式を使います。
{=MAX(A1:A10*1)}【解説】: A1:A10*1 という計算(配列数式内)により、範囲内の各セルが1倍されます。この時、Excelは文字列として保存された数値を暗黙的に「数値」に変換します(例:’100 が 100 になる)。本当の文字列(例:”リンゴ”)は #VALUE! エラーになりますが、MAX関数はこれを無視します(要検証、環境による。AGGREGATEとの併用が安全な場合もある)。
より安全な方法は、VALUE関数をかませることです。
{=MAX(IFERROR(VALUE(A1:A10), 0))}【注意】: データクリーニング(区切り位置機能やVALUE関数で事前に数値化する)が本質的な解決策ですが、応急処置として知っておくと便利です。
エキスパートテクニック7: 2つのリストの対応する値の最大値
【問題】: =MAX(A1:A10, B1:B10) とすると、A列とB列の全20セルの中から最大値が選ばれます。そうではなく、「A1とB1の大きい方」「A2とB2の大きい方」… と比較した上で、その結果たち(10個)の最大値を求めたい場合があります。
【解説】: これは「予算」と「実績」の比較などで使われます。「予算超過額」の最大値を求めたい、など。
【実用例】: A列に「予算」、B列に「実績」がある。まずC列に差額(実績 – 予算)を計算します。
C2セル: =B2-A2 (これを下にコピー)
そして、C列の最大値を求めます。
=MAX(C2:C11)【上級テクニック】: もし作業列(C列)を使いたくない場合、配列数式で一発で計算できます。
{=MAX(B2:B11-A2:A11)}【解説】: B2:B11-A2:A11 が配列計算され、{実績1-予算1, 実績2-予算2, …} という差額の配列がメモリ上で生成されます。MAX関数がその配列の中から最大値(=最も予算を超過した額)を返します。
プロフェッショナル技術:パフォーマンスと効率化
数万行を超えるデータを扱う際、Excelの計算速度はビジネスの生産性に直結します。MAX関数自体は非常に高速ですが、使い方によってはブック全体を重くする原因にもなります。
パフォーマンス最適化の5つのヒント
- 揮発性関数との併用を避ける
OFFSETやINDIRECTといった関数(揮発性関数)をMAXの範囲指定に使うと、シート上で何か変更があるたびにMAX関数も再計算されてしまい、パフォーマンスが低下します。- 解決策: できるだけ
INDEX関数や、前述した「テーブル機能」の構造化参照(例:テーブル1[売上])を使い、動的でありながら揮発性でない範囲参照を心がけます。
- 配列数式の多用を避ける
{=MAX(IF(...))}といった配列数式は、計算対象のセル数が増える(例: 100万行)と、Excelを著しく遅くします。- 解決策: 可能な限り
MAXIFS関数を使用します。MAXIFSは内部的に最適化されており、配列数式よりも圧倒的に高速に動作します。
- 列全体の参照(A:A)を避ける
=MAX(A:A)は便利ですが、Excelは104万行すべてをチェックしようとします。- 解決策: データの実態に合わせて
=MAX(A1:A50000)のように範囲を限定するか、「テーブル機能」を使うのがベストです。
- エラー処理の実装(IFERROR vs AGGREGATE)
- エラーを含む範囲の最大値を求める際、
{=MAX(IFERROR(A1:A10, -999))}のような配列数式を使うと、IFERRORが全セルに対して実行されるため遅くなります。 - 解決策:
=AGGREGATE(4, 6, A1:A10)を使います。これはエラーを無視するオプションがネイティブで備わっており、非常に高速です。
- エラーを含む範囲の最大値を求める際、
- 数式の可読性向上
- 速度とは直接関係ありませんが、複雑なMAXの配列数式は、後で自分や他人が見たときに解読不能になります。
- 解決策:
MAXIFSを使う、ピボットテーブルを使う、または作業列を設けて計算をステップに分ける(例:C列でIF条件の判定、D列でMAXを計算)方が、結果的にメンテナンス性が向上します。
大規模データ(10万行以上)での時短テクニック
問題:大量データでの条件付きMAX処理が遅い
【原因分析】: 10万行のデータに対して {=MAX(IF(A:A="条件", B:B))} のような配列数式を実行すると、Excelは (104万行のIF判定 + 104万行のMAX判定) を配列として処理しようとし、CPUとメモリを大量に消費します。
【解決策】: MAXIFS関数、または「ピボットテーブル」の二択です。
【解決策1: MAXIFS】
=MAXIFS(B1:B100000, A1:A100000, "条件")【解決策2: ピボットテーブル】
- 行に「条件」(A列)、値に「B列」(集計を最大値に設定)
【効果】: 配列数式で数秒〜フリーズしていた処理が、MAXIFSやピボットテーブルなら一瞬(1秒未満)で完了します。大規模データを扱う場合、配列数式は最後の手段と考えるべきです。
エキスパートが実践する実用例
ケーススタディ:月別・製品別カテゴリの最大販売数量の特定
- 背景と課題: ECサイトの全注文履歴(50万行)があり、A列に注文日、B列に製品カテゴリ、C列に販売数量が記録されている。経営陣から「月ごと、かつカテゴリごとに、1回の注文で売れた最大数量」をまとめたレポートを求められた。
- 採用した技術: ピボットテーブル
- 実装した数式(ではなく手順):
- データソース(50万行)からピボットテーブルを作成。
- 「行」に「注文日」をドラッグ。Excelが自動的に「年」「四半期」「月」にグループ化してくれる。(月だけ残す)
- 「列」に「製品カテゴリ」をドラッグ。
- 「値」に「販売数量」をドラッグ。
- 「値」フィールドの設定を「合計」から「最大値」に変更。
- 結果と効果: わずか1分程度で、縦軸に月、横軸にカテゴリが並び、各セルに「その月・そのカテゴリでの1注文あたり最大販売数」が示されたマトリクス表が完成した。
- 学んだ教訓: 複雑な条件(この場合は月ごと×カテゴリごと)の集計(MAX)は、関数(MAXIFSを何個も書くなど)で実装するより、ピボットテーブルを使う方が圧倒的に早く、柔軟性も高い(後から「支店ごと」を追加するのも簡単)。
実務で差がつくベストプラクティス10選
1. テーブル機能(Ctrl+T)の積極活用
範囲参照(例: A2:A100)ではなく、テーブルの構造化参照(例: Tbl_Sales[Revenue])を使います。データが追加されても数式が自動で追従し、保守性が劇的に向上します。
2. 範囲名(名前の定義)の活用
テーブルを使わない場合でも、=MAX(B2:B50) ではなく、B2:B50に「売上データ」という名前を付け、=MAX(売上データ) とします。数式の意味が明確になります。
3. MAXとMAXAの明確な使い分け
データに論理値や文字列が混入する可能性がある場合、意図しない結果(例:TRUEの「1」が最大値になる)を防ぐため、常に MAX関数 を使うことを推奨します。MAXAは特殊なケース(例:アンケートのTRUE/FALSEを1/0として扱いたい)以外では避けます。
4. 条件付きMAXはMAXIFSを第一選択肢に
古いExcelバージョンとの互換性が必要ない限り、{=MAX(IF(...))} という配列数式は避け、MAXIFS を使いましょう。高速かつ可読性が高いです。
5. エラー対策は AGGREGATE で行う
範囲内にエラーが予見される場合、IFERROR を配列数式で使うより、AGGREGATE(4, 6, 範囲) を使う方がはるかにスマートで高速です。
6. 0(ゼロ)と空白セルの違いを意識する
MAX関数は「空白セル」を無視しますが、「0が入力されたセル」は計算に含めます。データがすべてマイナス(例:-10, -5, -100)の場合、MAX の結果は -5 ですが、そこに 0 が加わると結果は 0 になります。データの意味(0点が最下位なのか、未受験なのか)を理解することが重要です。
7. データクリーニングの実施
MAX関数が期待通りの値を返さない最大の原因は「数値が文字列として保存されている」ことです。「区切り位置」機能や VALUE 関数を使い、分析前にデータをクリーンな「数値」に変換しておきましょう。
8. ピボットテーブルを恐れない
「支店ごとの最大値」など、グループ別集計がしたいなら、関数で複雑なことをする前にピボットテーブルを試しましょう。多くの場合、それが最速の解決策です。
9. 3D参照(串刺し集計)の活用
複数シートの同じ場所を集計する場合、=MAX(Sheet1!A1, Sheet2!A1, ...) と書くより、=MAX(Sheet1:Sheet12!A1) という3D参照が効率的です。
10. 数式の文書化(コメント機能)
なぜここでMAXを使っているのか、特に複雑な配列数式やAGGREGATEを使った場合は、セルの「コメント」や「メモ」機能(またはN関数)を使って、数式の意図を書き残しておきましょう。(例: =AGGREGATE(4, 6, A1:A10) + N("エラー値を無視して最大値を計算"))
実務シナリオ:5つの業界別活用例
シナリオ1: 営業管理(IT・SaaS業界)
状況
営業担当者別の月次売上データ(CRMからエクスポート)があり、A列に担当者名、B列に契約日、C列に売上額が並んでいる。
課題
- 「今月の」トップセールス担当者の「最大単一契約額」を知りたい。
- レポート作成を自動化したい。
解決策(MAXIFS関数)
「今月」の開始日をE1セルに、終了日をE2セルに、「担当者A」をE3セルに入力すると仮定します。
=MAXIFS(C:C, B:B, ">="&E1, B:B, "<="&E2, A:A, E3)実装手順
- C列(売上額)を最大対象範囲に設定。
- B列(契約日)がE1(開始日)以上である、という条件を追加。
- B列(契約日)がE2(終了日)以下である、という条件を追加。
- A列(担当者名)がE3(担当者A)である、という条件を追加。
結果
担当者Aの、今月(E1~E2の期間)における単一契約の最大額が自動計算されます。E3セルの名前を変えるだけで、他の担当者の実績もすぐに確認できます。
シナリオ2: 在庫管理(製造・小売業)
状況
製品マスター(A列:製品ID、B列:製品カテゴリ)と、在庫ログ(D列:製品ID、E列:在庫日数)がある。
課題
「飲料」カテゴリの中で、最も長く在庫されている製品の「最大在庫日数」を特定し、廃棄ロスを未然に防ぎたい。
解決策(MAXIFS + VLOOKUP または SUMPRODUCT)
※在庫ログにカテゴリ名がないため、まずカテゴリを紐付ける必要があります。
方法A(作業列): 在庫ログのF列に =VLOOKUP(D2, A:B, 2, FALSE) としてカテゴリ名を引いておき、MAXIFS を使う。
=MAXIFS(E:E, F:F, "飲料")方法B(配列数式 – 上級): 作業列を使わずに一発で計算する(データが多いと重い)。
{=MAX(IF(VLOOKUP(D2:D1000, A:B, 2, FALSE)="飲料", E2:E1000))}シナリオ3: 人事評価(人事部門)
状況
全社員の評価データがあり、A列に部署名、B列に役職、C列に評価スコア(1~5)が入力されている。
課題
「開発部」の「マネージャー」職における「最高評価スコア」を把握したい。
解決策(MAXIFS関数)
=MAXIFS(C:C, A:A, "開発部", B:B, "マネージャー")結果
特定の部署・役職に絞り込んだ上での最大値をピンポイントで抽出できます。
シナリオ4: 財務分析(経理・財務部門)
状況
経費精算システムから出力されたデータがあり、A列に勘定科目(交通費、交際費など)、B列に日付、C列に金額が並んでいる。
課題
「交際費」として1回で精算された「最大金額」を把握し、経費の妥当性をチェックしたい。
解決策(MAXIFS関数)
=MAXIFS(C:C, A:A, "交際費")結果
交際費の中での最大支出額が瞬時にわかります。異常値の早期発見に繋がります。
シナリオ5: プロジェクト管理(IT・建設業)
状況
複数のプロジェクト(PJT-A, PJT-B)が進行中。タスク管理表にA列:プロジェクト名、B列:タスク名、C列:予定工数、D列:実績工数が入力されている。
課題
「PJT-A」において、「予定工数を最も超過した」タスクの「超過時間(最大値)」を把握したい。
解決策(作業列 + MAXIFS または 配列数式)
方法A(作業列): E列に「超過時間」を計算する =D2-C2。その後、MAXIFSを使う。
=MAXIFS(E:E, A:A, "PJT-A")方法B(配列数式): 作業列を使わない場合。(Excel 365なら =MAX(FILTER(D:D-C:C, A:A="PJT-A")) が使える)
{=MAX(IF(A2:A1000="PJT-A", D2:D1000-C2:C1000))}トラブルシューティング:よくある10のエラーと解決法
エラー1: 期待した値より小さい(または 0 が返る)
症状
データ内には明らかに 500 や 1000 があるのに、MAX関数の結果が 100 や 0 になる。
原因
原因1: 数値が「文字列」として保存されている。
Excelは「文字列の数字」を計算対象として無視します。例えば、{"500", "1000", 90, 80} というデータ(” “は文字列)がある場合、MAX関数は数値である 90 と 80 しか比較せず、結果は 90 になります。すべてが文字列の場合、結果は 0 になります。
解決方法
- データ型の確認:
=ISNUMBER(A1)という数式で、対象セルが数値(TRUE)か文字列(FALSE)かを確認します。 - データのクリーニング(推奨):
- 対象範囲を選択し、「データ」タブ → 「区切り位置」 → 「完了」を(ウィザードを何も変更せずに)クリックします。これが最も簡単な数値化の方法です。
- または、空いているセルに「1」を入力 → コピー → 対象範囲を選択 → 右クリック「形式を選択して貼り付け」 → 「乗算」を選んでOKします。
- 応急処置(数式):
{=MAX(範囲*1)}のように配列数式にする。(上級編参照)
予防策
システムからデータをインポートする際、データ型が「数値」になっているか確認します。
エラー2: #VALUE! エラー
症状
MAX関数そのものでは稀ですが、配列数式(例:{=MAX(B2:B10-A2:A10)})で発生します。
原因
計算対象の範囲に「数値」と「文字列」(例:”欠席”)が混在している状態で、四則演算(- や *)を行おうとしたため。
解決方法
IFERROR を使って、エラーを計算に影響しない値(例:非常に小さい数)に置き換えます。
{=MAX(IFERROR(B2:B10-A2:A10, -99999))}または、AGGREGATE を使ってエラーを無視します(ただし、AGGREGATEは配列の演算を直接サポートしないため工夫が必要です)。
エラー3: #REF! エラー
症状
数式が #REF! を返す。
原因
MAX関数が参照していたセル範囲(例:A1:A10)を、後から行や列ごと削除してしまった。参照先が失われたために発生します。
解決方法
数式を修正し、正しいセル範囲を参照し直します。または、Ctrl+Z で削除操作を取り消します。
エラー4: #NAME? エラー
症状
数式が #NAME? を返す。
原因
関数名をタイプミスしている。例: =MX(A1:A10), =MAXX(A1:A10)
解決方法
正しい関数名 =MAX(A1:A10) に修正します。
エラー5: 配列数式(Ctrl+Shift+Enter)の押し忘れ
症状
=MAX(IF(A1:A10="A", B1:B10)) と入力したら、正しい最大値ではなく、#VALUE! エラーや期待しない値が返る。
原因
これは配列数式であり、Enterキーだけで確定したため、正しく計算されていません。
解決方法
数式を入力した後、Ctrl + Shift + Enter を同時に押して確定します。数式バーで数式が { } で囲まれれば成功です。(※Excel 365/2021のスピル機能が有効な環境では不要です)
エラー6: MAXIFS関数が使えない
症状
=MAXIFS(...) と入力したら、#NAME? エラーになる。
原因
使用しているExcelのバージョンが古い(Excel 2016以前)。MAXIFS関数は Excel 2019 / Excel 365 で導入されました。
解決方法
代替手段として、{=MAX(IF(...))} の配列数式(中級編・上級編を参照)を使います。
エラー7: 日付の最大値が「45658」のような数値になる
症状
=MAX(A1:A10) で最新日付を求めたら、「2025/1/1」ではなく「45658」と表示された。
原因
MAX関数は正しく最新の日付(のシリアル値)を返していますが、セルの「表示形式」が「標準」や「数値」になっているためです。
解決方法
数式が入力されているセルを選択し、「ホーム」タブ → 表示形式を「日付(短い日付形式)」に変更します。
エラー8: MAXA関数で意図せず「1」が返る
症状
=MAXA(A1:A10) の結果が 1 になった。範囲には -10, -5, FALSE, TRUE しか入っていない。
原因
MAXA関数は TRUE を 1 として計算に含めます。{-10, -5, 0 (FALSE), 1 (TRUE)} の中で最大値は 1 です。
解決方法
論理値を無視したい場合は、MAXA ではなく MAX 関数を使います。=MAX(A1:A10) の結果は -5 になります。
エラー9: 隠しセル(非表示の行)も計算されてしまう
症状
フィルタでデータを絞り込み、表示されているセルだけの最大値を知りたいのに、MAX関数は隠れたセルも含めた全体の最大値を返してしまう。
原因
MAX関数はセルの表示・非表示を区別しません。
解決方法
SUBTOTAL関数 または AGGREGATE関数 を使います。
=SUBTOTAL(104, A1:A100)または
=AGGREGATE(4, 7, A1:A100)【解説】:
SUBTOTAL(104, ...): 104は「非表示の行を無視するMAX」を意味します。AGGREGATE(4, 7, ...): 4はMAX、7は「非表示の行とエラー値を無視する」を意味します。
(注:SUBTOTAL(4, ...) は手動で非表示にした行は無視しませんが、オートフィルタの結果は無視します。100番台(104)は手動非表示も無視します)
エラー10: 条件付き書式で最大値「以外」もハイライトされる
症状
=MAX(B2:B50) を使った条件付き書式で、最大値ではないセルもハイライトされる。
原因
条件付き書式の設定で「絶対参照($)」が正しく使われていない。例えば、B2セルを基準に =MAX(B2:B50) と設定すると、B3セルは =MAX(B3:B51)、C2セルは =MAX(C2:C50) と参照がズレていきます。
解決方法
条件付き書式の数式は、比較対象の範囲を必ず絶対参照(F4キーで切り替え)にします。
=B2=MAX($B$2:$B$50)
(「セルの値が」「次の値に等しい」=MAX($B$2-$B$50) でも同じです)
よくある質問(FAQ):実際に検索・質問された15の疑問
Q1: MAX関数で文字列は扱えますか?
A: いいえ、MAX関数は文字列を無視します。
- 例えば、
{100, 200, "リンゴ"}の最大値は200です。 {"1000", "500", 300}(” “は文字列)の場合、最大値は300になります(文字列の数字は無視されるため)。- もし文字列を
0、論理値TRUEを1として計算に含めたい場合は、MAXA関数を使います。
Q2: 空白セルは無視されますか?
A: はい、無視されます。
{10, 20, (空白)}の最大値は20です。0(ゼロ)が入力されているセルは無視されず、計算に含まれます。空白と0は明確に区別されます。
Q3: 範囲にエラー値(#N/Aなど)がある場合はどうなりますか?
A: 範囲内に1つでもエラー値があると、MAX関数の結果もそのエラー値になります(例: #N/A)。
- 対処法:
AGGREGATE関数を使います。=AGGREGATE(4, 6, 範囲)とすると、エラー値を無視して最大値を計算できます。
Q4: MAX関数とMAXA関数の違いは?
A: 文字列と論理値(TRUE/FALSE)の扱いです。
| 項目 | MAX関数 | MAXA関数 |
|---|---|---|
| 数値 | 計算対象 | 計算対象 |
| 空白セル | 無視 | 無視 |
| 文字列(”リンゴ”など) | 無視 | 0 として扱う |
| 文字列(”500″など) | 無視 | 0 として扱う |
| 論理値 (TRUE) | 無視 | 1 として扱う |
| 論理値 (FALSE) | 無視 | 0 として扱う |
実務では、数値以外のデータ(文字列やTRUE/FALSE)が計算に含まれると混乱を招くため、MAX関数 の使用が一般的です。
Q5: 複数シートにまたがって使用できますか?
A: はい、「3D参照」を使えば可能です。
- 構文:
=MAX(開始シート名:終了シート名!セル範囲) - 実例: “4月”シートから”9月”シートまでのすべて(間に挟まれたシートも含む)のB10セルの最大値を求める場合。
- 構文:
=MAX('4月:9月'!B10)Q6: 条件付きで最大値を求めるには? (例: “A”だけの最大値)
A: 使用しているExcelのバージョンによって最適解が異なります。
- Excel 2019 / 365 の場合 (推奨): MAXIFS関数 を使います。
=MAXIFS(最大値対象範囲, 条件範囲, "A") - Excel 2016 以前の場合: MAXとIFの配列数式 を使います。
{=MAX(IF(条件範囲="A", 最大値対象範囲))}(※Ctrl+Shift+Enter で確定)
Q7: MAX関数と LARGE(範囲, 1) の違いは?
A: =MAX(範囲) と =LARGE(範囲, 1) は、機能的に全く同じで、どちらも範囲内の最大値を返します。
- 使い分け:
- 単純に最大値が欲しいだけなら、短くて直感的な
MAXを使います。 - 「2番目に大きい値」(
LARGE(範囲, 2)) や「3番目に大きい値」(LARGE(範囲, 3)) も求める可能性がある場合は、数式の統一感を出すためにLARGE(範囲, 1)を使うこともあります。
Q8: VBAからMAX関数を呼び出す方法は?
A: Application.WorksheetFunction オブジェクトを使います。
Sub GetMaxValue()
Dim myRange As Range
Dim maxValue As Double
' A1:A10 を対象範囲に設定
Set myRange = ThisWorkbook.Worksheets("Sheet1").Range("A1:A10")
' VBA内でExcelのMAX関数を実行
maxValue = Application.WorksheetFunction.Max(myRange)
' 結果をB1セルに出力
ThisWorkbook.Worksheets("Sheet1").Range("B1").Value = maxValue
End SubQ9: Googleスプレッドシートとの互換性は?
A: 高い互換性があります。
MAX,MAXA,MAXIFSは、GoogleスプレッドシートでもExcelとほぼ同じ構文、同じ動作で使用できます。AGGREGATEやSUBTOTALも互換性があります。- ただし、
{=MAX(IF(...))}といった配列数式(CSE入力)は、スプレッドシートではARRAYFORMULA関数で囲む必要があります(例:=ARRAYFORMULA(MAX(IF(...))))。
Q10: ピボットテーブルでMAXを使う方法は?
A: データを「値」フィールドにドラッグ&ドロップした後、そのフィールドの設定を変更します。
- 「値」エリアのフィールド(例: “合計 / 売上”)をクリック。
- 「値フィールドの設定」を選択。
- 「計算の種類」タブ(または「集計方法」)で、「合計」や「個数」の代わりに「最大値」を選択してOKします。
Q11: 動的配列数式(SPILL)との関係は?
A: MAX関数自体は単一の値を返すため、SPILL(#SPILL! エラー)の直接の原因にはなりません。しかし、SPILLの結果をMAX関数の入力として使うことは非常に強力です。
- 実例: Excel 365で
FILTER関数を使った場合。 =FILTER(B1:B100, A1:A100="A")と入力すると、A列が”A”のB列の値がSPILL(複数セルに展開)されます。- この結果全体の最大値を求めるには、次のように書けます。
- 実例: Excel 365で
=MAX(FILTER(B1:B100, A1:A100="A"))MAXIFSと同じ結果が得られますが、より複雑な条件(例:OR条件)をFILTERで指定できるため、柔軟性が高いです。
Q12: モバイル版Excel(スマホ・タブレット)でも使えますか?
A: はい、問題なく使用できます。MAX, MAXA, MAXIFS といった主要な関数は、デスクトップ版と同様に機能します。
Q13: 2つの列を比較して、大きい方だけの最大値を取りたい
A: 例えば、A列(予算)とB列(実績)があり、「実績が予算を上回ったケース」だけを対象に、「実績」(B列)の最大値を求めたい、というケースです。
- 解決策 (MAXIFS):
=MAXIFS(B1:B100, B1:B100, ">"&A1:A100)(※Excelのバージョンによっては、このように範囲同士を直接比較できない場合があります)
- より確実な方法 (配列数式):
{=MAX(IF(B1:B100>A1:A100, B1:B100))}Q14: 0(ゼロ)を無視して最大値を求めるには?
A: MAX関数は0を数値として扱います。もし0を除外した最大値(例:{10, 20, 0, -5} の場合に 20 を、{-10, -5, 0} の場合に 0 ではなく -5 を返したい)を求めたい場合、MAXIFS を使います。
=MAXIFS(A1:A10, A1:A10, "<>0")(注:もしデータがすべて0以下の場合、この数式は 0 を返します。データが {-10, -5, 0} の場合の結果は -5 です)
Q15: ショートカットキーはありますか?
A: MAX関数自体を直接入力するショートカットキーはありません。しかし、オートSUM(合計) のショートカットに関連するテクニックがあります。
Alt+Shift+=を押すと=SUM()が自動挿入されます。- 挿入された
SUMをMAXに手で書き換える、というのが実務上最速の流れの一つです。 - または、リボンの「ホーム」タブにある「オートSUM(Σ)」ボタンの横の
▼をクリックし、「最大値(M)」を選択すると=MAX()が挿入されます。(ショートカット:Alt→H→U→M)
MAX関数と関連関数の完全比較
MAX関数には多くの「仲間」がいます。用途に応じて最適な関数を選ぶことが、Excelマスターへの近道です。
機能比較表
| 関数名 | 用途 | 構文 | 使用場面 | 文字列・論理値の扱い |
|---|---|---|---|---|
| MAX | 最大値を返す | =MAX(数値1, ...) | 最も一般的な最大値の計算。 | 無視する |
| MAXA | 最大値を返す | =MAXA(値1, ...) | TRUE=1, FALSE=0, 文字列=0 として計算に含めたい特殊なケース。 | 計算に含める (TRUE=1, 文字列=0) |
| MAXIFS | 複数条件(AND)に一致する最大値 | =MAXIFS(最大対象, 条件範囲1, 条件1, ...) | 条件付き最大値を求める現在の標準。 | (対象範囲のルールに準拠) |
| LARGE | N番目に大きい値 | =LARGE(範囲, k) | 最大値 (k=1)、2番目 (k=2)、3番目 (k=3) などを求めたい時。 | 無視する |
| AGGREGATE | オプション付き集計 | =AGGREGATE(関数番号, オプション, 範囲) | エラー値や非表示行を無視して最大値 (関数番号=4) を求めたい時。 | オプションによる (通常は無視) |
| SUBTOTAL | 集計(フィルタ連動) | =SUBTOTAL(関数番号, 範囲) | オートフィルタで絞り込んだ結果の最大値 (関数番号=4または104) を求めたい時。 | 無視する |
| MIN | 最小値を返す | =MIN(数値1, ...) | MAXの完全な対。最小値(最も古い日付など)を求める時。 | 無視する |
使い分けガイド
- 単純な最大値が知りたい
- → MAX を使います。
- 「A支店」の「B商品」の最大売上は?(条件付き)
- → MAXIFS を使います。(Excel 2019/365)
- →
{=MAX(IF(...))}配列数式を使います。(Excel 2016以前)
- エラー(#N/Aなど)が含まれる範囲の最大値は?
- → AGGREGATE(4, 6, 範囲) を使います。
- フィルタで絞り込んだ「表示されているセル」だけの最大値は?
- → SUBTOTAL(104, 範囲) または AGGREGATE(4, 7, 範囲) を使います。
- トップ3(1位、2位、3位)の売上は?
- → LARGE(範囲, 1), LARGE(範囲, 2), LARGE(範囲, 3) を使います。
- TRUE=1, 文字列=0 として計算したい(稀なケース)
- → MAXA を使います。
まとめ:Excel MAX関数をマスターして業務効率を劇的に向上
この記事で学んだ重要ポイント
- 基礎知識:
=MAX(範囲)は、数値、日付、時刻の中から最大値を返します。文字列、論理値、空白セルは無視します。 - 実務テクニック: 最新の日付(シリアル値の最大)の特定や、条件付き書式との連携(最大値のハイライト)に活用できます。
- エキスパート技術:
- 条件付き最大値は、最新Excelなら MAXIFS関数 が最適解です。
- エラー値や非表示行を無視したい場合は、AGGREGATE関数 または SUBTOTAL関数 を使います。
- 古いExcelでは
{=MAX(IF(...))}という配列数式が使われますが、重くなるため注意が必要です。
- トラブル対応: 最大値が
0になる、または期待より小さい場合、数値が文字列になっていないかを真っ先に疑います(「区切り位置」で数値化)。 - ベストプラクティス: 範囲指定には「テーブル機能」の構造化参照を使い、保守性を高めることがプロフェッショナルなアプローチです。
今日から実践できる3つのアクション
- 既存のレポートを見直す: 現在「目視」で確認している最高売上や最高得点の欄を、
=MAX()関数に置き換えてみましょう。 - 日付管理に活用する: タスクリストや更新履歴の列に対して
=MAX(日付列)を使い、「最終更新日」を自動で表示させてみましょう。 - MAXIFSを試す: 自分の業務データ(例:売上リスト)から、「(特定の)Aさんの最大売上」や「(特定の)B製品の最大売上」を
MAXIFS関数で算出してみましょう。
次のステップ:さらに学ぶべき関数
MAX関数をマスターしたら、次はこれらの関連関数を学ぶことで、あなたのExcelスキルはさらに飛躍します。
- MIN関数の完全ガイド(最小値・最も古い日付を求める)
- MAXIFS関数 徹底解説(複雑な条件での最大値を極める)
- LARGE関数とSMALL関数の実践テクニック(トップ5、ワースト3を自在に抽出する)
- AGGREGATE関数マスター(エラーと非表示セルを自在に操る集計術)



コメント