「テストの点数を10点刻みで区切って、何人ずつ分布しているか知りたい」。こんな場面、データ分析をしていると意外と多いですよね。
COUNTIF関数で1つずつ条件を書いていく方法もありますが、区間が5つ・10個と増えるたびに数式が並んでいき、メンテナンスが面倒になります。区間幅を変えただけで全部の数式を直す、というのは現場でよく起こる事故です。
そんなときに使えるのがFREQUENCY関数です。区間の上限値を並べておけば、データの度数分布を1つの数式で一括出力してくれます。
この記事では、FREQUENCY関数の基本構文から度数分布表の作り方、ヒストグラム化の前処理、COUNTIF関数との使い分け、よくあるエラーの対処法までを順番に紹介します。最後に実務でつまずきやすいポイントをFAQでまとめました。
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に次のように入力します。
| セル | 区間の上限値 | 意味 |
|---|---|---|
| D2 | 20 | 0〜20点 |
| D3 | 40 | 21〜40点 |
| D4 | 60 | 41〜60点 |
| D5 | 80 | 61〜80点 |
| D6 | 100 | 81〜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関数で作った度数分布表をもとに、ヒストグラムを作成できます。手順は次のとおりです。
- FREQUENCY関数で度数分布を算出する(上記の基本例の手順)
- 区間ラベル列(例: 「0〜20」「21〜40」…)とFREQUENCY結果列を選択する
- メニューから「挿入」→「グラフ」を選ぶ
- グラフの種類で「縦棒グラフ」を選択する
- グラフエディタの「カスタマイズ」→「系列」で棒の間隔を0%にする(ヒストグラムらしい見た目になる)
- 必要に応じてタイトルや軸ラベル、配色を調整する
区間ラベルは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:D6 を D2: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}) のようなシンプルな例から試して、慣れてきたら売上分析やアンケート集計など実務データに応用していきましょう。
