「一番大きい数字を取り出したいだけなのに、なぜか結果が0になる」。スプレッドシートのMAX関数でそんな経験はありませんか?
原因の多くは、セルの値が文字列として認識されているケースです。数字に見えても文字列扱いだとMAX関数は無視してしまいます。
この記事では、GoogleスプレッドシートのMAX関数を基本から実務活用まで解説します。エラーの対処法やMIN・MAXIFSとの違いも整理しました。読み終わるころには、最大値の取得で迷うことがなくなりますよ。
MAX関数とは?最大値を返す仕組みを理解しよう
MAX関数は、指定した範囲のなかにある最大の数値を返す関数です。読み方は「マックス」で、英語の「Maximum(最大)」の略がそのまま名前になっています。
売上データの最高額、テスト結果の最高点など、「一番大きい値を取り出したい」ときに使う関数です。
基本構文と引数の見方
MAX関数の構文はとてもシンプルです。
=MAX(値1, [値2, ...])
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値1 | 必須 | 最大値を求める対象のセル範囲や値 |
| 値2, … | 任意 | 追加で比較したい範囲や値(最大30個) |
引数にはセル範囲を指定するのが一般的です。たとえば =MAX(B2:B100) のように書きます。複数の範囲を比較したいときは、カンマで区切って =MAX(A1:A10, C1:C10) と書けばOKです。
MAX関数が無視する値
MAX関数は数値だけを比較対象にします。以下の値は無視されます。
- 文字列(「山田太郎」など)
- 空白セル
- 論理値(TRUE / FALSE)
- エラー値(#N/A など)
すべてのセルが空白や文字列だった場合、結果は0になります。この挙動がトラブルの原因になりやすいので、覚えておいてください。
MAX関数の基本的な使い方
実際にMAX関数を使ってみましょう。
B2:B8に「85, 92, 78, 95, 88, 70, 100」が入っているとします。

=MAX(B2:B8)
!_images/spreadsheet-max-function/02_formula_max-basic.png
結果は 100 です。範囲内の数値をすべて比較して、最も大きい値を返しています。

直接数値を指定する書き方もできます。
=MAX(85, 92, 78, 95)
結果は 95 です。ただし実務ではセル範囲を指定するほうが圧倒的に多いです。
MAX関数の実務活用パターン3選
基本を押さえたところで、実務での使いどころを紹介します。
売上データから最高額を取り出す
月次売上の一覧表から、最高売上額を自動表示するケースです。
=MAX(C2:C13)
C列に月ごとの売上金額が入っていれば、年間の最高売上月の金額がすぐにわかります。予算達成率の分析や上司への報告で重宝しますよ。
「最高売上の月名も知りたい」という場合は、INDEX+MATCH関数と組み合わせます。
=INDEX(B2:B13, MATCH(MAX(C2:C13), C2:C13, 0))
MAX関数で最大値を特定し、MATCHで位置を調べ、INDEXで月名を取得する流れです。
テストの最高点を自動表示する
成績管理表で「クラスの最高点」を表示したいときにもMAX関数が使えます。
=MAX(D2:D50)
D列に各生徒の点数が入っていれば、最高点が一発で表示されます。平均点はAVERAGE関数で求められるので、セットで使うと便利です。
日付データから最新日を取得する
スプレッドシートでは日付を内部的に数値で管理しています。そのため、MAX関数で最新の日付を取得できます。
=MAX(A2:A100)
A列に入力日が入っている場合、最も新しい日付が返ります。更新履歴の「最終更新日」を自動表示したいときに使えるテクニックです。
NOTE
結果が数値で表示される場合は、セルの表示形式を「日付」に変更してください。
2番目・3番目に大きい値も知りたいときはLARGE関数
MAX関数で最大値を取り出すと、次に「では2位や3位はどう取り出すの?」と気になってきますよね。MAX関数はあくまで「1番大きい値だけ」を返す関数なので、順位を指定したいときはLARGE関数の出番です。
LARGE関数は「範囲のなかでk番目に大きい値」を返します。構文は次のとおりです。
=LARGE(範囲, 順位)
B2:B8に「85, 92, 78, 95, 88, 70, 100」が入っている場合で見てみましょう。
=LARGE(B2:B8, 1) → 100(最大値。MAX(B2:B8)と同じ)
=LARGE(B2:B8, 2) → 95(2番目に大きい値)
=LARGE(B2:B8, 3) → 92(3番目に大きい値)
第2引数に「1」を指定すると、結果はMAX関数とまったく同じになります。つまりLARGE関数はMAX関数を順位指定できるように拡張したもの、とイメージするとわかりやすいでしょう。
売上やテスト結果でトップ3のランキング表を作りたいときは、行ごとに順位を変えてLARGE関数を並べるだけで完成します。
| 順位 | 数式 | 結果 |
|---|---|---|
| 1位 | =LARGE($B$2:$B$8, 1) | 100 |
| 2位 | =LARGE($B$2:$B$8, 2) | 95 |
| 3位 | =LARGE($B$2:$B$8, 3) | 92 |
範囲を絶対参照($B$2:$B$8)にしておくと、下の行へコピーしても範囲がずれません。
NOTE
順位がデータ件数を超えると
#NUM!エラーになります。たとえば7個のデータに対して=LARGE(B2:B8, 10)と書くとエラーです。順位の数字がデータ件数以内かを確認してください。
なお、小さいほうから数えたい場合は同じ書き方でSMALL関数を使います。=SMALL(B2:B8, 2) なら「下から2番目に小さい値」が返ります。
最大値のセルに自動で色を付ける(条件付き書式)
最大値を数字で表示するだけでなく、「表のなかでどこが一番大きいのか」を一目で見せたいときがありますよね。そんなときは条件付き書式とMAX関数を組み合わせると、最大値のセルだけ自動で色が付きます。
手順は次のとおりです。C2:C13に月別の売上が入っているとして説明します。
- 色を付けたい範囲(C2:C13)を選択する
- メニューの「表示形式」→「条件付き書式」を開く
- 「書式ルール」で「カスタム数式」を選ぶ
- 数式欄に
=C2=MAX($C$2:$C$13)と入力する - 背景色や文字色を設定して「完了」をクリックする
これで、範囲のなかで最大値と一致するセルだけが自動的に色付けされます。データを更新して最大値が別の月に変わっても、色付けも自動で追従してくれるのが便利なポイントです。
ここでのコツは絶対参照($)の使い方です。比較する範囲全体は $C$2:$C$13 と固定し、左側の C2 は行ごとに動くように相対参照のままにします。こうすることで「各セルの値が、範囲全体の最大値と等しいか」を1行ずつ判定できます。
行ごとに最大値を色付けしたい場合は、列だけを絶対参照にします。たとえば各行のB列〜E列のなかで最大のセルに色を付けるなら、次のように書きます。
=B2=MAX($B2:$E2)
応用として、最大値とは別にもう1つルールを追加し、=C2=MIN($C$2:$C$13) で最小値にも色を付けると、データの上限と下限がひと目で把握できるようになります。
よくあるエラーと対処法
MAX関数はシンプルですが、いくつか注意点があります。
結果が0になる(文字列混在)
これが一番多いトラブルです。MAX関数の結果が0になる場合、対象範囲のセルが文字列型になっている可能性があります。
確認方法は簡単です。セルの配置を見てください。数値なら右揃え、文字列なら左揃えで表示されます。また、左上に緑色の三角マークが出ていれば文字列型です。
対処法:
- 対象セルを選択する
- 「表示形式」メニューから「数値」を選ぶ
- それでも直らない場合は
=VALUE(A1)で数値に変換する
CSVファイルの取り込み時にこの問題が起きやすいです。取り込み後にMAX関数が0を返したら、まず文字列型を疑ってみてください。
#VALUE!エラーが出る
引数に直接文字列を指定するとエラーになります。
=MAX("abc", 100, 200)
セル範囲内の文字列は無視されますが、直接入力した文字列はエラーの原因です。引数には数値かセル範囲だけを指定しましょう。
MAXとMINの違い|最大値と最小値の使い分け
MIN関数は、MAX関数の正反対で最小値を返します。構文は完全に同じです。
=MIN(値1, [値2, ...])
| 関数 | 返す値 | 使いどころ |
|---|---|---|
| MAX | 最大値 | 最高売上・最高点・最新日付 |
| MIN | 最小値 | 最低売上・最低点・最古日付 |
B2:B8に「85, 92, 78, 95, 88, 70, 100」が入っている場合:
=MAX(B2:B8) → 100
=MIN(B2:B8) → 70

MAX関数が使える場面ではMIN関数もセットで使えます。「最高と最低の差(レンジ)」を知りたいときは、次のように書きます。
=MAX(B2:B8) - MIN(B2:B8)
結果は 30 です。データのばらつきを把握したいときに便利ですよ。
MAXとMAXAの違い|チェックボックスや論理値を含めたいとき
MAX関数とよく似た関数にMAXA関数があります。違いは論理値(TRUE / FALSE)の扱いです。
記事の冒頭で触れたとおり、MAX関数は論理値を無視します。一方でMAXA関数は、TRUEを「1」、FALSEを「0」として計算に含めます。
| 関数 | 数値 | 文字列 | 論理値(TRUE / FALSE) |
|---|---|---|---|
| MAX | 比較する | 無視 | 無視 |
| MAXA | 比較する | 0として扱う | TRUE=1 / FALSE=0として比較 |
この違いが効いてくるのが、Googleスプレッドシートのチェックボックス機能を使ったシートです。チェックボックスは内部的にTRUE / FALSEで管理されているため、MAX関数では反応しませんが、MAXA関数なら「1つでもチェックが入っていれば1」を返します。
=MAXA(B2:B10)
たとえばアンケートの「同意した人がいるか」をチェックボックスで管理している場合、MAXAが1を返せば「少なくとも1人はチェックを入れている」と判断できます。
ただし、通常の数値だけを集計するケースではMAXとMAXAの結果は同じになります。論理値やチェックボックスが混ざっていない限り、ふだんはMAX関数で問題ありません。「チェックボックスを集計に含めたいとき」だけMAXAを思い出せばOKです。
条件付きで最大値を求めるには?MAXIFSへの発展
「全体の最大値」ではなく「特定の条件に合うデータの最大値」を求めたいことがあります。たとえば「東京支店だけの最高売上」のようなケースです。
そんなときはMAXIFS関数を使います。
=MAXIFS(最大値の範囲, 条件範囲1, 条件1, ...)
例として、B列に支店名、C列に売上額が入っているデータで、東京支店の最高売上を求める場合です。
=MAXIFS(C2:C100, B2:B100, "東京")
MAXIFS関数はMAX関数の「条件付きバージョン」と覚えてください。SUMIF関数がSUM関数の条件付きバージョンであるのと同じ関係です。
| 関数 | できること |
|---|---|
| MAX | 範囲全体の最大値 |
| MAXIFS | 条件を満たすデータの最大値 |
| MIN | 範囲全体の最小値 |
| MINIFS | 条件を満たすデータの最小値 |
この4関数の関係を押さえておくと、最大値・最小値の取得で困ることはなくなります。
MAXIFSで「東京または大阪」のOR条件を扱うには
MAXIFS関数はとても便利ですが、ひとつ注意点があります。MAXIFSが扱えるのはAND条件だけという点です。複数の条件を指定すると「すべての条件を同時に満たすデータ」だけが対象になります。
そのため「東京または大阪の最高売上」のようなOR条件は、MAXIFSの条件を並べるだけでは実現できません。たとえば次のように2つの支店名を並べても、東京と大阪を同時に満たすデータは存在しないため、結果は0になってしまいます。
=MAXIFS(C2:C100, B2:B100, "東京", B2:B100, "大阪") → 0(意図しない結果)
OR条件にしたいときは、書き方を変えます。シンプルなのは、支店ごとのMAXIFSをMAX関数でくくる方法です。
=MAX(MAXIFS(C2:C100, B2:B100, "東京"), MAXIFS(C2:C100, B2:B100, "大阪"))
東京の最高売上と大阪の最高売上をそれぞれ求め、その2つのうち大きいほうを返す、という流れです。
もうひとつ、Googleスプレッドシートならではの書き方としてFILTER関数との組み合わせもあります。
=MAX(FILTER(C2:C100, (B2:B100="東京") + (B2:B100="大阪")))
FILTERで「東京または大阪」の行だけを抽出し、その結果に対してMAXをかけています。条件のあいだを +(プラス)でつなぐとOR条件になるのがポイントです。条件が3つ4つと増えても、+ でつなげば対応できます。
支店が2〜3個ならMAX+MAXIFSの形がわかりやすく、条件が増えるならFILTERのほうがすっきり書けます。
別シートのデータからMAXを取得する
実務では、シートが「1月」「2月」のように月別、あるいは部門別に分かれていることがよくあります。MAX関数は別シートのデータも参照できるので、集計用シートに最大値をまとめて表示できます。
別シートを参照するときは、シート名と範囲を !(エクスクラメーション)でつなぎます。
=MAX(Sheet2!C2:C13)
複数のシートをまたいで最大値を比較したいときは、カンマで区切って範囲を並べます。
=MAX(Sheet1!C2:C13, Sheet2!C2:C13, Sheet3!C2:C13)
これで3つのシートのなかで最も大きい値が一発で取得できます。四半期ごとや支店ごとのシートを横断して「全体の最高売上」を出したいときに便利です。
ひとつ注意点があります。シート名にスペースや記号が含まれる場合は、シート名をシングルクォート(')で囲む必要があります。
=MAX('1月 売上'!C2:C13)
シート名を「1月売上」のようにスペースなしにしておくと、クォートで囲む手間が省けて数式もシンプルになります。
MAX関数のよくある質問(FAQ)
Q. マイナスの数しかない範囲でもMAX関数は使えますか?
はい、問題なく使えます。MAX関数は「数値のなかで最も大きい値」を返すので、マイナスの数でも正しく判定します。たとえば =MAX(-5, -2, -8) の結果は -2 です。0より小さい値でも、最も0に近い(=最も大きい)値が返ります。「マイナスだから0が返るのでは」と心配する必要はありません。
Q. 範囲に文字列が混ざっていると、最大値がおかしくなりませんか?
文字列は無視されるだけなので、最大値の判定がおかしくなることはありません。たとえば「85, 山田, 92, 78」のような範囲でも、文字列の「山田」は計算から除外され、数値の「85, 92, 78」だけで判定されて 92 が返ります。ただし、範囲内のすべてが文字列や空白だった場合は、比較できる数値がないため結果が0になります。本文で触れた「結果が0になる」トラブルは、この全セルが文字列型のケースが多いです。
Q. MAX関数で2番目に大きい値は取り出せますか?
MAX関数は1番大きい値だけを返すため、2番目以降はLARGE関数を使います。=LARGE(範囲, 2) で2番目、=LARGE(範囲, 3) で3番目が取得できます。詳しくは本文の「2番目・3番目に大きい値も知りたいときはLARGE関数」をご覧ください。
Q. 同じ最大値が複数ある場合、INDEX+MATCHはどの行を返しますか?
本文で紹介したINDEX+MATCHの組み合わせは、最初に一致した行を返します。たとえば最高売上が100の月が2つあった場合、上から数えて最初に見つかった月名が表示されます。「2件目以降も拾いたい」という場合は、FILTER関数で該当する行をすべて抽出する方法を検討してください。
Q. スマホのGoogleスプレッドシートアプリでも同じ書き方で使えますか?
はい、MAX関数の構文はパソコンとスマホアプリでまったく同じです。=MAX(B2:B8) のように入力すれば動作します。ただしスマホで入力するときは、関数名や記号が全角になっていないかに注意してください。全角の = や全角スペースが混ざるとエラーになります。半角で入力するのが基本です。
まとめ
MAX関数は「範囲内の最大値を返す」シンプルな関数です。文字列・空白・論理値は無視し、数値だけを比較対象にする点を覚えておけば、トラブルなく使えます。
用途別の関数選びフロー
最大値・最小値に関する関数で迷ったら、次のように判断してください。
- 範囲全体の最大値を知りたい →
MAX - 範囲全体の最小値を知りたい →
MIN - 条件付きで最大値を知りたい →
MAXIFS - 条件付きで最小値を知りたい →
MINIFS
次のステップ:関連する集計関数
MAX関数の使い方がわかったら、他の基本集計関数もあわせて覚えてみてください。データ分析の幅がぐっと広がります。
MAX関数で最大値を把握し、MIN関数で最小値を確認し、AVERAGE関数で平均を出す。この3つをセットで使えると、データの全体像がつかめるようになりますよ。