Excelで最大値・最小値といえば、MAX関数やMIN関数、
順位ならLARGE関数やSMALL関数が定番ですよね。
これらはExcelを使う上で、ごく自然な選択です。
しかし皆さん、今回はちょっと違います。
今回の「暇つぶし」では、これらの「当たり前」の関数は一切使いません!
それだけではありません。
集計の鬼AGGREGATE関数やSUBTOTAL関数、RANK系の関数たちも、まとめてお休みいただきます。
そう、完全に封印です!
「じゃあ、どうやって最大値や最小値を見つけるの!?」
と疑問に思いますよね。
「それって、もはやExcelへの挑戦、ほとんど変態的な縛りプレイでは!?」と感じるかもしれません。
その通り!
まさに究極の縛りであり、非実用性の極致とも言える挑戦です(笑)。
この「変態的」な試みから、一体どんな驚きと発見が生まれるか、想像するだけでワクワクしませんか?
「でも、そんな実用性ゼロなことに何の意味が?」
という声も聞こえてきそうです。
ごもっとも!
もちろん日々の業務で推奨はしません。
この一見無駄な挑戦の目的は、あなたがまだ見ぬExcelの奥深さに触れることです。
そして、固定観念を打ち破る「関数を組み合わせる発想」を徹底的に鍛えること。
何より、純粋に「暇つぶし」としてExcelを遊び倒すことなのです!
この奇妙な冒険の果てには、あなたのExcelスキルを新たな次元へと押し上げる、予想外の「発見」が待っているかもしれません。
さあ、常識を捨てて、Excel関数の迷宮へと足を踏み入れましょう!
今回の使用禁止関数:
MAX , MAXIFS , MIN , MINIFS , LARGE , SMALL , AGGREGATE , SUBTOTAL , RANK系
使用可能関数:上記を除くExcel 2021で使用可能な関数。
論理値とCOUNTIF関数のおさらい
さて、今回の「変態技」を実現するために、まずは我々の秘密兵器をご紹介しましょう。
それは、Excelにおける「論理値」の性質と、「COUNTIF関数」のちょっと意外な応用方法です。
これらを理解すれば、あなたもこの「暇つぶし」の面白さにどっぷりハマること間違いなしです!
Excelの論理値(TRUE=1, FALSE=0):この「変態技」の核心!
Excelを使っていると、TRUE(真)やFALSE(偽)といった論理値に出会うことがありますよね。
実はこれらの論理値、Excelの計算の中では、
こっそりと数値の「1」や「0」として扱われているのです!

まるでExcelが裏で小さな電卓を叩いているかのように、論理値を数値に置き換えて計算を進めてくれます。
この一見地味な特性が、今回の最大・最小値算出テクニックのまさに核心部分です!
この魔法のような性質を頭の片隅に置いておいてください。
後で「なるほど、そういうことか!」と膝を打つことになりますよ。
COUNTIF関数のおさらいと応用
次なる秘密兵器は、皆さんおなじみのCOUNTIF関数です。
その基本構文はシンプルですね。
=COUNTIF(範囲, 検索条件)
指定した範囲の中から、検索条件に一致するセルの個数を数えてくれます。
例えば、=COUNTIF(A1:A6, "リンゴ")
とすれば、
A1からA6の範囲にある「リンゴ」の数を教えてくれます。

しかし!
今回我々が使うのは、このCOUNTIF関数の応用技です。
それは、検索条件に比較演算子とセル参照を文字列として結合して使うというテクニックです!
具体的には、">"&A1
や "<"&A1
のような形です。
もしA1セルに 10
という数値が入っていたら、COUNTIF(A1:A6, ">"&A1)
はどうなるでしょうか。
これは、COUNTIF(A1:A6, ">10")
と同じ意味になります。
つまり、A1:A6の範囲内で「10より大きい数値がいくつあるか」を数えてくれます。
「え、そんなことができるの!!?」と驚かれるかもしれませんね。
そうなんです!
この機能の何が面白いかというと、数式を配列数式として使うことで、範囲内の各数値に対して処理を行える点です。
「自分自身より大きい数値がいくつあるか」あるいは「自分自身より小さい数値がいくつあるか」を、一気にリストアップできるのです。

このように独特な使い方が、今回の「MAX/MIN関数なし」ロジックの出発点です。
さあ、いよいよ本丸の数式構築に挑戦です!
ワクワクしてきましたか?
【アプローチ1】「自分より大きい/小さい数がない」を探し出せ!INDEX/MATCHとCOUNTIFの組み合わせ
最初のアプローチでは、先ほどご紹介したCOUNTIF関数の応用が活躍します。
さらに、Excelの強力な検索コンビであるINDEX関数およびMATCH関数との合わせ技を見ていきましょう。
「論理的に考えれば、こうなるはず!」という、パズルのピースがはまるような面白さがありますよ。
考え方
まず、最大値のロジックについて考えてみましょう。
ある数値が範囲内の「最大値」であるということは、一体どういうことでしょうか?
それは、その範囲内に「自分自身より大きい数値が一つも存在しない」ということです。
COUNTIF関数を使って「自分より大きい数値の個数」を調べたとき、
その個数が「0」になるはずですよね?

そうです、最大値だけがこの「0」の称号を手にすることができるのです!
この「0」を手がかりにして、最大値を見つけ出します。
続いて、最小値のロジックです。
同様に、ある数値が範囲内の「最小値」であるということはどうでしょうか。
それは、その範囲内に「自分自身より小さい数値が一つも存在しない」ということです。
つまり、「自分より小さい数値の個数」を調べた結果が「0」になるものが最小値です。
こちらも「0」がキーワードとなります。
このシンプルなロジックを、Excel関数でどのように表現するのか?
まさに腕の見せ所です!
具体的な数式とステップ解説
最大値の数式とステップ
私たちのデータは、A1からA6の範囲に入っているとしましょう。
まず、最大値を求める数式はこちらです。
=INDEX(A1:A6, MATCH(0, COUNTIF(A1:A6, ">"&A1:A6), 0))
さあ、この一見複雑な数式を分解していきましょう!
第一のステップは、COUNTIF(A1:A6, ">"&A1:A6)
の部分です。
これが魔法の始まり!
この部分は、A1からA6の各セルに対し、「その値より大きい数値がA1:A6内にいくつあるか」を計算し、結果を配列で返します。
例えば、A1:A6 が {10, 20, 5, 20, 15, 8}
なら、{3;0;5;0;2;4}
のような配列が作られます。

ご覧ください!
最大値「20」に対応する部分だけが「0」になっていますね!

これが「0」の場所を突き止める探偵役です!
第二のステップは、MATCH(0, COUNTIF(A1:A6, ">"&A1:A6), 0)
です。
次に登場するMATCH関数が、先ほどCOUNTIF関数が作った配列から、
最初の「0」の位置を探します。
ここでは検査値「0」、照合の種類「0」(完全一致)で検索します。

先の例の配列なら、「2」(2番目)を返します。
まるで、狙った獲物(0)を逃さないハンターのようです!
最後のステップは、INDEX(A1:A6, MATCH(...))
です。
最後に控えるINDEX関数が、元のデータ範囲A1:A6の中から、先ほどMATCH関数が特定した行番号の値を取り出します。
つまり、「A1:A6の範囲の、指定された行番号の値をください!」と指示し、
見事、最大値「20」をゲットできるのです!

まるで、その場所から宝物を取り出す最終ミッションのようですね。
重要なお知らせ!
この数式は「配列数式」と呼ばれる特殊なものです。
Excel 2021以降では多くの場合、Enterキーだけで正しく計算されます。
しかし、古いバージョンのExcelや特定の状況では、
入力後にCtrl + Shift + Enterキーを同時に押して確定する必要があります!
これをやらないと期待通りの結果にならないことがあるので、この儀式、忘れないでくださいね!
最小値の数式とステップ
さて、最大値が分かれば最小値も同様のロジックで求められます。
どこが変わるか、もうお分かりですね?
最小値を求める数式はこうなります。
=INDEX(A1:A6, MATCH(0, COUNTIF(A1:A6, "<"&A1:A6), 0))
まず、COUNTIF(A1:A6, "<"&A1:A6)
の部分です。
今度は、A1からA6の各セルに対して、「そのセルの値よりも小さい数値が、A1:A6の中にいくつあるか」を計算します。

最小値に対応する部分だけが「0」になるはずです。
その後のMATCH関数とINDEX関数の働きは最大値の時と全く同じです。
最小値の場所で輝く「0」を探し出し、その場所にある実際の値を取り出します。
もちろんこちらも配列数式ですよ!
Ctrl + Shift + Enter をお忘れなく!

どうですか?
禁止された関数を使わなくても、このようにロジックを組み立てれば最大値・最小値が見つけられるなんて、ちょっとした発見じゃありませんか?
このパズルを解くような感覚、まさに「Excel暇つぶし」の醍醐味です!
【アプローチ2】論理値の掛け算!SUM関数の配列数式応用
次なるアプローチは、さらに「変態度」が増すかもしれません(笑)
Excelの論理値が数値(TRUE=1, FALSE=0)として扱える特性を最大限に活かします。
そして、SUM関数を予想外の方法で使って最大値・最小値を「ゴリ押し」で求めます!
考え方
まず、最大値のロジックです。
ここでも基本は同じです。
「自分より大きい数値が0個である」という条件を満たすものが最大値です。
この条件を満たすかどうかをTRUE/FALSEで判定します。
そして、このTRUE/FALSE(つまり1か0)を元の数値に掛け算するのです。
するとどうなるでしょう?
- 最大値のセル: 元の数値 × TRUE (1) = 元の数値
- それ以外のセル: 元の数値 × FALSE (0) = 0
こうして、最大値のセルだけが元の値を保ち、他はすべて0になる配列が出来上がります。
最後にこの配列の要素をすべて合計(SUM)すれば、あら不思議、最大値だけが残る(もし最大値が一つなら)という寸法です!
次に、最小値のロジックです。
同様に、「自分より小さい数値が0個である」という条件でTRUE/FALSEを判定します。
そして、元の数値に掛け算します。
最小値のセルだけが残り、他は0になります。
最後にSUMすれば最小値が求まります。
この「論理値との掛け算」というテクニック、Excelの奥深さを感じさせますよね。
具体的な数式とステップ解説
引き続き、データはA1からA6の範囲です。(別の数値でやってみましょう!)

最大値の数式とステップ
数式は以下の通りです。
=SUM(A1:A6 * (COUNTIF(A1:A6, ">"&A1:A6)=0))
この数式も、一つ一つ見ていきましょう。
第一のステップは、COUNTIF(A1:A6, ">"&A1:A6)=0
です。
これは COUNTIF(A1:A6, “>”&A1:A6) の結果が「0」と等しいかどうかを判定する部分です。
つまり、「各セルについて、それより大きい数値が0個であるか?」を調べています。

結果として、各セルが最大値であればTRUE、そうでなければFALSEとなる論理値の配列が返されます。
これが強力なフィルター役となるのです!
第二のステップは、A1:A6 * (COUNTIF(A1:A6, ">"&A1:A6)=0)
です。
ここがこのアプローチの肝!
元のデータ配列 A1:A6 と、先ほど作成したTRUE/FALSEの配列を掛け算します。
Excelでは、計算の際にTRUEは1、FALSEは0として扱われます。
そのため、元の値にTRUE(1)をかけると元の値、FALSE(0)をかけると0になります。

まさに魔法のようでしょう?
これにより、最大値であるセルだけが元の値を保持し、
他はすべて0になった数値配列が生成されます。
最後のステップは、SUM(...)
です。
最後に、この A1:A6 * (…) で得られた配列の要素をすべて合計します。
最大値だけが残り(もしくは最大値が複数ある場合はその合計)、
他は0なので、結果として最大値(の合計)が得られます。

ちょっと待った!注意点!
この数式、もし最大値が範囲内に複数存在する場合、それらの合計が返ってきます。

純粋な最大値「一つ」を特定したい場合は先ほどのアプローチ1の方が適しています。
しかし、この「合計されちゃう」という挙動もまた、
関数の面白い一面であり、なかなかユニークな結果だと思いませんか?
この「副作用」もまた「暇つぶし」のネタになります。
そして、お約束です!
この数式もCtrl + Shift + Enterで確定するのを忘れないでくださいね!
最小値の数式とステップ
最小値も、もうお手の物ですね!
数式はこうなります。
=SUM(A1:A6 * (COUNTIF(A1:A6, "<"&A1:A6)=0))
まず、COUNTIF(A1:A6, "<"&A1:A6)=0
で、各セルが最小値であるか(それより小さい数値が0個か)をTRUE/FALSEで判定します。
次に、それを元の数値配列 A1:A6 に掛け算し、最小値以外の数値を0にします。
最後にSUM関数で合計します。(最小値が一つならその値、複数あればそれらの合計です。)
もちろん、これもCtrl + Shift + Enterです!

この論理値の掛け算を使ったアプローチ、いかがでしたか?
一見すると「なんでこれで?」と思うかもしれません。
しかし、ステップを追っていくと、その巧妙なロジックに「なるほど!」と唸ってしまうはずです。
これぞExcel関数の奥深さ、そして「変態的」なまでの柔軟性です!
まとめ:MAX/MINなしでも答えを出せる!
今回は、「MAX/MIN/LARGE/SMALL関数、さらにはAGGREGATE/SUBTOTAL/RANK系関数まで一切使わずに最大値・最小値を求める」という、「暇つぶし」に挑戦しました。
COUNTIF関数の意外な使い方、論理値の数値変換、そしてINDEX/MATCHやSUM関数との配列数式としての連携。
一見すると無謀で「変態的」なこの試みが、実はExcelが持つ驚くべき柔軟性と計算能力を示してくれたのではないでしょうか。
そして何よりもその「奥深さ」を鮮やかに見せてくれたと思います。
もちろん、明日からの業務でこれらの数式をドヤ顔で使う必要はありません(笑)
でも、ぜひ一度、この全く実用的でない(これは最大限の褒め言葉です!)テクニックをご自身のExcelで実際に試してみてください。
きっと、「おおっ!」「なるほど!」といった小さな感動と「発見」があり、Excelというツールの懐の深さを改めて味わうことができるはずです。
そして、この「暇つぶし」が、あなたの日常業務における関数利用のヒントとなるかもしれません。
Excelの世界は、まだまだ我々の知らない「ワクワク」で満ち溢れていますよ!