関数の一覧でMAXA関数を見かけて、「MAXと何が違うの?」と気になったことはありませんか。あるいは、ExcelでMAXAを使ったら、負の数しかない表なのに最大値が「0」や「1」になって戸惑ったかもしれません。
原因はシンプル。MAXAは、MAXが無視する値まで数に置き換えて比べる関数なんです。先に結論をまとめておきます。
- 範囲内の TRUEは1、FALSEと文字列は0 として比べる
- MAXは、範囲内のTRUE・FALSE・文字列をどれも無視する
- 迷ったら普段はMAX関数。TRUE/FALSEを1/0として比べたいときだけMAXA
この記事では、値の種類ごとの扱いを1枚の判定表にまとめました。結果が0や1になる原因と対処、実務での使いどころまで順に見ていきましょう。
ExcelのMAXA関数とは?MAXとの違いは「TRUE・文字列を数えるかどうか」
MAXA関数は、指定した値や範囲の中から最大値を返す関数です。MAXとの違いは、範囲内の論理値(TRUE/FALSE)や文字列を「数」として比べるかどうか。この1点に尽きます。
読み方と基本の動き(TRUE=1、FALSE・文字列=0)
読み方は「マックスエー」。MAXの後ろに「A」が付いた名前で、MINA・AVERAGEAなど同じ「A付き」の仲間があります。論理値や文字列まで含めて(All)扱う版、と覚えると区別しやすいでしょう。
MAXAは、範囲内の値を次のように置き換えてから最大値を探します。
- 数値 → そのまま
- TRUE → 1
- FALSE → 0
- 文字列(「欠席」など) → 0
- 空白セル → 無視
たとえば範囲に「-5」「TRUE」「欠席」が入っているとします。MAXは「-5」だけを見るので、結果は-5です。MAXAは「-5、1、0」として比べるため、結果は1になります。
MAXとMAXAの違いを1枚の表で比較
両者の違いを1枚の表にまとめました。書き方は同じで、違うのは「範囲内の数値以外の値」の扱いだけです。
| 比較項目 | MAX関数 | MAXA関数 |
|---|---|---|
| 範囲内のTRUE | 無視する | 1として比べる |
| 範囲内のFALSE | 無視する | 0として比べる |
| 範囲内の文字列 | 無視する | 0として比べる |
| 空白セル | 無視する | 無視する |
| 数値だけの範囲 | 同じ結果 | 同じ結果 |
| 構文 | =MAX(範囲) | =MAXA(範囲) |
| 対になる最小値の関数 | MIN | MINA |
Microsoftの説明には「配列や参照の中の空白セルと文字列は無視される」と読める一文もあります。ただ同じページに「文字列を含む引数は0と評価される」とも書かれていて、読み方が揺れやすいところ。Exceljetの解説でも、範囲内の文字列は0として評価されると説明されています。
MAXとMAXAはどっちを使う?判断基準
結論として、普段使いはMAXで十分です。Microsoftも、論理値や数値を表す文字列を計算から外したいならMAXを使うよう案内しています。
MAXAを選んでよいのは、TRUE/FALSEを1/0として比べたいとき だけ。合否や出欠をTRUE/FALSEで記録した列が、ほぼ唯一の出番と考えておきましょう。
ほかの「A付き」関数も考え方は似ています。AVERAGEA関数は、TRUE/FALSEや文字列も数に置き換えて平均を出す関数です。一方、COUNTA関数は「空白以外のセルを数える」関数で、同じA付きでも役割が違います。
条件付きの最大値ならMAXIFS関数、2番目以降に大きい値ならLARGE関数が向いています。
MAXA関数の書き方と引数(直接入力とセル参照で扱いが変わる)
MAXAの構文はMAXとまったく同じ。ただし、値をセル範囲で渡すか、引数に直接書くかで扱いが変わります。ここを押さえておくと、思わぬ結果に振り回されません。
構文と引数
=MAXA(値1, [値2], ...)
| 引数 | 必須/省略可 | 内容 |
|---|---|---|
| 値1 | 必須 | 最大値を求めたい数値・セル参照・セル範囲 |
| 値2以降 | 省略可 | 追加で比べたい値や範囲(引数は最大255個) |
対応バージョンはMicrosoft 365、Excel 2024・2021・2019・2016など。MAXA単体には版による違いはありません。
セル範囲で指定したときの扱い
=MAXA(B2:B10) のように範囲を渡すと、前の章の表どおりに扱われます。TRUEは1、FALSEと文字列は0、空白セルは無視です。
注意したいのは、数値に見える文字列も0になる点。先頭に「’」を付けて入力した「’5」や、CSVから取り込んで文字列のままの数値がこれにあたります。MAXAは範囲内のこうした値を「5」ではなく「0」として比べます。
数式が返す空文字「””」も同じ扱い。見た目は空白でも、中身は文字列なので0として数えられます。本当に何も入っていない空白セルとは扱いが違うわけです。
引数に直接入力したときの扱い(”abc” は #VALUE!)
引数に値を直接書いた場合は、MAXとMAXAで差がなくなります。論理値と、数値を表す文字列は、どちらの関数でも計算に含まれるからです。
=MAX(TRUE, -3) → 1
=MAXA(TRUE, -3) → 1
=MAXA(FALSE, -3) → 0
=MAX(5, "10") → 10
=MAXA(5, "10") → 10
=MAX(5, "abc") → #VALUE!
=MAXA(5, "abc") → #VALUE!
直接入力した "10" は数値の10として扱われます。一方、"abc" のように数値に変換できない文字列は、MAX・MAXAとも#VALUE!エラーです。範囲内なら0になる文字列も、直接書くとエラーになる点に気をつけてください。
MAXとMAXAで結果が変わる例(値の種類別の早見表)
ここからは、MAXとMAXAの結果がどこで分かれるのかを具体的に確かめます。まず判定表で全体像をつかみ、次に同じ表へ両方の数式を並べてみましょう。
値の種類 × 入れ方の判定表
値の種類と入れ方の組み合わせごとに、MAX・MAXAがどう扱うかをまとめました。
| 値の種類 | MAX・セル範囲 | MAXA・セル範囲 | MAX・直接入力 | MAXA・直接入力 |
|---|---|---|---|---|
| 数値 | 比べる | 比べる | 比べる | 比べる |
| TRUE | 無視 | 1 | 1 | 1 |
| FALSE | 無視 | 0 | 0 | 0 |
| 文字列「欠席」 | 無視 | 0 | #VALUE! | #VALUE! |
| 数値に見える文字列「’5」 | 無視 | 0 | 数値(”5″→5) | 数値(”5″→5) |
| 数式が返す空文字「””」 | 無視 | 0 | - | - |
| 空白セル | 無視 | 無視 | - | - |
| エラー値(#N/Aなど) | エラー | エラー | エラー | エラー |
※「-」はセルにしかない状態のため、直接入力の対象外です。この表はMicrosoftの公式説明とExceljetの解説に基づいています。文字列・「’5」・「””」の行は「範囲内の文字列は0として評価される」という説明からの整理です。
太字のマスが、MAXとMAXAで結果が分かれるところ。いずれも「セル範囲」の列に集中しています。
同じ表にMAXとMAXAを並べて比べる
負の数が並ぶ列に、パターンごとに1つだけ別の値を混ぜてみます。B〜F列のデータは2〜5行目、6行目にMAX、7行目にMAXAの結果を置きました。
| 行 | B: 数値だけ | C: 文字列あり | D: TRUEあり | E: 数式の””あり | F: 空白あり |
|---|---|---|---|---|---|
| 2 | -3 | -3 | -3 | -3 | -3 |
| 3 | -7 | -7 | TRUE | -7 | -7 |
| 4 | -1 | 欠席 | -1 | “”(数式) | (空白) |
| 5 | -9 | -9 | -9 | -9 | -9 |
| 6: MAX | -1 | -3 | -1 | -3 | -3 |
| 7: MAXA | -1 | 0 | 1 | 0 | -3 |
6行目と7行目には、それぞれ次の数式を入れています(B列の例。C〜F列も同じ形です)。
=MAX(B2:B5)
=MAXA(B2:B5)
C列とE列では、「欠席」と数式の「””」が0として数えられ、MAXAの結果が0になりました。D列はTRUEが1になり、結果は1です。F列の空白セルはどちらの関数も無視するので、MAXと同じ-3が返ります。
E列とF列は、画面上ではどちらも空いているように見えるはず。それでも結果が違うのは、E列のセルに「””」を返す数式が入っているからです。
数値だけの範囲なら結果は同じ
範囲に数値しかなければ、MAXとMAXAの結果は変わりません。
=MAX(80, 95, 72) → 95
=MAXA(80, 95, 72) → 95
文字列やTRUEが混ざっていても、数値の最大値が1以上なら結果は同じになります。0として数える値も、1として数えるTRUEも、最大値を超えないからです。MAXAとMAXの差が表に出るのは、主に負の数や0〜1の小数を扱う列だと覚えておきましょう。
MAXA関数の実務での使い方
MAXAが役立つ場面は多くありません。そのなかで「MAXAだからこそ」書ける使い方を3つ紹介します。
TRUE/FALSEの列で「1つでもTRUEがあるか」を判定する(ORとの選び方)
合否をTRUE/FALSEで記録した列があるとします。C2:C6に「TRUE、FALSE、FALSE、TRUE、FALSE」が入っている例で考えてみましょう。
=MAXA(C2:C6) → 1
=MAXA(C2:C6)=1 → TRUE
TRUEが1つでもあれば最大値は1、すべてFALSEなら0になります。=MAXA(C2:C6)=1 と書けば、「合格者が1人でもいるか」をTRUE/FALSEで返せるわけです。
ただし、これは列に数値が入っていない場合に限ります。2以上の数値が混ざると、結果が1を超えてしまうからです。同じ判定は =OR(C2:C6) でもでき、こちらのほうが意図が読み取りやすいでしょう。「1/0の数値で欲しいならMAXA、TRUE/FALSEで欲しいならOR」と使い分けるのがおすすめです。
MINAと組み合わせて「全員同じ結果か」を確認する
最小値版のMINA関数と組み合わせると、論理値の列が全部そろっているかを確認できます。
=MAXA(C2:C6)-MINA(C2:C6)
全員TRUEなら1-1で0、全員FALSEなら0-0で0。TRUEとFALSEが混ざっていれば1-0で1になります。前の例のC2:C6はTRUEとFALSEが混在しているので、結果は1です。
注意点として、「未受験」のような文字列はFALSEと同じ0として数えられます。文字列が混ざる列では、その行をFALSE扱いしてよいか確かめてから使いましょう。
MAXとMAXAの差で文字列・””の混入を見つける
負の数を扱う列なら、MAXとMAXAの差がデータ点検に使えます。
=MAX(B2:B20)<>MAXA(B2:B20)
結果がTRUEなら、範囲のどこかに0や1として数えられる値が混ざっている合図。「未集計」などの文字列や、数式が返す「””」、TRUEが候補です。前年差や損益など、マイナスが並ぶ列のチェックに向いています。
ただし、数値の最大値が1以上の列では差が出ません。前の章で見たとおり、0や1として数える値が最大値を超えないからです。正の数ばかりの列では、この方法で混入を見つけられない点に注意してください。
MAXAの結果が0・1・エラーになるときの原因と対処
MAXAで想定外の値が返るときは、原因はたいてい次の4つのどれかです。症状から当てはまるものを探してください。
負の数のデータなのに0になる(文字列や数式の””が0扱い)
負の数しかないはずの列でMAXAが0を返すなら、0として数えられる値が混ざっています。よくあるのは次の3つ。
- 「欠席」「未入力」などの文字列
=IF(B2="","",B2-C2)のように、条件によって「””」を返す数式- FALSE
特に2つ目は、セルが空いて見えるので気づきにくい原因です。数式バーで中身を確かめると、「””」を返す数式が入っているのが分かります。
対処はMAXに切り替えること。MAXなら文字列も「””」も無視するので、負の数のなかで本当の最大値が返ります。TRUE/FALSEを数えたいわけでなければ、そもそもMAXAを使う理由がありません。
なお、範囲に数値が1つもなく、文字列や空白だけのときは、MAXもMAXAも0を返します。MAXAでは文字列が0として数えられるためです。
TRUEが1つあるだけで1になる
数値の最大値が1未満の列にTRUEが1つでも混ざると、MAXAの結果は1になります。負の数や、0.8のような小数を扱う列で起きやすい現象です。
数値の最大値を知りたいなら、ここでもMAXを使いましょう。数値とTRUE/FALSEを同じ列に入れていること自体が原因の場合は、合否などのフラグを別の列に分けると集計しやすくなります。
数値が文字列で保存されていて正しい最大値にならない
「’45」のように数値が文字列で保存されていると、MAXもMAXAも正しい最大値を返しません。たとえば範囲に「12」「’45」「30」が入っているケースです。
=MAX(B2:B4) → 30
=MAXA(B2:B4) → 30
本当の最大値は45のはず。MAXは「’45」を無視し、MAXAは0として数えるため、どちらも30になってしまいます。環境によってはセルの左上に緑の三角が出て、文字列で保存されている合図になります。=ISNUMBER(B3) がFALSEを返す場合も同じです。
関数を替えても解決しないので、データを数値に変換しましょう。一括で直す方法は文字列として保存された数値を一括変換する方法にまとめています。
#N/Aなどのエラー値が混ざっている
範囲に#N/Aや#DIV/0!などのエラー値があると、MAXもMAXAもエラーを返します。まずは元データのエラーを直すのが基本です。
元データを直せない場合は、AGGREGATE関数でエラー値を無視して最大値を求められます。
=AGGREGATE(4, 6, B2:B20)
第1引数の「4」が最大値、第2引数の「6」が「エラー値を無視する」指定です。AGGREGATEはExcel 2010以降で使えます。使い方の詳細はAGGREGATE関数の解説を参考にしてください。
なお、AGGREGATEで無視できるのはエラー値です。TRUE/FALSEを1/0として比べたい列では、エラーを元データ側で直すのが確実です。元の数式をIFERRORで囲んで「””」を返す方法もありますが、その「””」はMAXAで0として数えられる点に注意しましょう。
まとめ(よくある質問)
MAXA関数のポイントを振り返ります。
- 範囲内の TRUEは1、FALSEと文字列は0 として比べる。空白セルは無視
- 数式が返す「””」や、文字列で保存された「’5」も範囲内では0扱い
- 引数に直接書いた論理値・数値の文字列は、MAXでもMAXAでも計算に含まれる。”abc”は#VALUE!
- 負の数の列で0、TRUEがあると1になるのは、この置き換えが原因
- 普段はMAX。TRUE/FALSEを1/0として比べたいときだけMAXA
MAXとMAXAはどっちを使えばいい?
基本はMAXです。MAXAが必要になるのは、TRUE/FALSEを1/0として比べたい場面だけ。迷ったときにMAXAを選ぶと、文字列や「””」が0として紛れ込み、負の数の列で誤った結果が出るおそれがあります。
空白セルは0として数えられる?
本当に何も入っていない空白セルは、MAXでもMAXAでも無視されます。ただし、数式が返す「””」は見た目が空白でも文字列なので、MAXAでは0として数えられます。空いて見えるセルがあるときは、数式が入っていないか確かめてみてください。
GoogleスプレッドシートでもMAXAは使える?
はい、GoogleスプレッドシートにもMAXA関数があります。使い方はスプレッドシートのMAXA関数の使い方で解説しているので、あわせて参考にしてください。