【Excel関数パズル】9通りの方法で合格判定せよ!

【Excel関数パズル】9通りの方法で合格判定せよ! Excel

本記事では、Excel 2021およびMicrosoft 365で動作を確認しています。Excel 2019以前のバージョンでは、一部の数式でCtrl+Shift+Enterによる配列数式確定(CSE確定)が必要になる場合があります。

【Excel関数パズル】IF関数は禁止!?9つの方法で「合格・不合格」を判定せよ!

「Excelで点数が60点以上なら『合格』、未満なら『不合格』って判定する?そんなのIF関数を使えば一発じゃないか。」

そう思ったあなた、もちろん大正解!

もし、実務でこの課題に直面したら、

=IF(B2>=60,”合格”,”不合格”)

と入力するのが、最も簡単で、最も推奨される、100点満点の回答です。

でも、ここは「Excelで暇つぶし」をするブログ。

たった一つの正解だけで満足していては、面白くないですよね?

今回のテーマは、この誰もが知る「合格不合格」判定というシンプルなゴールに対して、あえて回り道をすることで、Excel関数の奥深い世界を探検する、知的な「関数パズル」です。

IF関数はもちろん、TEXTMIDREPTINDEXCHOOSE、そしてまさかのVLOOKUPまで!?

合計9種類ものアプローチで、同じゴールを目指します!

この探求を通して、各関数の意外な特性や、Excelの根本的な挙動についての理解が深まるはずです。
「関数の引き出し」を増やす、最高の暇つぶしを始めましょう!

今回のミッション

現在の状態

以下のような、名前と点数が入力されたシンプルな表があります。

Excelの画像

目指すゴール

C2セルに単一の数式を入力し、スピル機能(または配列数式)を使って、B2:B7の各点数に対応する評価をC列に一括で表示させる。

  • 60点以上 → 合格
  • 60点未満 → 不合格
Excelの画像

アプローチ1:IF関数(王道)

考えかた

まずは基準となる、最も推奨される方法です。

言わずと知れた条件分岐の王様、IF関数を使います。

数式と解説

=IF(B2:B7>=60,"合格","不合格")

IF(論理式, 真の場合, 偽の場合): 指定した「論理式」が真(TRUE)か偽(FALSE)かを判定し、それに応じた値を返します。

B2:B7>=60という条件で、点数範囲の各セルが60以上かどうかを判定。

真なら「合格」、偽なら「不合格」を返します。

Excel 2021以降であれば、この一つの数式で結果がスピルして表示されます。

これ以上ないほどシンプルで、誰が見ても分かりやすいですね。

アプローチ2:IF関数(不等号なし)

考えかた

不等号(>=)を使わずに条件分岐できないか?」という、少しひねくれた発想から生まれたアプローチです。

割り算と整数化の性質を利用します。

数式と解説

=IF(INT(B2:B7/60),"合格","不合格")

INT(数値): 数値の小数点以下を切り捨てて整数にします。

この数式の核心はINT(B2:B7/60)の部分です。

  • 点数が60以上(例: 68)の場合: INT(68/60) → INT(1.13…) → 1
  • 点数が60未満(例: 38)の場合: INT(38/60) → INT(0.63…) → 0

ExcelのIF関数は、論理式部分に0が来ると「偽(FALSE)」、0以外の数値が来ると「真(TRUE)」として扱います。

この性質を利用して、不等号なしでの条件分岐を実現しているのです。

少しトリッキーですが、面白い挙動ですね。

Excelの画像

アプローチ3:TEXT関数

考えかた

前回の記事でも登場した、TEXT関数の表示形式に隠された条件分岐機能を使います。

詳細は前回の記事をご覧ください!

数式と解説

=TEXT(B2:B7,"[>=60]""合格"";[<60]""不合格""")

TEXT(値, 表示形式): 値を指定した表示形式の文字列に変換します。

表示形式の書式コード[>=60]"合格";[<60]"不合格"が、まさにIF関数と同じ働きをしています。

ただし、この方法はExcelの古いバージョンでは意図しない挙動をすることがあるので注意が必要です。

Excelの画像

アプローチ4:MID関数

考えかた

これも以前の記事(MID関数だけで条件分岐)で登場したテクニックです。

不合格」という文字列の中から、条件に応じて「合格」または「不合格」を切り出します。

数式と解説

=MID("不合格",(B2:B7>=60)+1,3-(B2:B7>=60))

MID(文字列, 開始位置, 文字数): 文字列の指定した位置から、指定した文字数分の文字を返します。

条件式B2:B7>=60は、真(TRUE)なら1、偽(FALSE)なら0として計算されます。これにより、

  • 60点以上(真): =MID("不合格", 1+1, 3-1)=MID("不合格", 2, 2) → 「合格
  • 60点未満(偽): =MID("不合格", 0+1, 3-0)=MID("不合格", 1, 3) → 「不合格

と、見事に文字列を切り分けています。まさに関数パズルですね。

Excelの画像

アプローチ5:REPT関数

考えかた

合格」という文字列は固定で、条件を満たさない場合にのみ、その前に「」という文字を追加する、という斬新なアプローチです。

数式と解説

=REPT("",N(B2:B7<60))&"合格"

REPT(文字列, 繰り返し回数): 文字列を指定した回数だけ繰り返します。

この数式の面白い点は、REPT関数の繰り返し回数に0を指定すると、結果が空白(””)になるという挙動を利用している点です。

  • 60点以上(B2:B7<60が偽): REPT(“不”, 0) → “” → 「合格
  • 60点未満(B2:B7<60が真): REPT(“不”, 1) → “” → 「合格

N関数は、TRUE/FALSE1/0に変換するために使っています。

非常にエレガントな発想ですね。

Excelの画像

アプローチ6:INDEX関数

考えかた

数式の中に「不合格」と「合格」が入った、仮想的な2行1列の表を作り、条件によって参照する行を切り替えるアプローチです。

数式と解説

=INDEX({"不合格";"合格"},(B2:B7>=60)+1)

INDEX(配列, 行番号, [列番号]): 配列(範囲)の中から、指定した行と列の位置にある値を返します。

{"不合格";"合格"}の部分で、1行目に「不合格」、2行目に「合格」が入った仮想的な配列を作成しています。

Excelの画像

そして、行番号を指定する部分が(B2:B7>=60)+1です。TRUEは1、FALSEは0として計算されるため、

  • 60点以上(真): 1+1 → 2行目(”合格“)を参照
  • 60点未満(偽): 0+1 → 1行目(”不合格“)を参照

となり、見事に条件分岐を実現しています。

Excelの画像

アプローチ7:CHOOSE関数

考えかた

INDEX関数と非常に似た考え方ですが、こちらは配列ではなく、引数として選択肢を直接並べていきます。

数式と解説

=CHOOSE((B2:B7>=60)+1,"不合格","合格")

CHOOSE(インデックス番号, 値1, [値2], …): 「インデックス番号」に応じて、後ろに続く「値」の中から一つを選んで返します。

やっていることはINDEX関数とほぼ同じです。(B2:B7>=60)+1の結果が12になり、CHOOSE関数は1なら最初の値「不合格」を、2なら2番目の値「合格」を返します。

Excelの画像

アプローチ8:VLOOKUP関数

考えかた

さあ、ここからが本日のハイライトです!

「え、VLOOKUPで条件分岐?」と思ったあなた、正常です。

しかし、普段はFALSE(完全一致)でしか使わないVLOOKUPの、もう一つの顔TRUE(近似一致)を解放する時が来ました。

数式と解説

=VLOOKUP(B2:B7,{0,"不合格";60,"合格"},2,TRUE)

VLOOKUP(検索値, 範囲, 列番号, [検索方法]): 範囲の左端列を検索し、指定した列の値を返します。

まず、{0,"不合格";60,"合格"}の部分で、数式内に以下のような2行2列の仮想的な表を作成しています。

0   不合格
60 合格
Excelの画像

そして、最後の引数をTRUE(近似一致)に設定。

VLOOKUPの近似一致は、「検索値以下の最大値」を探しに行きます。

  • 点数が38の場合: 38以下の最大値は0なので、0の行の2列目、「不合格」を返します。
  • 点数が68の場合: 68以下の最大値は60なので、60の行の2列目、「合格」を返します。
  • 点数が95の場合: 95以下の最大値は60なので、60の行の2列目、「合格」を返します。

どうでしょう!不等号を一切使わずに、見事に条件分岐ができてしまいました。

これぞVLOOKUPの真価の一つです!

Excelの画像

アプローチ9:LOOKUP関数

考えかた

VLOOKUPの近似一致が使えるなら、もっとシンプルな書き方はないだろうか?

あります。それこそが、VLOOKUPの大先輩とも言えるLOOKUP関数です。

数式と解説

=LOOKUP(B2:B7,{0,60},{"不合格","合格"})

LOOKUP(検索値, 検査範囲, [対応範囲]): 検査範囲を検索し、対応範囲の同じ位置にある値を返します。

LOOKUP関数は、VLOOKUPの近似一致とほぼ同じ動きを、よりシンプルな形で実現します。

{0,60}という検査範囲の中から、点数(B2:B7)以下の最大値を探し、それに対応する{"不合格","合格"}の位置にある値を返すのです。

VLOOKUPよりも引数が少なく、非常に可読性が高いですね。

しかも、このLOOKUP関数は、なんと初代Excelよりも前の表計算ソフトLotus1-2-3の時代から存在する、非常に歴史の古い関数です。互換性もバッチリ!

個人的には、今回のパズルで最も推奨したい、美しく、実用的な数式です。

Excelの画像

まとめ

お疲れ様でした!

今回は、「合格不合格」というシンプルな判定を、合計9種類もの異なるアプローチで実現するという、「暇つぶし」に挑戦しました。

王道のIF関数から、文字列操作、そしてVLOOKUPLOOKUPの奥深い「近似一致」の世界まで、様々な関数の意外な顔を見ることができたのではないでしょうか。

実務では、もちろんIF関数や、今回私がお勧めしたLOOKUP関数を使うのがベストです。

しかし、こうして一つの目的に対して、あえて複数のアプローチを考えてみること。

それこそが、Excelの根本的な挙動への理解を深め、あなたの「関数の引き出し」を豊かにする、最高のトレーニングになるのです。

あなたのExcelライフが、また一つ、楽しいものになったなら幸いです!

タイトルとURLをコピーしました