「ExcelのNORMSINVをスプレッドシートでも同じように使いたいけど、関数名が変わって動かないんじゃないか?」
ExcelからGoogleスプレッドシートに乗り換えると、関数名の互換性が気になるところですよね。特に統計分析で使うNORMSINVは、Excel 2010で新名(NORM.S.INV)に切り替わった経緯があるため、スプレッドシートでそのまま動くのか不安になります。
結論から言うと、NORMSINV関数はスプレッドシートでもそのまま動きます。ただし、新しく数式を書くならNORM.S.INV関数を使うのが推奨です。
この記事では、スプレッドシートのNORMSINV関数の書き方から、NORM.S.INVとの違い、信頼区間・品質管理での実務例、Excel移行のコツまでをまとめて解説します。
スプレッドシートのNORMSINV関数とは?標準正規分布の逆関数
スプレッドシートのNORMSINV関数(読み方: ノームエスインバース関数)は、標準正規分布の逆関数を返す統計関数です。累積確率(0〜1の値)を入力すると、それに対応するzスコア(標準化された値)を返してくれます。
関数名はそれぞれの英単語を組み合わせたものです。
- NORM = Normal(正規分布)
- S = Standard(標準)
- INV = Inverse(逆)
ひとことで言えば、「確率からzスコアを逆算する関数」ですね。標準正規分布表(z表)を逆引きする手間が、たった1つの式で済むようになります。
NORMSINV関数にできることをまとめると、次のとおりです。
- 累積確率からzスコアを瞬時に逆算する
- 信頼区間や有意水準の臨界値(きかいち)を求める
- 偏差値の上位ラインを計算する
- NORM.S.DIST関数と組み合わせて計算結果を往復検証する
NOTE
NORMSINVはExcel 2007以前から使われている旧関数名です。Excel 2010で新関数名NORM.S.INVに切り替わりましたが、互換性のためスプレッドシートでも両方使えます。新しいシートではNORM.S.INVを使うのが推奨です。
NORMSINV関数の書き方(構文と引数)
基本構文
=NORMSINV(x)
カッコの中に、zスコアを求めたい累積確率を1つだけ指定します。引数が1つしかないので、構文はとてもシンプルですよね。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| x | 必須 | zスコアを求めたい累積確率。0より大きく1より小さい数値を指定する |
引数のxには 0 < x < 1 の範囲で値を入れます。0ちょうどや1ちょうど、または負の値は指定できません。範囲外の値を渡すと #NUM! エラーが返ります。
TIP
引数にはセル参照も使えます。例えば =NORMSINV(A1) のように書けば、A1セルの確率値に対応するzスコアを返してくれます。
標準正規分布の逆関数とは
標準正規分布とは、平均0・標準偏差1に変換した正規分布のことです。NORMSINVが返すzスコアは、「平均からどれくらい標準偏差ぶん離れているか」を表す値ですね。
例えば =NORMSINV(0.95) が返す約1.6449は、「累積確率が0.95になる地点は平均から1.6449標準偏差ぶん右にある」という意味です。統計検定や信頼区間の計算で頻出する考え方なので、ここで押さえておくと後がラクになりますよ。
NORMSINVの基本的な使い方
NORMSINV関数の基本を、よく使う3つのパターンで見ていきましょう。
片側95%の臨界値を求める
「上位5%の境目にあたるzスコアはいくつ?」を求めるケースです。仮説検定で有意水準5%の片側臨界値が必要になる場面ですね。
=NORMSINV(0.95)
結果は約1.6449です。zスコアが1.6449を超えると、上位5%に入ることを意味します。検定統計量がこの値を上回ったら、帰無仮説を棄却できると判断できます。
両側95%信頼区間の臨界値を求める
両側95%信頼区間では、上下2.5%ずつを除外します。右側の臨界値は確率0.975で求めます。
=NORMSINV(0.975)
結果は約1.9600です。左側の臨界値は符号を反転した-1.9600になります。母平均の信頼区間を「平均 ± 1.96 × 標準誤差」と書く、あの「1.96」の出どころがこの式ですね。
よく使う確率値とzスコアの対応をまとめておきます。
| 確率(x) | zスコア(戻り値) | よく使う場面 |
|---|---|---|
| 0.90 | 1.2816 | 片側10%臨界値 |
| 0.95 | 1.6449 | 片側5%臨界値・信頼区間90% |
| 0.975 | 1.9600 | 両側95%信頼区間 |
| 0.99 | 2.3263 | 片側1%臨界値 |
| 0.995 | 2.5758 | 両側99%信頼区間 |
| 0.999 | 3.0902 | 片側0.1%臨界値 |
1.96という数字は統計で最も頻出する値の1つです。覚えておくと信頼区間の式を見たときにすぐ意味が読み取れますよ。
NORM.S.DISTで計算結果を往復検証する
NORMSINV関数の出力をNORM.S.DIST関数に渡すと、元の確率に戻るはずです。
=NORM.S.DIST(NORMSINV(0.95), TRUE)
結果は0.9500になります。元の確率と一致すれば、計算が正しいと確認できますね。この「往復検証」は、関数の使い方を覚えるときに自分の理解をチェックするのに便利です。
NORMSINVを実務で活用する3つのパターン
基本の使い方がわかったところで、実務で役立つパターンを3つ紹介します。
品質管理で合否ラインのzスコアを設定する
製造業の品質管理で「不良率を3%以下にしたい」場面を考えます。上位3%を超えたら規格外とする場合、合否ラインのzスコアは次のように求めます。
=NORMSINV(1 - 0.03)
これは =NORMSINV(0.97) と同じで、結果は約1.8808です。
zスコアが1.8808を超えるデータは規格外と判定できます。あとは平均と標準偏差(ひょうじゅんへんさ)がわかれば、合否ライン = 平均 + 1.8808 × 標準偏差 で具体的な値に換算できますよ。
テスト結果を偏差値の上位ラインに変換する
「上位10%は偏差値いくつ以上か?」を求める場合です。偏差値は平均50・標準偏差10に変換した値なので、次の式で計算できます。
=50 + 10 * NORMSINV(1 - 0.10)
NORMSINV(0.90) は約1.2816なので、結果は約62.82です。偏差値63以上が上位10%の目安になります。
同じ要領で、上位5%は偏差値66.45、上位1%は偏差値73.26と算出できます。塾の合格判定や社内表彰の基準ラインを決めるときに、感覚ではなく数字で説明できるようになりますよ。
母平均の信頼区間を計算する
サンプルから母平均の信頼区間を求めるときも、NORMSINVが活躍します。標本平均が50・標準誤差が2のとき、95%信頼区間は次のように書けます。
下限: =50 - NORMSINV(0.975) * 2
上限: =50 + NORMSINV(0.975) * 2
NORMSINV(0.975) は約1.9600なので、信頼区間は[46.08, 53.92] になります。「母平均は95%の信頼度でこの範囲にある」と説明できる、定番の使い方ですね。
NORMSINVとNORM.S.INVの違いと使い分け
冒頭で触れたとおり、NORMSINVには新関数名NORM.S.INVがあります。どちらを使えばいいのかを整理しておきましょう。
計算結果はまったく同じ
結論から言うと、2つの関数の計算結果はまったく同じです。
=NORMSINV(0.95) → 約 1.6449
=NORM.S.INV(0.95) → 約 1.6449
NORMSINVは「互換性のために残されている旧関数名」という位置づけです。Googleスプレッドシートの公式ヘルプでも、NORM.S.INVのページにNORMSINVが旧名として記載されています。
比較早見表
| 比較項目 | NORMSINV | NORM.S.INV |
|---|---|---|
| 導入時期 | Excel 2007以前 | Excel 2010以降 |
| 構文 | =NORMSINV(x) | =NORM.S.INV(x) |
| 引数の数 | 1つ | 1つ |
| 計算結果 | 同じ | 同じ |
| Googleスプレッドシート | 使用可能 | 使用可能(推奨) |
| 将来性 | 互換用・将来廃止の可能性あり | 現行の標準 |
新しくシートを作るときはNORM.S.INVを使いましょう。既存のシートでNORMSINVが使われている場合は、そのままでも問題なく動作しますよ。
Excel から移行するときの3つの注意点
ExcelでNORMSINVを使っていたシートをスプレッドシートに移行する場合、知っておきたいポイントを3つにまとめます。
1. そのままコピーしても動く
NORMSINVはスプレッドシートでも互換サポートされています。ExcelファイルをGoogleドライブにアップロードしても、数式はそのまま動作します。慌てて書き直す必要はありません。
2. 新しい数式はNORM.S.INVで書く
既存シートのNORMSINVは放置でOKです。ただし、新しくセルに数式を追加するときはNORM.S.INV関数を使いましょう。理由は将来性(旧関数は廃止される可能性あり)と一貫性(新旧混在はメンテしにくい)の2つです。
3. 一括置換で移行する手順
シート内のNORMSINVをまとめてNORM.S.INVに置き換えたい場合は、次の手順で対応できます。
- Ctrl + H(Mac: Cmd + H)で「検索と置換」を開く
- 検索欄に
NORMSINV(と入力する - 置換欄に
NORM.S.INV(と入力する - 「すべて置換」をクリックする
引数の構造が同じなので、カッコの中身を変える必要はありません。置換後に数式エラーが出ていないかだけ確認すれば完了です。
NORMSINVとあわせて覚えておきたい関連関数
NORMSINVの周辺にある統計関数を整理しておきます。「確率 → 値」「値 → 確率」のどちら向きの計算をしたいかで使い分けます。
| やりたいこと | 使う関数 | 記事リンク |
|---|---|---|
| 確率 → zスコア(標準正規分布) | NORMSINV / NORM.S.INV | NORM.S.INV関数 |
| zスコア → 確率(標準正規分布) | NORMSDIST / NORM.S.DIST | NORMSDIST関数 / NORM.S.DIST関数 |
| 確率 → 値(任意の正規分布) | NORMINV / NORM.INV | NORMINV関数 / NORM.INV関数 |
| 値 → 確率(任意の正規分布) | NORMDIST / NORM.DIST | NORMDIST関数 / NORM.DIST関数 |
| 値をzスコアに変換 | STANDARDIZE | STANDARDIZE関数 |
NORMSINVは「標準正規分布で確率→zスコア」の旧関数名です。「平均と標準偏差が任意の正規分布」を扱いたいときはNORMINV / NORM.INVを使う、と覚えておけばOKですよ。
NORMSINVでよく見るエラーと対処法
NORMSINV関数を使っているときに見かけやすいエラーを2つ紹介します。
#NUM! エラー:確率が範囲外
引数に0以下や1以上の値を指定すると #NUM! エラーになります。
=NORMSINV(0) → #NUM! エラー(0は不可)
=NORMSINV(1) → #NUM! エラー(1は不可)
=NORMSINV(-0.5) → #NUM! エラー(負の値は不可)
=NORMSINV(1.2) → #NUM! エラー(1超は不可)
有効な範囲は 0より大きく1より小さい値 です。0と1ちょうども含まないので注意してくださいね。
特にハマりやすいのが、パーセント表記との取り違えです。「95%」を入れたいとき =NORMSINV(95) と書いてしまうと一発でエラーになります。正しくは =NORMSINV(0.95) です。
#VALUE! エラー:引数が数値でない
引数に文字列を渡すと #VALUE! エラーになります。
=NORMSINV("abc") → #VALUE! エラー
セル参照を使うときは、参照先が数値かどうかを確認しましょう。空白や文字列が混じっている可能性があるなら、IF関数とISNUMBER関数(値が数値かどうか判定する関数)を組み合わせると、エラーを事前に防げます。
=IF(ISNUMBER(A1), NORMSINV(A1), "数値を入力してください")
ユーザー入力を受け取る計算シートでは、この防御パターンを入れておくと安心ですよ。
IFERRORでエラーを丸めて表示する
エラーを画面に出したくない場合は、IFERROR関数で包んでしまう方法もあります。
=IFERROR(NORMSINV(A1), "確率は0〜1で入力")
集計シートでエラーセルが目立つと見栄えが悪いので、こうしておくとレポートをそのまま共有しやすくなりますね。
まとめ|NORMSINVは「確率からzスコアを逆算する」旧関数
NORMSINV関数は、スプレッドシートで標準正規分布の逆関数を計算する旧名の関数です。記事の要点を振り返ります。
- 構文は
=NORMSINV(x)で、引数は0 < x < 1の累積確率1つだけ - 累積確率からzスコアを返し、信頼区間や仮説検定の臨界値を求められる
- 新関数名NORM.S.INVと計算結果はまったく同じ
- Excel 2010以降は新関数名が標準だが、スプレッドシートでも旧関数名がそのまま動く
- 新しく数式を書くならNORM.S.INVがおすすめ。既存シートは「検索と置換」で一括移行できる
- 範囲外の値で
#NUM!、文字列で#VALUE!エラーが出る。IFERRORやISNUMBERで防御できる
ExcelからスプレッドシートにNORMSINVを含むシートを移行しても、数式はそのまま動きます。慌てて書き直す必要はありませんよ。ただ、これから新しく入力する数式はNORM.S.INV関数に統一しておくと、シート全体のメンテナンスがラクになります。
