Excel関数で全科目合格判定!5つの方法

Excel関数で全科目合格判定!5つの方法 Excel

Excelで成績表などを扱っていると、

すべての科目が基準点以上だったら合格!」みたいな判定をしたい時って、ありますよね!

例えば、全科目が50点以上かどうかをチェックする、なんていう場面。

もちろん、普通にIF関数とAND関数を組み合わせれば、すぐに実現できます。

でも…。

なんだか無性に他の方法も試してみたくなる時って、ありませんか?

このシンプルな条件判定、もっと違うアプローチはないだろうか…?
関数をいじくり回したら、どんな数式が生まれるんだろう…?

そんなあなたに贈る、今回の暇つぶし企画!

今回のテーマは、

「名前と各科目の点数が入力されたリストから、全科目が50点以上なら1そうでなければ0と表示する」

というものです。

え、普通にIFANDで良いのでは…?

はい、実務ではそれが一番分かりやすいことが多いです!(笑)

でも、今回はあえて色々な関数を使って、しかも少しマニアックな方法も含めて挑戦してみるのが醍醐味。

今回の目的は、

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 = 1FALSE * 1 = 0 となります。

これにより、目的の数値(10)を得ることができます。

IF関数を使わずに済むのがポイントですね!

メリット&デメリット

  • メリット:
    • 数式が非常に短い!
    • 科目数が増えても、範囲指定(例: B2:F2)を変えるだけで対応可能。
  • デメリット:
    • *1 の意味を知らないと、少し戸惑うかもしれない。
    • (稀ですが)AND関数が配列を引数に取る挙動は、古いバージョンでは意図通りに動かない可能性もゼロではありません。(Excel 2021では問題ありません)

方法3:発想の転換? 最小値を使ってみる!

考えかた

さて、ここからは少し違う角度からのアプローチです。

すべての科目が50点以上」ということは、言い換えることができます。

つまり、「点数の中で一番低い点数が50点以上」である、とも考えられますよね?

もし最低点50点未満なら、
その時点で「すべての科目が50点以上」という条件は満たせません。

この考え方を利用するのが、MIN関数です!

まず、MIN関数で指定した範囲(各科目の点数)の最小値を求めます。

次に、その最小値が50以上かどうかを比較演算子 >= で判定します。

結果はTRUEまたはFALSEになりますね。

これを数値の1または0に変換する必要があるのですが、
ここで *1 の代わりにN関数を使ってみましょう!

N関数は、引数がTRUEなら1FALSEなら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なら0TRUEなら1が返されます。

メリット&デメリット

  • メリット:
    • 「最小値」という異なる視点からのアプローチで面白い。
    • 数式が比較的短く、理解しやすい。
    • N関数という、少しマイナー?な関数の使い方も学べる。
  • デメリット:
    • MIN関数の計算が入るため、超大量データではAND関数よりほんのわずかに計算負荷が高い…かもしれません。(通常は気にするレベルではありません)

方法4:一撃必殺!? 配列数式でまとめてドン!

考えかた

これまでの方法は下にコピーする必要がありましたが、
Excel 2021以降の「スピル」で一気に表示させたいですよね!

そこで、行列計算を使った少し高度な方法に挑戦です。

使うのはMMULT関数、TRANSPOSE関数、COLUMN関数。

なんで行列?

と思いますよね?考え方はこうです。

まず、各科目が50点以上なら1、そうでなければ0という行列を作ります。(N関数を使います)

次に、この行ごとの「1の数(=50点以上の科目数)」を数えたい。

ここでMMULT関数の出番!

うまく行列を組み合わせる(TRANSPOSECOLUMNで補助的な行列を作ります)ことで、
行ごとの合計を一気に計算できるんです。

最後に、その合計が科目数の「5」に等しいかを判定し、結果をN関数で10に変換します。

ちょっと複雑に見えますが、
これで一つのセルに数式を入れるだけで、スピル機能が結果をズラッと表示してくれますよ!

手順

数式入力

まず、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点解説します。

名前の定義による可読性向上

セル範囲に分かりやすい名前を付けることで、数式の可読性が劇的に向上します。

B2C2といったセル参照ではなく、
国語」「算数」という名前で直接データにアクセスできます。

そのため、数式が何を計算しているのかが直感的に理解しやすくなります。

論理値の掛け算による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(値): 値を数値に変換します。TRUE1FALSE0になる。
  • MMULT(配列1, 配列2): 2つの配列(行列)の積を返します。配列数式で強力な計算を実現できる。
  • TRANSPOSE(配列): 配列のを入れ替える。
  • COLUMN([参照]): 参照先の列番号を返します。配列数式内で使うと列番号の配列を生成できる。
  • (名前の定義): 関数ではありませんが、セル範囲に名前を付ける機能。数式の可読性を高めるのに役立つ。

普段あまり組み合わせない関数も、こうしてみると意外な活躍を見せてくれますね!

まとめ

今回は、「すべての科目が50点以上かどうかを判定する」というシンプルな課題に対して、
関数だけで挑む5つの方法をご紹介しました!

まず、王道のIF関数とAND関数を使った方法。

次に、AND関数の配列処理と*1で短縮する方法。

さらに、発想を変えてMIN関数で最小値を見る方法や、
MMULT関数を使った少し難解な配列数式での一括処理もありました。

最後に、名前定義で可読性を上げる方法まで、様々なアプローチを見ましたね。

正直、実務でパッと使うなら、方法1のIF/ANDか、方法2の短いAND数式、あるいは分かりやすさ重視なら方法5あたりが現実的でしょう。

方法4のMMULTは、少しマニアックかもしれませんね(笑)

でも、こうやって「普通ならこうするけど、あえて違うやり方はないかな?」と考えてみること。

そして「この関数、こんな使い方もできるんだ!」と発見することは、
Excelの関数への理解を深めることにつながります。

これは、応用力を養う上でとても大切だと思います。

一つの条件判定にも、これだけのバリエーションがある。
その引き出しの多さが、いざという時にきっと役立つはずです。

今回の関数パズルが、皆さんのExcelライフのちょっとした刺激や、
新しい発見につながっていれば嬉しいです!

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