Excelで成績表などを扱っていると、
「すべての科目が基準点以上だったら合格!」みたいな判定をしたい時って、ありますよね!
例えば、全科目が50点以上かどうかをチェックする、なんていう場面。
もちろん、普通にIF関数とAND関数を組み合わせれば、すぐに実現できます。
でも…。
なんだか無性に他の方法も試してみたくなる時って、ありませんか?
このシンプルな条件判定、もっと違うアプローチはないだろうか…?
関数をいじくり回したら、どんな数式が生まれるんだろう…?
そんなあなたに贈る、今回の暇つぶし企画!
今回のテーマは、
「名前と各科目の点数が入力されたリストから、全科目が50点以上なら1、そうでなければ0と表示する」
というものです。
え、普通にIFとANDで良いのでは…?
はい、実務ではそれが一番分かりやすいことが多いです!(笑)
でも、今回はあえて色々な関数を使って、しかも少しマニアックな方法も含めて挑戦してみるのが醍醐味。
今回の目的は、
「Excel関数の様々な使い方や、数式の組み立て方の引き出しを増やすこと!」です。
「こんな短い数式でできるんだ!」
「この関数、こんな判定にも使えるのか!」
こうした発見を通して、あなたのExcel関数に対する見方が、ちょっぴり変わる…かもしれませんよ?
もちろん、中には「え、こんな書き方する人いる?」なんて思う方法も登場します(笑)
ですが、一つのことを複数のアプローチで実現できると知っておくことは、
問題解決の際の思考の柔軟性や、応用力につながるはずです。
さあ、まずはExcelシートを用意して、今回も関数パズルの世界を覗いてみましょう!
今回のミッション
本記事では、Excel 2021を使用して検証および数式の作成を行っています。
現在の状態とゴール
まず、現在の状態を確認しましょう。
A列に名前(8人分)、B列からF列にかけて、国語、算数、理科、社会、英語の点数がそれぞれ入力されているシートを想定します。

次に、目指すゴールです。
この表の右側(H列以降)に、関数だけを使って判定結果を表示させます。
具体的には、
各生徒のすべての科目が50点以上であれば「1」、
そうでなければ「0」と表示させます。
ルール
今回の挑戦にも、いくつかルールがあります。
- 関数縛り: 使用するのはExcelの「関数」のみ!VBA(マクロ)は使いません。
- バージョン: Excel 2021 で利用可能な関数を使用します。(筆者の環境に合わせます!)
- 見やすさ重視: 数式の分かりやすさや結果の見やすさも、少しだけ意識してみましょう!
データの準備
まず、お手元のExcelで、簡単な成績表のようなデータを作成してみてください。
A列に名前、B列からF列に各科目の点数を入力します。
点数は自由に変更していただいて構いません。
または以下からサンプルデータ excel_de_himatsubushi018.xlsx(12KB)をダウンロードします。
準備はいいですか?
それでは、頭の体操、スタートです!
方法1:誰が見ても分かりやすい! IFとANDの王道コンボ
考えかた
はじめに、最もスタンダードで、誰が見ても理解しやすい方法からご紹介します。
条件判定といえばIF関数ですね。
そして、複数の条件をすべて満たすかチェックするならAND関数です。
この二つを組み合わせるのが、まさに王道と言えるでしょう。
具体的な考え方はとてもシンプルです。
「もし(IF)、国語が50点以上 かつ(AND) 算数が50点以上 かつ 理科が50点以上 かつ 社会が50点以上 かつ 英語が50点以上 ならば 1 を、そうでなければ 0 を表示する」という流れになります。
手順
数式入力
まず、H2セルに以下の数式を入力します。
=IF(AND(B2>=50, C2>=50, D2>=50, E2>=50, F2>=50), 1, 0)

コピー
次に、Enterキーで確定した後、
下方向にドラッグして、H9セルまで数式をコピーします。

解説
この数式のポイントは非常にシンプルです。
ここで使われている主な関数について見ていきましょう。
AND関数について
AND関数は、AND(条件1, 条件2, …) の形で使います。
指定したすべての条件がTRUE(真)の場合にTRUEを返します。


今回は、B2からF2までの各セルが50以上であるか、という5つの条件を指定しています。
IF関数について
IF関数は、IF(論理式, 真の場合, 偽の場合) の形で使います。
まず、AND関数の結果(すべての科目が50点以上ならTRUE、そうでなければFALSE)を「論理式」として受け取ります。
そして、TRUEなら「真の場合」の値である 1 を、FALSEなら「偽の場合」の値である 0 を返します。

メリット&デメリット
- メリット:
- 数式の意味が非常に分かりやすい。
- Excelの基本的な関数なので、ほとんどのバージョンで使える。
- デメリット:
- 条件(科目数)が増えると、AND関数の中身が長くなる。
方法2:とにかく短く! AND関数の配列処理マジック
考えかた
方法1は分かりやすいですが、ちょっと数式が長いな…と感じた方、いませんか?
そこで、もっとコンパクトに書く方法をご紹介します。
ここでは、AND関数のちょっとした応用テクニックを使います。
実は、AND関数は引数にセル範囲を直接指定することもできます。
AND(B2:F2>=50) のように書くと、B2からF2の各セルが50以上かどうかを判定した結果(TRUE/FALSEの配列)を内部で処理してくれます。

重要なのは、すべての結果がTRUEの場合のみ、AND関数はTRUEを返すという点です。

さらに、ExcelではTRUEは計算上「1」、FALSEは「0」として扱われます。

この性質を利用します。
AND関数の結果(TRUE/FALSE)に *1 を掛けてあげることで、
TRUEなら1、FALSEなら0という数値に変換してしまおう!という考え方です。
手順
数式入力
まず、I2セルに以下の数式を入力します。
=AND(B2:F2>=50)*1

コピー
次に、H列と同様に、I2セルからI9セルまで数式をコピーします。

解説
この短い数式のポイントは主に2つです。
AND関数の配列処理
まず、AND(B2:F2>=50) 部分で、B2からF2の範囲にあるすべてのセルが50以上であるかを一括で判定します。
一つでも50未満があれば、AND関数はFALSEを返します。
*1 による数値化
次に、AND関数の結果はTRUEまたはFALSEです。

これに *1 を掛けることで、TRUE * 1 = 1、FALSE * 1 = 0 となります。
これにより、目的の数値(1か0)を得ることができます。
IF関数を使わずに済むのがポイントですね!
メリット&デメリット
- メリット:
- 数式が非常に短い!
- 科目数が増えても、範囲指定(例: B2:F2)を変えるだけで対応可能。
- デメリット:
- *1 の意味を知らないと、少し戸惑うかもしれない。
- (稀ですが)AND関数が配列を引数に取る挙動は、古いバージョンでは意図通りに動かない可能性もゼロではありません。(Excel 2021では問題ありません)
方法3:発想の転換? 最小値を使ってみる!
考えかた
さて、ここからは少し違う角度からのアプローチです。
「すべての科目が50点以上」ということは、言い換えることができます。
つまり、「点数の中で一番低い点数が50点以上」である、とも考えられますよね?
もし最低点が50点未満なら、
その時点で「すべての科目が50点以上」という条件は満たせません。
この考え方を利用するのが、MIN関数です!
まず、MIN関数で指定した範囲(各科目の点数)の最小値を求めます。

次に、その最小値が50以上かどうかを比較演算子 >= で判定します。
結果はTRUEまたはFALSEになりますね。
これを数値の1または0に変換する必要があるのですが、
ここで *1 の代わりにN関数を使ってみましょう!
N関数は、引数がTRUEなら1、FALSEなら0、数値ならその数値を、それ以外なら0を返すという、ちょっと面白い関数です。
これを使えば、TRUE/FALSEをスマートに1/0に変換できます。
手順
数式入力
まず、J2セルに以下の数式を入力します。
=N(MIN(B2:F2)>=50)

コピー
次に、H列、I列と同様に、J2セルからJ9セルまで数式をコピーします。
解説
この数式の流れを見ていきましょう。
MIN関数による最小値の計算
まず、MIN(B2:F2) で、B2からF2の範囲にある点数の最小値を計算します。
例えば、ある行の点数が「88, 85, 95, 76, 38」なら、最小値は38です。

別の行が「53, 81, 96, 60, 89」なら、最小値は53です。
比較演算による判定
次に、MIN(…)>=50 で、計算された最小値が50以上であるかを判定します。

最小値が38ならFALSE、最小値が53ならTRUEとなります。

N関数による数値化
最後に、N(…) で、比較演算の結果(TRUEまたはFALSE)を数値に変換します。
FALSEなら0、TRUEなら1が返されます。

メリット&デメリット
- メリット:
- 「最小値」という異なる視点からのアプローチで面白い。
- 数式が比較的短く、理解しやすい。
- N関数という、少しマイナー?な関数の使い方も学べる。
- デメリット:
- MIN関数の計算が入るため、超大量データではAND関数よりほんのわずかに計算負荷が高い…かもしれません。(通常は気にするレベルではありません)
方法4:一撃必殺!? 配列数式でまとめてドン!
考えかた
これまでの方法は下にコピーする必要がありましたが、
Excel 2021以降の「スピル」で一気に表示させたいですよね!
そこで、行列計算を使った少し高度な方法に挑戦です。
使うのはMMULT関数、TRANSPOSE関数、COLUMN関数。
なんで行列?
と思いますよね?考え方はこうです。
まず、各科目が50点以上なら1、そうでなければ0という行列を作ります。(N関数を使います)
次に、この行ごとの「1の数(=50点以上の科目数)」を数えたい。
ここでMMULT関数の出番!
うまく行列を組み合わせる(TRANSPOSEやCOLUMNで補助的な行列を作ります)ことで、
行ごとの合計を一気に計算できるんです。
最後に、その合計が科目数の「5」に等しいかを判定し、結果をN関数で1か0に変換します。
ちょっと複雑に見えますが、
これで一つのセルに数式を入れるだけで、スピル機能が結果をズラッと表示してくれますよ!
手順
数式入力
まず、K2セルに以下の数式を1つだけ入力します。
=N(MMULT(N(B2:F9>=50),TRANSPOSE(COLUMN(B2:F2)^0))=5)
Enterキーを押すと、結果がK2からK9まで自動的に表示されます。(スピル)

注意: MMULT関数に渡す最初の行列は、データ全体の範囲 B2:F9 を指定する必要があります。
解説
さあ、この難解に見える数式も分解してみましょう!
ここでは、数式の主要部分をステップごとに解説します。
N(B2:F9>=50) による1/0行列の作成
まず、B2からF9までの全データ範囲に対して、各点数が50以上かを判定します。
これにより、TRUE/FALSEの行列が作成されます。

次に、N関数でこれを1/0の行列(8行×5列)に変換します。

TRANSPOSE(COLUMN(B2:F2)^0) による縦行列の作成
次に、掛け合わせるための縦行列を作ります。
COLUMN(B2:F2) は、B2からF2の列番号 {2, 3, 4, 5, 6} を配列で返します。

どの行のCOLUMNを使っても、列番号の配列が得られればOKです
続いて ^0 で各要素を0乗します。

どんな数値も0乗すると1になるので、{1, 1, 1, 1, 1} という配列になります。
最後に、TRANSPOSE(…) でこの横一列の配列を、縦一列の配列(5行×1列)に変換します。

MMULT関数による行ごと合計の計算
そして、MMULT(行列1, 行列2) です。
先ほど作成した1/0の行列(8行×5列)と、すべて1の縦行列(5行×1列)の積を計算します。

これにより、元の行列の各行の合計値(つまり、各生徒の50点以上の科目数)が配列(8行×1列)として得られます。
最終判定とN関数による数値化
次に、…=5 で、MMULTの結果(科目数の配列)が、5(全科目数)と等しいかどうかを判定します。

結果はTRUE/FALSEの配列になります。
最後に、このTRUE/FALSEの配列をN関数で1/0の配列に変換して、完成です!

メリット&デメリット
- メリット:
- 1つのセルに数式を入れるだけで、全結果が自動表示される(スピル)。
- MMULT関数など、普段あまり使わないかもしれない関数の強力な使い方を学べる。
- デメリット:
- 数式が非常に複雑で、理解するのが難しい。
- MMULT関数は、行列のサイズ(行数・列数)が一致しないとエラーになるなど、扱いに注意が必要。
- Excel 2021以降 / Microsoft 365 でないとスピル機能が使えません。
旧バージョンでは配列数式としてCtrl+Shift+Enterで入力する必要があり、挙動が異なります。
方法5:分かりやすさ重視! セル範囲に名前を付ける
考えかた
方法1は分かりやすいですが、数式が長くなるのが欠点でした。
また、方法2は短いですが、B2:F2>=50が何を意味するのか、
少し分かりにくいかもしれません。
そこで、もっと数式を「自然言語」に近づけて、
分かりやすくする方法はないでしょうか?
ここでは、「名前の定義」機能を使ってみましょう!
あらかじめ、各科目の点数が入っている列範囲(例えばB2:B9)に「国語」という名前を付けます。。
同様にC2:C9に「算数」…といったように名前を付けておきます。
すると、数式の中でセル参照(B2など)の代わりに、定義した名前(国語など)が使えるようになります。

これを使えば、数式は「国語が50点以上 かつ 算数が50点以上 かつ 理科が50点以上 かつ 社会が50点以上 かつ 英語が50点以上」という条件を、ほぼそのまま数式で表現できます。
今回は、AND関数の代わりに、掛け算 * を使ってみましょう。
したがって、「(国語>=50)*(算数>=50)*…」 と書くことで、すべての条件がTRUE(つまり1)の場合のみ、結果が1になります。
一つでもFALSE(つまり0)があれば、掛け算の結果は0になります。
手順
名前の定義
まず、名前を定義します。
- はじめに、B2:B9セルを選択します。
- 次に、数式バーの左にある「名前ボックス」に「国語」と入力し、Enterキーを押します。
- 続いて、同様に、C2:C9を選択して「算数」、D2:D9を選択して「理科」、E2:E9を選択して「社会」、F2:F9を選択して「英語」と、それぞれ名前を定義します。

範囲の選択は、タイトル行を含めずデータ部分のみで行います。
※ または、「数式」タブの「選択範囲から作成」機能を使うと、より簡単に名前を定義できます。

B1:F9(タイトル行を含む)を選択し、「数式」タブ > 「定義された名前」グループ > 「選択範囲から作成」をクリックします。
「上端行」にチェックを入れてOKします。

数式入力
次に、L2セルに以下の数式を入力します。
=(国語>=50)*(算数>=50)*(理科>=50)*(社会>=50)*(英語>=50)

Enterキーを押すと、結果がL2からL9まで自動的に表示されます。(スピル)

解説
この方法のポイントは「名前の定義」にあります。
主な特徴を2点解説します。
名前の定義による可読性向上
セル範囲に分かりやすい名前を付けることで、数式の可読性が劇的に向上します。
B2やC2といったセル参照ではなく、
「国語」「算数」という名前で直接データにアクセスできます。
そのため、数式が何を計算しているのかが直感的に理解しやすくなります。
論理値の掛け算によるAND演算
(条件1)*(条件2)*… という形式は、AND(条件1, 条件2, …) と同じ意味を持ちます。
各条件がTRUE(1)かFALSE(0)かを判定し、それらをすべて掛け合わせます。
一つでもFALSE(0)があれば結果は0に、すべてTRUE(1)の場合のみ結果が1になります。
メリット&デメリット
- メリット:
- 数式が非常に分かりやすく、自然言語に近い感覚で読める。
- 名前を定義しておけば、他の数式でも使い回せる。
- デメリット:
- 事前に名前を定義する手間がかかる。
- 定義した名前が多くなると管理が少し大変になる場合がある。
- 他の人がファイルを見たときに、名前が定義されていることを知らないと、
数式の意味が分からない可能性がある。
参考:今回登場したExcel関数
今回の暇つぶしで活躍した関数たちを、改めてご紹介します。
- IF(論理式, 真の場合, [偽の場合]): 条件に基づいて異なる値を返す、おなじみの関数。
- AND(論理式1, [論理式2], …): すべての引数がTRUEのときにTRUEを返します。配列や範囲を引数に取ることも可能。
- MIN(数値1, [数値2], …): 引数リストの中の最小値を返す。
- N(値): 値を数値に変換します。TRUEは1、FALSEは0になる。
- MMULT(配列1, 配列2): 2つの配列(行列)の積を返します。配列数式で強力な計算を実現できる。
- TRANSPOSE(配列): 配列の行と列を入れ替える。
- COLUMN([参照]): 参照先の列番号を返します。配列数式内で使うと列番号の配列を生成できる。
- (名前の定義): 関数ではありませんが、セル範囲に名前を付ける機能。数式の可読性を高めるのに役立つ。
普段あまり組み合わせない関数も、こうしてみると意外な活躍を見せてくれますね!
まとめ
今回は、「すべての科目が50点以上かどうかを判定する」というシンプルな課題に対して、
関数だけで挑む5つの方法をご紹介しました!
まず、王道のIF関数とAND関数を使った方法。
次に、AND関数の配列処理と*1で短縮する方法。
さらに、発想を変えてMIN関数で最小値を見る方法や、
MMULT関数を使った少し難解な配列数式での一括処理もありました。
最後に、名前定義で可読性を上げる方法まで、様々なアプローチを見ましたね。

正直、実務でパッと使うなら、方法1のIF/ANDか、方法2の短いAND数式、あるいは分かりやすさ重視なら方法5あたりが現実的でしょう。
方法4のMMULTは、少しマニアックかもしれませんね(笑)
でも、こうやって「普通ならこうするけど、あえて違うやり方はないかな?」と考えてみること。
そして「この関数、こんな使い方もできるんだ!」と発見することは、
Excelの関数への理解を深めることにつながります。
これは、応用力を養う上でとても大切だと思います。
一つの条件判定にも、これだけのバリエーションがある。
その引き出しの多さが、いざという時にきっと役立つはずです。
今回の関数パズルが、皆さんのExcelライフのちょっとした刺激や、
新しい発見につながっていれば嬉しいです!