スプレッドシートで相補誤差関数を使おうとして、ERFC と ERFC.PRECISE の2つが並んでいて「どっちを選べばいいの?」と迷ったことはありませんか。名前に「PRECISE(精密)」と付いているので、なんとなく後者のほうが信頼できそうに見えてしまいますよね。
結論から言うと、ERFC.PRECISE は「ERFCより精度が高い後継関数」というよりは、負の数も含めた広い引数範囲で安心して使える、ERFCの拡張版です。Excel 2010で命名規則を整理した際に追加された関数で、Googleスプレッドシートでもそのまま使えます。
この記事では、ERFC.PRECISE 関数の構文・基本使い方・ERFC との違いを、実際のスプレッドシートでの入力例とともに整理します。誤差関数ファミリー4関数(ERF / ERF.PRECISE / ERFC / ERFC.PRECISE)の使い分けマトリクスも用意したので、「結局どれを使えばいいの?」という疑問もこの1本でスッキリしますよ。ERF.PRECISE 側の解説は スプレッドシートのERF.PRECISE関数の使い方|ERFとの違いを解説 にまとめてあるので、合わせて読むと理解が立体的になります。
ERFC.PRECISE関数とは
ERFC.PRECISE 関数は、Googleスプレッドシートのエンジニアリング関数カテゴリに属する関数です。ガウスの相補誤差関数(complementary error function)を計算し、引数 x を下限とした「∞までの誤差関数の値」を返します。
数学的に書くと、相補誤差関数の定義は以下のとおりです。
erfc(x) = 1 − erf(x) = (2/√π) × ∫ₓ^∞ e^(-t²) dt
「全確率の1から erf(x) を引いた残り」を返す関数、と言い換えるとイメージしやすいです。ERF.PRECISE が「中央から x までの面積」を返すのに対し、ERFC.PRECISE は「x から外側に飛び出す面積」を返します。両者は相補関係にあるので、足すと必ず1になります。
戻り値の範囲は 0〜2 です。x が 0 のとき値は 1、x が大きくなるほど 0 に近づきます。負の数を渡したときに 1 を超えて 2 に近づくのが、ERF.PRECISE とは違う特徴ですよ。
ERFC.PRECISEの構文と引数
構文はシンプルそのもの。引数は1つだけです。
=ERFC.PRECISE(x)
| 引数 | 内容 | 必須 |
|---|---|---|
| x | 相補誤差関数を計算する下限値(数値) | 必須 |
x には数値リテラル(例: 1)か、数値が入ったセル参照(例: A2)を渡します。文字列や空白を渡すと #VALUE! エラーになります。
関数が返す値の意味
戻り値は「x から ∞ までの区間における、ガウス曲線下の面積を正規化した値」です。サンプルを並べると数値感がつかみやすいですよ。
x の値 | =ERFC.PRECISE(x) の戻り値 |
|---|---|
| -2 | 約 1.9953222650 |
| -1 | 約 1.8427007929 |
| 0 | 1 |
| 0.5 | 約 0.4795001222 |
| 1 | 約 0.1572992071 |
| 2 | 約 0.0046777350 |
| 3 | 約 0.0000220905 |
x が 2 を超えると戻り値はほぼ 0 に張り付きます。「ある値より外側に出る確率はほぼゼロ」という統計的な意味を持ち、品質管理の不良率計算で活躍する所以ですよ。
ERFC.PRECISE関数の基本的な使い方
ここからは実際にスプレッドシートで入力する例を見ていきます。引数が1つの関数なので、迷うポイントはほぼありません。
セルへの入力例
いちばんシンプルな使い方は、数値を直接書き込むパターンです。
=ERFC.PRECISE(1)
このセルには 0.1572992071 が表示されます。「erfc(1) の値」、つまり「0から1までの面積(約0.8427)の外側に残る確率」です。
数値を直接入力する場合
特定の値で相補誤差関数を確認したいだけなら、引数に数値リテラルをそのまま渡します。
=ERFC.PRECISE(0.5)
=ERFC.PRECISE(1.96)
=ERFC.PRECISE(-1)
3つ目の例のように、負の値も気軽に渡せるのがポイントです。ERFC.PRECISE(-1) は約 1.8427007929 を返します。「erfc(-x) = 2 − erfc(x) の関係から、1 を超えた値が返ってくる」と覚えておくと結果の検算が楽になります。
セル参照を使う場合
実務では、別セルに入力した値を引数として参照する形が一般的です。A列に x の値を並べて、B列で相補誤差関数の値を一括計算するような使い方ですね。
| A | B | |
|---|---|---|
| 1 | x | erfc(x) |
| 2 | 0 | =ERFC.PRECISE(A2) |
| 3 | 0.5 | =ERFC.PRECISE(A3) |
| 4 | 1 | =ERFC.PRECISE(A4) |
| 5 | 1.5 | =ERFC.PRECISE(A5) |
| 6 | 2 | =ERFC.PRECISE(A6) |
B2セルに =ERFC.PRECISE(A2) と入力したら、あとは下方向にドラッグコピーするだけです。表計算らしいシンプルな使い方ができますよ。
ERFC関数とERFC.PRECISEの違い
ここがこの記事の本題です。ERFC と ERFC.PRECISE の違いを正しく理解しておくと、関数選びで迷わなくなります。
引数の許容範囲が異なる
最大の違いは「負の数を渡せるかどうか」です。
=ERFC(-1) → 古いExcelでは #NUM! エラー
=ERFC.PRECISE(-1) → 約 1.8427007929(問題なく計算)
歴史的に ERFC 関数(Excel 2007以前)は引数が 0以上の数値に限定 されていました。負の数を渡すと #NUM! エラーになる仕様だったのです。一方 ERFC.PRECISE はExcel 2010で追加された改訂版で、負の数も含めた実数全域で計算可能 という拡張が入っています。
Googleスプレッドシートの ERFC は内部的に ERFC.PRECISE 相当の挙動になっているケースが多いです。そのため、負の数でもエラーにならず計算できる場合があります。とはいえ、Excelとの互換性を意識する場面では ERFC.PRECISE を選んでおくと「負の数で動かない」というハマりを避けられますよ。
「ERFC(x) と ERFC.PRECISE(x) は同値」になる範囲
非負の数(0以上)を渡している限り、ERFC と ERFC.PRECISE の戻り値は 完全に等価 です。
=ERFC(1) → 0.1572992071
=ERFC.PRECISE(1) → 0.1572992071
=ERFC(0.745) → 0.2920710800
=ERFC.PRECISE(0.745) → 0.2920710800
つまり「正の数しか扱わない」と分かっている処理なら、どちらの関数を使っても結果は同じです。違いが出るのは引数が負になる場合だけ、と覚えておくとシンプルですよ。
どちらを使うべきかの判断基準
「等価な範囲もあるなら、どっちでもいいんじゃない?」と思うかもしれませんが、ケースによって向き不向きがあります。判断のフローはざっくり次のとおりです。
- 引数に負の数が混ざる可能性がある →
ERFC.PRECISEを使う(エラー回避) - Excel 2010以降との互換性を重視する →
ERFC.PRECISEを選ぶと意図が明確 - 古いExcel(2007以前)との互換性が必要 →
ERFCを使う - どちらでもよい場合 → コードレビューで関数の意図を伝えやすい
ERFC.PRECISEを推奨
実務では「今は正の数しか想定していなくても、将来的に負の数が混ざる可能性がある」というケースが多いです。そのため、特別な理由がない限り ERFC.PRECISE を選んでおくと安全ですよ。
誤差関数ファミリー4関数を比較する
スプレッドシートの誤差関数には、ERFC.PRECISE のほかに ERF ERF.PRECISE ERFC の3関数があります。4関数の関係を整理しておきましょう。
ERF / ERF.PRECISE / ERFC / ERFC.PRECISEの比較表
| 関数名 | 引数の数 | 積分下限 | 積分上限 | 返す範囲 | 負の数の扱い |
|---|---|---|---|---|---|
ERF | 1〜2個 | 第1引数(省略時は0) | 第2引数(省略時は第1引数) | -1〜1 | OK |
ERF.PRECISE | 1個 | 0 に固定 | 引数の値 | -1〜1 | OK |
ERFC | 1個 | 引数の値 | ∞ | 0〜2 | 古い実装ではエラー |
ERFC.PRECISE | 1個 | 引数の値 | ∞ | 0〜2 | OK |
ERFC 系は補完誤差関数と呼ばれ、ERF 系の「残り部分」を計算します。具体的には次の関係が成り立ちます。
ERFC.PRECISE(x) = 1 − ERF.PRECISE(x)
=ERF.PRECISE(1) が約 0.8427 なら、=ERFC.PRECISE(1) は約 0.1573 になります。「事象が起こる確率」と「起こらない確率」のような相補関係をイメージするとピンときやすいですよ。
「PRECISE」という名前の意味
「PRECISE」と聞くと「精度が高い」と思ってしまいますが、これはちょっと違います。Excel 2010では多くの関数の精度や引数仕様が改善されました。.PRECISE はそのときに、命名規則を統一するために付けられたサフィックスです。
ERFC.PRECISE の場合、改善ポイントは2つあります。
- 引数の許容範囲を実数全域に拡張(負の数でもエラーにならない)
- アルゴリズムの精度改善(特に絶対値が大きいときの安定性向上)
つまり ERFC.PRECISE は「ERFCより精度が高い新バージョン」というより、「負の数を含めた広い範囲で正しく動く改訂版」という位置づけです。非負の引数なら ERFC と完全に同じ値を返すので、戻り値の精度比較に意味はありません。
ERFC.PRECISEの実務活用パターン
引数1つのシンプルな関数ですが、組み合わせ次第で実務にしっかり使えます。代表的なパターンを2つ紹介します。
品質管理での不良率計算
製造業の品質管理で「規格外れになる確率(不良率)」を直接求めたいときに便利です。たとえば製品の寸法が平均 10mm、標準偏差 0.1mm の正規分布に従うとします。規格幅が ±0.3mm(9.7〜10.3mm)のとき、不良率は次のように計算できますよ。
=ERFC.PRECISE(0.3 / (0.1 * SQRT(2)))
この式は 約 0.0027(0.27%) を返します。ERF.PRECISE で「規格内に収まる確率」を出してから 1 から引く、という二段構えは不要です。ERFC.PRECISE 一発で「外れる確率」が直接求まるのが利点ですね。
シックスシグマ(±6σ)の管理基準を確認するときも同様です。=ERFC.PRECISE(6 / SQRT(2)) を計算すれば、6σ外れの確率(約 1.97×10⁻⁹)が出ますよ。
拡散方程式・熱伝導の解析解で使う
工学系の解析解には erfc(x) がそのまま登場するパターンが多いです。たとえば半無限固体の表面温度を急変させたときの内部温度分布は、次の形で表されます。
T(x, t) = T₀ + (Tₛ − T₀) × erfc(x / (2√(αt)))
ここで α は熱拡散率、x は表面からの距離、t は時間です。スプレッドシートで具体的な数値を入れて温度分布をシミュレートする場合、ERFC.PRECISE をそのまま使えますよ。
=$T0$ + ($Ts$ - $T0$) * ERFC.PRECISE(A2 / (2 * SQRT($alpha$ * $t$)))
この用途では負の x を扱う場面はほぼありません。検算のときは「x = 0 で erfc(0) = 1 になる(表面が即座に Tₛ に到達する)」という性質を確認しておくとミスを防げます。
エラーが出たときの対処法
ERFC.PRECISE はシンプルな関数ですが、引数の渡し方を間違えるとエラーになります。代表的な2つを押さえておきましょう。
#VALUE!エラーの原因と解決策
原因: 引数に数値以外(文字列、日付の表記ミス、空白セルへの誤参照など)を渡している。
=ERFC.PRECISE("一") → #VALUE!
=ERFC.PRECISE(A1) → A1が空白や文字列だと #VALUE!
解決策: 引数が必ず数値になっていることを確認します。セル参照の場合は =ISNUMBER(A1) でTRUEが返るかチェックしてみてください。文字列で「1」と入っているなら、=ERFC.PRECISE(VALUE(A1)) のように VALUE 関数(文字列を数値に変換する関数)で変換するのも手です。
#NUM!エラーの原因と解決策
原因: 古いExcelで ERFC に負の値を渡したときや、ERFC.PRECISE に極端に大きな絶対値を渡したときに発生することがあります。Googleスプレッドシートの ERFC.PRECISE では実用範囲内ではほぼ起こりません。
解決策: 引数の絶対値が極端に大きくないか確認します。相補誤差関数は x ≥ 4 程度で戻り値がほぼ 0、x ≤ -4 程度で戻り値がほぼ 2 に収束します。それ以上の値を渡す必要があるかを業務文脈で見直してみてください。
なお、互換性が必要な場面で古いExcelの ERFC を呼んでいてエラーになる場合は、ERFC.PRECISE に置き換えるだけで解決するケースが多いですよ。
まとめ
ERFC.PRECISE 関数は、引数1つのシンプルな相補誤差関数です。ERFC 関数の改訂版という位置づけで、「負の数を含めた広い範囲でも安全に使える」のが最大のメリットです。
ポイントを振り返っておきましょう。
- 構文は
=ERFC.PRECISE(x)、引数は 下限値1つだけ - 戻り値は 0〜2 の範囲、
x = 0で 1、xが大きくなるほど 0 に近づく ERFC.PRECISE(x) = 1 − ERF.PRECISE(x)の相補関係が成り立つ- 非負の引数なら
ERFCと完全に同値、違いが出るのは負の数を渡すとき PRECISEは「精度」というより「引数の許容範囲を拡張した改訂版」の意味- 品質管理の不良率を一発で計算できるのが実務での強み
「負の数を扱う可能性があるか」「Excelとの互換性をどこまで意識するか」で ERFC と ERFC.PRECISE を使い分けるのが基本です。迷ったときは ERFC.PRECISE を選んでおくと、後から困りにくいですよ。
誤差関数ファミリーの全体像をもう一段深く理解したい方は、ペア記事の スプレッドシートのERF.PRECISE関数の使い方|ERFとの違いを解説 と スプレッドシートのERF関数の使い方|誤差関数(Error Function)を解説 も合わせて読んでみてください。ERF と ERFC の関係、PRECISE 系の位置づけが立体的につかめます。ERFC 関数自体の使い方は スプレッドシートのERFC関数の使い方|相補誤差関数 にまとめてあるので、合わせてどうぞ。
統計・品質管理・工学計算で相補誤差関数が必要になったら、まずは ERFC.PRECISE をシンプルに使ってみてください。ERFC と迷う場面はほぼなくなりますよ。
