「この商品が売れる確率ってどのくらいだろう?」。過去のデータから確率を計算したいとき、手作業では面倒ですよね。
それぞれの値に確率が割り当てられたデータがあっても、特定の範囲に収まる確率をいちいち手計算するのは大変です。
そんなときに使えるのがPROB関数です。この記事ではGoogleスプレッドシートでのPROB関数の使い方を、基本構文から実務活用まで解説します。よくあるエラーの対処法や、似た関数との使い分けもあわせて紹介しますよ。
PROB関数とは
PROB関数(読み方: プロバビリティ関数)は、指定した値の範囲に対応する確率の合計を返す関数です。「PROB」は「Probability(確率)」の略です。
たとえば「サイコロの目が3以上5以下になる確率は?」のような計算を、数式1つで求められます。
PROB関数にできることをまとめると、次のとおりです。
- 特定の値に一致する確率を求める
- 指定した範囲(下限~上限)に収まる確率を合計する
- 過去の実績データから将来の発生確率を推定する
- 品質管理で規格内に収まる製品の割合を計算する
NOTE
PROB関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同名の関数があり、動作は同じです。
PROB関数の基本構文と引数
=PROB(データ, 確率範囲, 下限, [上限])
カッコの中に4つの引数を指定します。
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| データ(x_range) | 必須 | 確率と対応する数値の範囲 |
| 確率範囲(prob_range) | 必須 | データに対応する各確率の範囲 |
| 下限(lower_limit) | 必須 | 確率を求めたい範囲の下限値 |
| 上限(upper_limit) | 任意 | 確率を求めたい範囲の上限値 |
TIP
上限を省略すると、データが下限の値とちょうど一致する確率を返します。範囲ではなくピンポイントの確率を知りたいときは、上限なしで使いましょう。
確率範囲のルール
確率範囲に指定する値には2つの条件があります。
- 各確率は0以上1以下の数値であること
- 確率の合計がちょうど1(100%)になること
この条件を満たさないと#NUM!エラーが返ります。確率データを準備するときは、SUM関数で合計が1になっているか確認しておくと安心ですよ。
=SUM(B2:B7) ← この結果が1であればOK
PROB関数の基本的な使い方
サイコロを例に、PROB関数の基本操作を見ていきましょう。
A列にサイコロの目(1~6)、B列にそれぞれの確率(すべて1/6 = 約0.1667)が入っているとします。
| A列(目) | B列(確率) |
|---|---|
| 1 | 0.1667 |
| 2 | 0.1667 |
| 3 | 0.1667 |
| 4 | 0.1667 |
| 5 | 0.1667 |
| 6 | 0.1667 |
特定の値に一致する確率を求める
「サイコロの目が3になる確率」を求めるには、上限を省略して次のように書きます。
=PROB(A2:A7, B2:B7, 3)
結果は約0.1667(16.7%) です。下限のみを指定しているので、データの中で3にちょうど一致する確率が返ります。
範囲内に収まる確率を求める
「サイコロの目が2以上4以下になる確率」を求めるには、下限と上限の両方を指定します。
=PROB(A2:A7, B2:B7, 2, 4)
結果は約0.5(50%) です。目が2・3・4になる確率(0.1667 x 3)の合計が返ります。
1以上6以下(全範囲)の確率
=PROB(A2:A7, B2:B7, 1, 6)
結果は1(100%) です。すべての目をカバーしているので、確率の合計がそのまま返りますね。
PROB関数の実務活用パターン
基本がわかったところで、実際の業務で使えるパターンを紹介します。
売上予測で特定の売上金額になる確率を求める
過去の売上データから、各売上レンジの発生確率を計算済みだとします。
| A列(売上万円) | B列(発生確率) |
|---|---|
| 100 | 0.10 |
| 200 | 0.20 |
| 300 | 0.35 |
| 400 | 0.25 |
| 500 | 0.10 |
「売上が200万円以上400万円以下になる確率」を求めてみましょう。
=PROB(A2:A6, B2:B6, 200, 400)
結果は0.80(80%) です。200万円・300万円・400万円の確率を合計した値が返ります。
予算計画の根拠として「売上200~400万円の達成確率は80%」と示せるので、報告資料に説得力が生まれますよ。
品質管理で規格内に収まる製品の割合を計算する
検査データから各重量カテゴリの出現確率がわかっている場合、規格範囲内の確率を一発で求められます。
| A列(重量g) | B列(出現確率) |
|---|---|
| 95 | 0.05 |
| 96 | 0.08 |
| 97 | 0.12 |
| 98 | 0.20 |
| 99 | 0.25 |
| 100 | 0.15 |
| 101 | 0.10 |
| 102 | 0.05 |
規格が97g以上101g以下のとき、次のように書きます。
=PROB(A2:A9, B2:B9, 97, 101)
結果は0.82(82%) です。規格内に収まる製品が82%だとわかります。
規格外の割合を求めたいときは、1から引けばOKです。
=1 - PROB(A2:A9, B2:B9, 97, 101)
結果は0.18(18%) です。不良率として報告書に記載できますね。
COUNTIFと組み合わせて確率テーブルを自動生成する
実務では確率データが最初から用意されていないことも多いですよね。そんなときはCOUNTIF関数を使って、元データから確率テーブルを自動生成できます。
たとえばC列に商品の評価スコア(1~5)が100件入っているとします。
ステップ1: 各スコアの出現回数をCOUNTIFで数える
=COUNTIF(C2:C101, A2)
ステップ2: 出現回数をデータ件数で割って確率に変換する
=COUNTIF(C2:C101, A2) / COUNT(C2:C101)
ステップ3: 完成した確率テーブルにPROB関数を適用する
=PROB(A2:A6, B2:B6, 3, 5)
この手順で「評価スコアが3以上5以下になる確率」を求められます。元データが変われば確率も自動で更新されるので、手動計算よりもずっと効率的ですよ。
よくあるエラーと対処法
PROB関数でつまずきやすいポイントをまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
#NUM! | 確率範囲に0未満または1超の値がある | 各確率が0以上1以下か確認する |
#NUM! | 確率範囲の合計が1にならない | SUM関数で合計を確認し、1に調整する |
#N/A | データと確率範囲のサイズが異なる | 両方の範囲が同じ行数・列数か確認する |
#VALUE! | 引数に文字列が含まれている | 数値以外のセルが混ざっていないか確認する |
確率の合計が1にならないときの調整テクニック
データから計算した確率は、丸め誤差で合計がぴったり1にならないことがあります。そんなときは、最後の確率を次の式で調整しましょう。
=1 - SUM(B2:B6) ← 残りの確率を最後のセルに入れる
こうすれば合計がちょうど1になり、#NUM!エラーを防げますよ。
PROB関数と似た関数との使い分け
Googleスプレッドシートには確率を扱う関数がいくつかあります。それぞれの違いを整理しておきましょう。
| 関数 | 用途 | データの種類 |
|---|---|---|
| PROB | 離散データの確率テーブルから確率を合計する | 離散データ(サイコロの目、評価スコアなど) |
| NORM.DIST | 正規分布にもとづいて確率を求める | 連続データ(テスト点数、製品重量など) |
| POISSON.DIST | ポアソン分布にもとづいて確率を求める | 一定期間のイベント発生回数 |
| BINOM.DIST | 二項分布にもとづいて確率を求める | 成功/失敗の試行回数 |
使い分けのポイントはこうです。
- 確率テーブルが手元にある → PROB関数
- データが正規分布に従う前提でOK → NORM.DIST関数
- 「1時間に何件発生するか」のようなカウントデータ → POISSON.DIST関数
- 「10回中何回成功するか」のような二者択一 → BINOM.DIST関数
PROB関数は自前の確率テーブルを使う唯一の関数です。理論的な分布モデルに当てはめにくいデータでも、実績ベースで確率を計算できるのが強みですよ。
まとめ
PROB関数は、データに対応する確率テーブルから特定の範囲の確率を合計する関数です。
- 上限を省略すると、下限の値にちょうど一致する確率を返す
- 下限と上限を両方指定すると、その範囲に収まる確率の合計を返す
- 確率範囲は各値が0以上1以下で、合計が1になる必要がある
- COUNTIF関数と組み合わせれば、元データから確率テーブルを自動生成できる
- 連続データの確率計算にはNORM.DIST関数が向いている
- エラーが出たら、まず確率範囲の合計が1かどうかをSUM関数で確認しよう
「このデータが特定の範囲に収まる確率は?」をサッと答えられるようになると、データ分析や報告資料の説得力がぐっと上がります。ぜひ実際のデータで試してみてくださいね。
