スプレッドシートのFREQUENCY関数の使い方|度数分布

スポンサーリンク

「テストの点数を10点刻みで区切って、何人ずつ分布しているか知りたい」。こんな場面、データ分析をしていると意外と多いですよね。

COUNTIF関数で1つずつ条件を書いていく方法もありますが、区間が5つ・10個と増えるたびに数式が並んでいき、メンテナンスが面倒になります。区間幅を変えただけで全部の数式を直す、というのは現場でよく起こる事故です。

そんなときに使えるのがFREQUENCY関数です。区間の上限値を並べておけば、データの度数分布を1つの数式で一括出力してくれます。

この記事では、FREQUENCY関数の基本構文から度数分布表の作り方、ヒストグラム化の前処理、COUNTIF関数との使い分け、よくあるエラーの対処法までを順番に紹介します。最後に実務でつまずきやすいポイントをFAQでまとめました。

  1. FREQUENCY関数とは?
  2. FREQUENCY関数の書き方(構文と引数)
    1. 基本構文
    2. 引数の説明
    3. 戻り値のイメージ
  3. FREQUENCY関数の基本的な使い方
    1. 区間ラベルを併記しておくと読みやすい
  4. FREQUENCY関数の実践的な使い方・応用例
    1. 応用1: アンケート結果の度数分布表を作る
    2. 応用2: 度数分布表からヒストグラム(グラフ)を作る
    3. 応用3: 売上金額の分布を分析する
    4. 応用4: 区間幅を自動計算して柔軟に分ける
    5. 応用5: ピボットテーブルとの使い分け
  5. よくあるエラーと対処法
    1. 区間の順番に注意
    2. 「以下」判定を理解する
    3. テキストデータが混在している場合
    4. スピル先に既存データがある
  6. FREQUENCY関数とCOUNTIF関数の違い・使い分け
    1. FREQUENCY関数を使うべき場面
    2. COUNTIF関数を使うべき場面
  7. 配列関数としての挙動を理解する
    1. スピル(自動展開)の仕組み
    2. スピル先のセルは編集しない
    3. コピーペーストの注意点
  8. よくある質問(FAQ)
    1. Q1. FREQUENCY関数とExcelのFREQUENCY関数は同じですか?
    2. Q2. 区間を後から追加するにはどうすればいいですか?
    3. Q3. 結果が「すべて0」になります。何が原因ですか?
    4. Q4. FREQUENCY関数の結果を別の数式で使えますか?
    5. Q5. 区間の境界を「以下」ではなく「未満」にしたいです
    6. Q6. 区間ごとの構成比(パーセント)を一緒に出すには?
    7. Q7. データが日付や時刻でも使えますか?
  9. まとめ

FREQUENCY関数とは?

FREQUENCY関数(読み方: フリークエンシー関数)は、データを指定した区間ごとに数えて度数分布を配列で返す関数です。

名前はfrequency(頻度・頻度分布)が由来です。「0〜59点は何人?」「60〜79点は何人?」。こうした区間ごとのカウントを、数式1つでまとめて計算してくれます。

ポイントは配列関数であることです。結果が1つのセルではなく、複数のセルに縦方向にまとめて出力されます。Googleスプレッドシートでは自動的にスピル(はみ出し展開)されるので、Excelのように Ctrl + Shift + Enter で配列確定する必要はありません。

FREQUENCY関数にできることをまとめると、次のとおりです。

  • データを任意の区間に分けて個数を集計する
  • 度数分布表のもとになるデータを一括作成する
  • ヒストグラム(棒グラフ)の前処理に使える
  • 売上・点数・アクセス数など連続量の分布パターンを可視化する
  • アンケートやテスト結果の集計を区間別に整理する

NOTE

FREQUENCY関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同名の関数がありますが、Sheets版は自動スピルに対応しているため、入力の手間が少ないのが特徴です。Excelでも365とExcel 2021以降は同じく自動スピルが効きますが、それ以前のバージョンでは配列数式として確定する必要があります。

FREQUENCY関数の書き方(構文と引数)

基本構文

=FREQUENCY(データ, 区間)

カッコの中に「何を調べるか」と「どの区間で区切るか」の2つを入れるだけ、というシンプルな構文です。

引数の説明

引数必須/任意説明
データ必須度数を調べるデータ範囲(例: B2:B50)
区間必須区間の上限値を並べた範囲(例: D2:D6)

引数は2つだけです。「データ」の中にある値を「区間」の境界で区切って、それぞれ何個あるかを数えます。

ここで一番大事なポイントを1つ覚えてください。戻り値の個数は「区間の数+1」になることです。たとえば区間を5つ指定すると、結果は6個返ります。最後の1つは「最大の区間を超えた値の個数」です。

この「+1」を忘れると、結果を貼り付けるセル範囲が1行足りなくて末尾の人数が見えない、というミスにつながります。E2に貼り付ける場合は、E2〜E7まで6行ぶんのスペースが必要だと覚えておきましょう。

戻り値のイメージ

たとえば区間に {20, 40, 60, 80, 100} を指定したときの結果は、次のように対応します。

結果の位置対応する区間意味
1番目20以下0〜20点
2番目20超〜40以下21〜40点
3番目40超〜60以下41〜60点
4番目60超〜80以下61〜80点
5番目80超〜100以下81〜100点
6番目100超100点を超える値(なければ0)

「指定した区間の数+1個の戻り値」「最後は区間外」というルールが分かれば、あとは応用するだけです。

FREQUENCY関数の基本的な使い方

実際にテストの点数データで、度数分布を作ってみましょう。

B2:B21にテストの点数(0〜100点)が20人分入っているとします。区間の上限値をD2:D6に次のように入力します。

セル区間の上限値意味
D2200〜20点
D34021〜40点
D46041〜60点
D58061〜80点
D610081〜100点

E2に次の数式を入力します。

=FREQUENCY(B2:B21, D2:D6)

結果がE2:E7に縦方向に展開されます。E2〜E6には各区間の人数が入り、E7には「100を超える点数の人数」が入ります。

区間の上限値は「以下」で判定されます。たとえばD2に「20」と入力した場合、20点ちょうどの人はこの区間に含まれます。21点の人は次の区間です。境界値の扱いはミスを生みやすい部分なので、データを確認しながら設定しましょう。

TIP

空白セルとテキストは自動的に無視されます。数値データだけがカウント対象になるので、見出し行を含めてしまっても問題ありません。逆に言うと、数字に見えても「文字列として保存された数値」は無視されるので、結果が0ばかりになるときは要注意です(後述)。

区間ラベルを併記しておくと読みやすい

度数分布表は数字だけだと意味が伝わりにくいので、左隣に区間ラベルを書いておくと一気に読みやすくなります。

区間ラベル(D列)上限値(実際にFREQUENCYに渡す)人数(E列)
0〜20点20=FREQUENCY結果
21〜40点40 
41〜60点60 
61〜80点80 
81〜100点100 
100点超(自動) 

実務では「区間ラベル列」「上限値列」「人数列」の3列で整えると、グラフや報告書にそのまま流用できる形になります。

FREQUENCY関数の実践的な使い方・応用例

応用1: アンケート結果の度数分布表を作る

5段階評価(1〜5点)のアンケート結果から、各評価の回答数を集計する例です。

B列に回答データ(1〜5の数値)が入っているとします。区間の上限値をD2:D5に「1, 2, 3, 4」と入力します。

=FREQUENCY(B2:B100, D2:D5)

結果は5つのセルに展開されます。

区間意味結果の位置
〜1評価1の人数E2
〜2評価2の人数E3
〜3評価3の人数E4
〜4評価4の人数E5
4超評価5の人数E6

5段階評価なら区間は「1, 2, 3, 4」の4つです。最後の「4超」が自動的に評価5をカウントしてくれます。離散値(整数しか取らない値)のときは、上限値を「各カテゴリの値そのもの」にすると分かりやすいです。

応用2: 度数分布表からヒストグラム(グラフ)を作る

FREQUENCY関数で作った度数分布表をもとに、ヒストグラムを作成できます。手順は次のとおりです。

  1. FREQUENCY関数で度数分布を算出する(上記の基本例の手順)
  2. 区間ラベル列(例: 「0〜20」「21〜40」…)とFREQUENCY結果列を選択する
  3. メニューから「挿入」→「グラフ」を選ぶ
  4. グラフの種類で「縦棒グラフ」を選択する
  5. グラフエディタの「カスタマイズ」→「系列」で棒の間隔を0%にする(ヒストグラムらしい見た目になる)
  6. 必要に応じてタイトルや軸ラベル、配色を調整する

区間ラベルはFREQUENCY関数とは別に自分で作る必要があります。「0〜20」「21〜40」のように、わかりやすい表記を入力しておくとグラフが読みやすくなります。

グラフ作成全般のコツはGoogleスプレッドシートのグラフ作成ガイドにまとめているので、配色や軸の設定で迷ったら参考にしてみてください。

NOTE

Googleスプレッドシートにはメニューの「挿入」→「グラフ」→「ヒストグラム」を使う方法もあります。ただしこの機能は区間の幅を自動で決めてしまい、業務報告で使うと「なぜこの区切り?」と聞かれがちです。区間幅を自分でコントロールしたい場合はFREQUENCY関数+縦棒グラフの組み合わせがおすすめです。

応用3: 売上金額の分布を分析する

売上データをFREQUENCY関数で区間ごとに集計すると、売上の分布パターンが見えてきます。

B列に各取引の売上金額が入っているとします。区間を「1万円以下/5万円以下/10万円以下/50万円以下」で区切ります。

=FREQUENCY(B2:B200, {10000, 50000, 100000, 500000})

区間の上限値はセル範囲の代わりに {}(波括弧)で直接指定することもできます。少数の固定区間ならこちらの方が手早く書けます。区間幅をデータの特性に合わせて変えると、分布の偏り(少額取引が多い・高額帯にロングテールがある等)が見やすくなります。

平均値だけでは見えない「分布の形」が把握できるので、AVERAGE関数MEDIAN関数と組み合わせて使うのが定番パターンです。

応用4: 区間幅を自動計算して柔軟に分ける

データの最小値・最大値が事前に分からないケースでは、区間幅を自動計算して動的に区間を作る方法も便利です。

たとえばB列のデータを10等分して区間にしたい場合は、別シートに次のような数式を組みます。

区間1: =MIN(B:B)+(MAX(B:B)-MIN(B:B))/10*1
区間2: =MIN(B:B)+(MAX(B:B)-MIN(B:B))/10*2
…(10個まで)

これでデータが入れ替わっても、区間が自動で再計算されます。月次レポートのテンプレートに組み込んでおくと、毎月の更新が一気に楽になります。

応用5: ピボットテーブルとの使い分け

「区間ごとの個数を出すだけ」ならピボットテーブルでも可能です。ピボットの「グループ化」機能を使えば、数値を自動で区間にまとめてくれます。

ただし、FREQUENCY関数は次の点で優れています。

  • 区間の境界値を1セル単位で自由に指定できる(ピボットは等間隔のみ)
  • 数式なので他のシートから参照しやすい(ダッシュボードに組み込みやすい)
  • 元データが更新されれば自動で再計算される

ダッシュボードや継続的なレポートに使うならFREQUENCY、その場で軽く眺めたいだけならピボット、という使い分けがおすすめです。

よくあるエラーと対処法

FREQUENCY関数は引数2つのシンプルな関数ですが、結果が想定どおりにならないケースがいくつかあります。よくあるパターンを表にまとめました。

症状原因対処法
すべて0になるデータ範囲に数値が入っていない/文字列として保存されているセルの書式が「テキスト」になっていないか確認する
一部の区間が0区間の上限値が昇順になっていない区間の値を小さい順に並べ直す
結果が1つしか出ない区間に空の範囲を指定している区間のセル範囲にデータを入力する
想定と数が合わない区間の境界値が「以下」で判定されている上限値を調整する(例: 80未満にしたいなら79を指定)
#REF!エラースピル先のセルに既存データがあるFREQUENCY結果が展開される範囲のセルを空にする
末尾の値が見えない出力範囲が「区間数+1」より少ない表の下に1行余裕を持たせる

区間の順番に注意

FREQUENCY関数は区間の値を小さい順に並べることを前提にしています。大きい順に並べると、正しい結果が得られません。

=FREQUENCY(B2:B21, {20, 40, 60, 80, 100})  ← OK
=FREQUENCY(B2:B21, {100, 80, 60, 40, 20})  ← NG: 正しく集計されない

並び順だけが原因で集計結果が崩れることがあるので、区間を後から追加・修正したときは必ず昇順を確認しましょう。

「以下」判定を理解する

区間の境界値は「以下(<=)」で判定されます。たとえば区間に「60」を指定すると、60ちょうどはその区間に含まれます。

「60未満」にしたい場合は、上限値を「59」に変更してください。小数点のデータがある場合は「59.99」や「59.999」のように調整します。会計データなど1円単位の整数なら「59」で問題ありませんが、平均値や率を扱う場合は誤差を生まないように注意が必要です。

テキストデータが混在している場合

データ範囲にテキストが混ざっていても、FREQUENCY関数はエラーになりません。テキストと空白セルは自動的にスキップされ、数値だけがカウント対象になります。

ただし、数値が文字列として保存されている場合は要注意です。セルの左上に小さな緑色の三角マークが表示されていたら、文字列です。「表示形式」→「数値」を選んで再入力するか、=VALUE(セル) で数値に変換してから集計してください。CSVを取り込んだ直後のデータでよく起こるので、最初に1度書式を確認するクセをつけるとミスが減ります。

スピル先に既存データがある

FREQUENCY関数の結果は配列としてスピル(自動展開)されます。展開先のセルに既存のデータが入っていると、 #REF! エラーになって何も表示されません。

エラーが出たら、結果が広がるはずの範囲(区間数+1セル分)を必ず空にしてから再計算してください。

FREQUENCY関数とCOUNTIF関数の違い・使い分け

度数分布はCOUNTIF関数でも作れます。FREQUENCY関数との使い分けを整理しましょう。

比較項目FREQUENCY関数COUNTIF関数
数式の数1つで全区間を一括集計区間ごとに1つずつ必要
結果の形式配列(複数セルに自動展開)単一の値(1セルに1結果)
区間外の値最後の要素で自動カウント自分で条件を追加する必要あり
条件の柔軟性数値の区間のみ文字列・ワイルドカードも可
修正しやすさ区間変更時に再計算が必要各数式を個別に修正できる
メンテナンス性区間表を変えるだけで反映数式コピーが必要

FREQUENCY関数を使うべき場面

  • 区間が5つ以上あり、1つずつCOUNTIFを書くのが面倒なとき
  • 度数分布表を一括で作りたいとき
  • 区間外(最大値を超えるデータ)も自動でカウントしたいとき
  • ヒストグラムやダッシュボードなど、継続的に使う集計表のとき

COUNTIF関数を使うべき場面

  • 文字列の条件でカウントしたいとき
  • 区間の数が少なく(2〜3個)、個別に数式を書いたほうが早いとき
  • 各区間の条件を柔軟に変えたいとき
  • 区間外をカウントしたくないとき(FREQUENCYだと自動で末尾に出てしまう)

COUNTIFS関数を使えば、複数の条件を組み合わせたカウントも可能です。「部署が営業部で、かつ売上が100万以上」のような集計にはCOUNTIFS関数が向いています。「区間別の度数分布」はFREQUENCY、「複数条件の絞り込みカウント」はCOUNTIFS、と覚えておけばだいたいの実務はカバーできます。

TIP

FREQUENCY関数はARRAYFORMULA関数と同じ配列関数の仲間です。配列関数に慣れていない方は、ARRAYFORMULA関数の記事もあわせてチェックしてみてください。スピルの仕組みが理解できると、複雑な集計が一気に短い数式で書けるようになります。

配列関数としての挙動を理解する

FREQUENCY関数は「配列関数」というカテゴリの関数です。普段スプレッドシートで使う関数(SUMやAVERAGEなど)は結果が1セルに収まりますが、配列関数は1つの数式で複数セルに結果を返すという特徴があります。

スピル(自動展開)の仕組み

GoogleスプレッドシートでFREQUENCY関数を入力してEnterを押すと、入力したセルを起点に下方向へ自動で結果が広がります。これを「スピル(spill)」と呼びます。

E2セルに数式を入力 → E2〜E7に結果が自動展開される

スピルされた範囲のうち、E2以外のセル(E3〜E7)はクリックすると元の数式がうっすらと表示されますが、数式バーは空欄のように見えます。これは「E2の数式によって生成された値」という扱いだからです。

スピル先のセルは編集しない

スピルされた範囲のセル(E3〜E7など)を直接編集すると、 #REF! エラーが発生してすべての結果が消えます。

NG: E3を選択して「100」と上書きする
→ E2の数式全体が #REF! エラーになる

修正したいときは、元の数式(E2)か、引数で指定した区間表(D列)の方を変えるようにしてください。これが配列関数を扱ううえでもっとも大事なルールです。

コピーペーストの注意点

FREQUENCY関数の結果は配列なので、E2:E7をまとめてコピーするときは「値のみ貼り付け」を使うと、別のシートやドキュメントにそのまま貼り付けられます。

1. E2:E7を範囲選択してCtrl + C(または Cmd + C)
2. 貼り付けたいセルで「右クリック」→「特殊貼り付け」→「値のみ貼り付け」

数式のままコピーすると、貼り付け先でもFREQUENCY関数として展開されるため、レイアウトが崩れることがあります。報告書やドキュメントに貼るときは「値のみ」を意識しましょう。

よくある質問(FAQ)

Q1. FREQUENCY関数とExcelのFREQUENCY関数は同じですか?

A. 機能は基本的に同じで、構文も =FREQUENCY(データ, 区間) で共通です。ただしExcelの古いバージョン(2019以前)では配列数式として Ctrl + Shift + Enter で確定する必要があります。Excel 365・Excel 2021以降と、Googleスプレッドシートでは自動スピルが効くので、普通にEnterを押すだけで複数セルに展開されます。

Q2. 区間を後から追加するにはどうすればいいですか?

A. 区間表のセルに新しい上限値を追加し、FREQUENCY関数の第2引数の範囲を広げてください。たとえば D2:D6D2:D7 に変更すれば、結果も自動で1行増えます。区間は必ず昇順で並べる必要があるため、追加する位置にも注意しましょう。

Q3. 結果が「すべて0」になります。何が原因ですか?

A. もっとも多いのは、データが数値ではなく文字列として保存されているケースです。セルの左上に緑色の三角マークが出ていたら、文字列です。「表示形式」→「数値」を選んで再入力するか、=VALUE(セル) で数値に変換してから集計してください。CSV取り込み直後のデータでよく発生します。

Q4. FREQUENCY関数の結果を別の数式で使えますか?

A. はい、使えます。FREQUENCY関数の結果は通常のセル参照と同じように扱えるので、合計や割合の計算に組み込めます。たとえば各区間の構成比を出したいときは、=E2:E7/SUM(E2:E7) のようにARRAYFORMULA的に書けます。ダッシュボードでは「人数」と「割合(%)」を並べて表示するパターンがよく使われます。

Q5. 区間の境界を「以下」ではなく「未満」にしたいです

A. FREQUENCY関数自体は「以下」固定で変更できません。「未満」で集計したい場合は、上限値を1(または小数点以下の最小単位)小さくする調整をします。整数データなら「80未満」は「79」を上限値に、小数点1桁データなら「79.9」を指定する形です。どうしても柔軟に条件を変えたいときは、COUNTIFS関数"<80" のように条件式を書く方が確実です。

Q6. 区間ごとの構成比(パーセント)を一緒に出すには?

A. FREQUENCY関数の結果セル(E2:E7など)の隣に、=E2/SUM($E$2:$E$7) のような数式を入れて表示形式をパーセントに変えればOKです。SUMの範囲は絶対参照($付き)にして、コピーしてもズレないようにするのがポイントです。

F2セル: =E2/SUM($E$2:$E$7)
↓ F7までコピー

「人数」と「構成比」を並べることで、報告書としてぐっと見やすくなります。

Q7. データが日付や時刻でも使えますか?

A. はい、使えます。日付や時刻はスプレッドシート内部では「数値」として扱われているため、FREQUENCY関数で区間集計できます。たとえば「9時台」「10時台」のように時刻帯ごとのアクセス数を集計したい場合は、上限値に TIME(9,59,59), TIME(10,59,59) のように指定します。日付の場合も DATE(2026,3,31) のような形で渡せます。

ただし表示形式を「日付」「時刻」のまま運用すると見づらいので、区間ラベル列を別途用意して、 =TEXT(D2, "h時台") のように整形しておくと読みやすくなります。

まとめ

FREQUENCY関数は、データの度数分布を一括で求められる便利な配列関数です。最後にポイントを整理します。

  • 構文は =FREQUENCY(データ, 区間) の2引数
  • 結果は「区間の数+1」個の配列で返る(最後の要素は区間外の個数)
  • 区間の上限値は昇順に並べる
  • 境界値は「以下」で判定される(60なら60点を含む)
  • 空白やテキストは自動で無視される(ただし「文字列の数値」はカウントされない)
  • 度数分布表を作ってヒストグラムの前処理にも使える
  • 区間が多いときはFREQUENCY、条件が柔軟なときはCOUNTIF関数と使い分ける

まずは =FREQUENCY(B2:B21, {20, 40, 60, 80, 100}) のようなシンプルな例から試して、慣れてきたら売上分析やアンケート集計など実務データに応用していきましょう。

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