関数だけでOK!Excelで度数分布を作る3つの方法

関数だけでOK!Excelで度数分布を作る3つの方法 Excel

点数ごとの人数を知りたい!度数分布って?

例えば、クラス全員のテストの点数がバラバラにたくさんあると、全体としてどのくらいの点数の人が多いのか分かりにくいですよね?

そうなんです!データがたくさんあるだけだと、特徴って掴みにくいんですよね。

そこで、『0点から20点』『21点から40点』…みたいに点数でグループ分けして、
それぞれの人数を数えます。

0~20点の人は3人』
21~40点の人は5人』のように。

こうすると、「このクラスは真ん中くらいの点数の人が多いな」とか、
すごく低い点数の人は少ないな」といった全体の傾向が、
ぐっと分かりやすくなりますよね。

このデータのまとめ方を 「度数分布」 と言います。

今回の記事では、この「度数分布」をExcelの関数を使って求める方法を紹介します。

ここでは、あえて3つの異なるアプローチで解説しますね!

「え? COUNTIFSとかで簡単にできるんじゃないの?」

と思いますよね?

もちろん、定番の方法もあります!

でも、今回はSUM関数やFREQUENCY関数といった、
一見すると「カウント」とは直接結びつかないような関数も使ってみます。

その目的は、Excel関数の多様な使い方や、数式の組み立て方の引き出しを増やすことです!

「こんな関数でも、こんな風に使えるんだ!」という発見があるはずです。

このチャレンジを通して、あなたのExcel関数スキルがさらにパワーアップするかもしれませんよ!

今回のミッション

本記事では、Excel 2021を使用して検証および画像の作成を行っています。

現在の状態とゴール

現在の状態: 次の画像のように、受験番号得点のリストがExcelシートにあります。

リスト

目指すゴール: 次に、上記のリストから、以下の点数区分ごとの人数(度数)を、
関数だけを使って求めます。

式を入力する場所

ルール:関数オンリー & 元データ厳守!

今回のルールは以下の通りです。

  1. 使用するのはExcelの「関数」のみです。VBA(マクロ)などは使いません。
  2. 元のデータ (A列・B列) は一切変更・加工しません!関数だけで解決します。
  3. Excel 2021 で使用できる関数のみを使います。(筆者の環境に合わせます…すみません)

データの準備

まず、サンプルファイル excel_de_himatsubushi015.xlsx (12KB) をダウンロードします。

あるいは、ご自身で同様のデータ(A列に受験番号、B列に得点)をご用意ください。

その際、E列には区分の境界値(上限値、例: 20, 40, 60, 80, 100)を忘れずに入力しておきましょう!

データの用意

さあ、準備はできましたか?

関数の多様な世界を探る旅に出発しましょう!

方法1:王道! COUNTIF / COUNTIFS 関数

考え方

はじめに紹介するのは、条件に合うセルの個数を数えるための定番関数、
COUNTIFCOUNTIFS を使う方法です。

まず、COUNTIF関数は、1つの条件に合うセルの数を数えます。
一方、COUNTIFS関数は、複数の条件(すべてを満たす必要あり)に合うセルの数を数えます。

今回の度数分布では、次のように考えます。

最初の区間「0以上 20以下」は、20以下の数」という 1つの条件 で数えられます。

それに対して、

の区間「20より大きく 40以下」は、20より大きい」 かつ 40以下」という 2つの条件 で数える必要があります。

このように、区間によって条件の数が異なります。

このため、COUNTIFCOUNTIFS を使い分ける必要があります。

手順

最初の区間 (0〜20)

まず、G2セルに以下の数式を入力します。

=COUNTIF(B2:B25,”<=”&E2)

数式
=COUNTIF(B2:B25,"<="&E2)

これは、「B2からB25の範囲で、E2セル(=20)以下の値の個数」を数える、
という意味になります。

2番目以降の区間 (21〜40, 41〜60, …)

次に、G3セルに以下の数式を入力します。

=COUNTIFS($B$2:$B$25,”>”&E2,$B$2:$B$25,”<=”&E3)

数式
=COUNTIFS($B$2:$B$25,">"&E2,$B$2:$B$25,"<="&E3)

これは、「B2からB25の範囲で、E2セル(=20)より大きく、かつE3セル(=40)以下の値の個数」を数えます。

ここで、範囲 $B$2:$B$25絶対参照$マーク)にしているのがポイントです。

こうすることで、この数式をG4からG6まで下にコピーすると、
参照する境界値 (E2, E3) が自動的に (E3, E4), (E4, E5), (E5, E6) とずれ、
各区間の人数を正しく計算できます。

計算式の表示

解説

COUNTIF/COUNTIFSの基本

COUNTIF / COUNTIFS は、条件に合うセルの数を数えるのに非常に直感的で分かりやすい関数です。

特に、このように条件に合うデータ数を数える場面では、まず候補に挙がる関数と言えるでしょう。

条件文字列の指定

条件の指定方法が少し特徴的です。

比較演算子 (>, <, <=, >= など) と、比較したい(またはセル参照)を文字列として結合する必要があります。

この結合には & (アンパサンド) を使用します。

例えば「 “<=”&E2 」は、E2セルの値以下」という条件文字列を作成しています。

COUNTIFS では、この条件範囲と条件文字列のペアを、
必要なだけカンマで区切って指定していきます。

メリット&デメリット

  • メリット:
    • 目的と関数の機能が直結し、理解しやすい。
    • 多くのExcelバージョンで利用可能。
  • デメリット:
    • 特にない。強いてあげるならば、2つの数式を使い分ける必要性がある点。

方法2:配列の力! SUM / N 関数と論理演算

考え方

次に紹介するのは、COUNTIFS登場前の定番テクニック(SUMPRODUCT関数)の考え方を応用した方法です。

Excel 2021以降のスピル機能を活かし、
SUM関数を主体として、少し応用的な方法を紹介します。

まず、Excelでは、比較演算(例: B2:B25<=E2)を行うと、
各セルに対して条件を満たすかどうかを TRUE (真) または FALSE (偽) の配列で返します。

例えば、B2:B25<=20 という条件であれば、B列の値が20以下ならTRUE
そうでなければFALSEとなる配列 {FALSE;FALSE;FALSE;…;TRUE;…} のような結果が内部的に生成されます。

数式
B2:B25<=20

ここで、この TRUE/FALSE の配列を、数値の 1/0 に変換できれば、
SUM関数で合計することで「条件を満たす個数」を数えられますよね?

その変換に利用できるのが N関数 や 数値演算 ( * ) です。

具体的には、N関数は引数を数値に変換し、
TRUE を 1 に、FALSE を 0 にします。

また、TRUE/FALSE を含む配列に対して数値演算 ( * など) を行うと、
Excelは自動的に TRUE 1FALSE 0 として扱います。

TRUE/FALSEに数値演算をすると1/0になる

この仕組みを利用して、条件に合うセルの個数を計算します。

手順

最初の区間 (0〜20)

まず、H2セルに以下の数式を入力します。

=SUM(N(B2:B25<=E2))

ここでは、B2:B25<=E2TRUE/FALSE の配列が生成されます。

数式

続いて、N() でそれが 1/0 の配列に変換されます。

N関数

最後に、SUM() でその合計(つまり条件を満たす個数)を計算します。

SUM関数

Excel 2021 以降 /Microsoft 365 では、このまま Enter で確定すればOKです。

古いバージョンでは Ctrl+Shift+Enter 配列数式として確定する必要がある場合があります。

2番目以降の区間 (21〜40, 41〜60, …)

次に、H3セルに以下の数式を入力します。

=SUM((E2<$B$2:$B$25)*($B$2:$B$25<=E3))

まず、E2<$B$2:$B$25 で「前の区間の上限値より大きいか」の TRUE/FALSE 配列が生成されます。

そして、$B$2:$B$25<=E3 で「今の区間の上限値以下か」の TRUE/FALSE 配列が生成されます。

この2つの配列を * (掛け算) します。

=SUM((E2<$B$2:$B$25)*($B$2:$B$25<=E3))

論理値の掛け算では、TRUE(1) * TRUE(1) の場合のみ結果が 1 となります。

それ以外はすべて 0 になります。

論理値の掛け算

つまり、両方の条件を 同時に満たす場合のみ 1 となる配列が作られるわけです。

最後に、SUM() でその合計(両方の条件を満たす個数)を計算します。

SUM() でその合計

この数式をH4からH6まで下にコピーします。(絶対参照 $B$2:$B$25 を忘れずに)

数式の表示

解説

配列数式と論理値変換

この方法は、Excelの「配列処理」と「論理値の数値変換」という考え方を活用したものです。

一見すると複雑に見えるかもしれませんが、基本的なロジックはシンプルです。

それは、「条件を満たす要素を 1、満たさない要素を 0 に変換して、それらを合計する」というものです。

N関数と乗算(*)

論理値を 1/0 に変換する方法として、
今回はN関数と乗算( * )を紹介しました。

N関数は直接的に変換を行う関数です。

一方、乗算( * )は、計算の過程でExcelが暗黙的にTRUEを1、
FALSEを0として扱う性質を利用しています。

複数の条件を組み合わせる場合(AND条件)、
各条件のTRUE/FALSE配列を掛け合わせることで、
すべての条件を満たす場合のみ結果が1になるようにできます。

メリット&デメリット

  • メリット:
    • Excelの配列処理や論理値演算の仕組みを深く学べる点。
    • 複雑な条件集計への応用ができる。
  • デメリット:
    • 数式が直感的でなく、理解に時間を要する場合がある点。
    • データ量によってはCOUNTIF/COUNTIFSより処理が重くなる可能性。
    • 方法1同様、区間により数式が異なる点。

方法3:度数分布の専門家にお任せ! FREQUENCY 関数

考え方

最後に紹介するのは、まさに「度数分布」を求めるために特化した専門の関数、
FREQUENCY関数です!

この関数は、指定したデータの範囲(今回の例では得点リスト)が、
指定した区間(境界値のリスト)にいくつ含まれるかを、一度の操作で計算してくれます。

基本的な構文は以下の通りです。

=FREQUENCY(データ配列, 区間配列)


データ配列: 度数を求めたい数値データが含まれる範囲 (例: B2:B25)

区間配列: 区分の 上限値 を並べた範囲 (例: E2:E5最後のE6を含めない点に注意!)

FREQUENCY関数は、少し特殊な動きをする点に注意が必要です。

それは、指定した「区間配列」の要素数よりも 1つ多い 要素数の配列を結果として返すという点です。

なぜ1つ多いかというと、最後の要素は「区間配列の最大値を超える値の個数」を表すためです。

今回の例で見てみましょう。

区間配列として E2:E5 (つまり 20, 40, 60, 80) を指定します。

区間配列として E2:E5 (つまり 20, 40, 60, 80) を指定

すると、FREQUENCY関数は、以下の5つの区間の度数を計算した配列を返します。

  1. <= 20 の個数
  2. > 20 かつ <= 40 の個数
  3. > 40 かつ <= 60 の個数
  4. > 60 かつ <= 80 の個数
  5. > 80 の個数

お気づきでしょうか?

FREQUENCY関数が返す最後の結果は「> 80 の個数」となり、
今回のサンプルのように最大値が100点であれば、

求めたい「81点から100点」の人数と一致します

手順

結果を表示したいセル範囲を選択

まず、結果を表示したいセル範囲 I2:I6すべて選択 します。

I2:I6 を すべて選択

これは、FREQUENCY関数が複数の結果(配列)を返します。
なので、それらを表示する場所をあらかじめ指定しておく必要があります。

数式入力

次に、I2:I6が選択された状態で、数式バーに以下の数式を入力します。

=FREQUENCY(B2:B25,E2:E5)

数式
=FREQUENCY(B2:B25,E2:E5)

データ配列は B2:B25、区間配列は E2:E5 (最後の100を含まない) です。
ここを間違えないようにしましょう。

配列数式として確定

最後に、数式を入力したら、Enterキーだけを押さずに、Ctrl + Shift + Enter を同時に押して 数式を確定します。

これにより、Excelは入力された数式を「配列数式」として認識し、選択された範囲 (I2:I6) に計算結果の配列を展開します。

注: Excel 2021/Microsoft 365 では、スピル機能により単に Enter で確定しても自動的に配列が展開されます。
古いバージョンとの互換性や配列数式の概念理解のため、Ctrl+Shift+Enter の操作も覚えておくと良いでしょう。

完成

解説

FREQUENCY関数は、度数分布を求めるための専用関数です。

そのため、他の方法に比べて非常にシンプルに目的を達成できるのが最大の魅力です。

数式も短く、何をしているかが明確です。

ただし、FREQUENCY関数を正しく使うためには、いくつかの重要なポイントを理解しておく必要があります。

区間配列の指定方法

区分の「上限値」のみを指定し、最後の区分の境界値(今回の例では100)は 含めない ことを忘れないでください。

結果の配列の要素数

指定した区間配列の要素数よりも1つ多い結果が返ってくることを理解しておく必要があります。

最後の要素が「最後の境界値を超える値の個数」となるため、今回の目的にはぴったり合致します。

入力方法

結果を表示したいセル範囲をあらかじめ選択し、配列数式として確定させる(Ctrl+Shift+Enter または スピル機能)という、少し特殊な操作が伴います。

これらの仕様を正確に理解することが、
FREQUENCY関数を使いこなす鍵となります。

メリット&デメリット

  • メリット:
    • 度数分布計算に特化し、数式が非常に簡潔な点。
    • 1つの数式入力で、全区間の度数を一度に計算できる効率性。
  • デメリット:
    • 関数の仕様(区間配列の指定、結果要素数)の正確な理解が必要な点。
    • 配列数式入力(またはスピル機能)という特殊な操作感。
    • 度数分布以外の集計への応用が難しい点。

参考:今回登場した関数たち

今回、登場した関数を、改めて簡単にご紹介します。

  • COUNTIF(範囲, 条件): 指定した範囲内で、1つの検索条件に一致するセルの個数を返します
  • COUNTIFS(条件範囲1, 条件1, [条件範囲2, 条件2], …): 指定した複数の範囲において、対応するすべての条件を満たすセルの個数を返します。
  • SUM(数値1, [数値2], …): 引数(数値や配列、セル範囲)に含まれる数値をすべて合計します。配列計算と組み合わせることで、条件に合う要素の合計(今回は個数)を求めることもできます。
  • N(値): 引数を数値に変換します。TRUE1FALSE0、日付はシリアル値、その他の多くは0になります。
  • FREQUENCY(データ配列, 区間配列): データが指定した区間内にいくつ分布するかを計算し、縦方向の数値の配列(度数分布)を返します。

まとめ

今回は、「点数ごとの人数を数える(度数分布を求める)」という課題に挑戦しました。

具体的には、COUNTIF/COUNTIFSSUMと論理演算、そしてFREQUENCYという3つの異なるアプローチを紹介しました。

正直なところ、度数分布を求めるという目的だけであれば、 FREQUENCY関数 が最もシンプルで効率的かもしれません。

しかし、COUNTIF/COUNTIFS の分かりやすさも、特に基本的な集計作業においては大きな魅力です。

また、SUM関数と配列・論理演算を組み合わせるテクニックは、少し複雑ですが、他の場面での応用が利く可能性を秘めています。

重要なのは、「このケースならこの関数」と一つのやり方だけを覚えるのではなく、様々な方法を知っておくことです。

それにより、Excelの関数の特性や数式の組み立て方への理解が深まります。

結果として、応用力が身につきます。

普段あまり使わないような関数の使い方に触れてみることも、
スキルアップには大切です。

今回の記事が、皆さんのExcelスキルアップのヒントとして、
少しでもお役に立てれば幸いです!

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