スプレッドシートのGAMMA関数の使い方|ガンマ関数

スポンサーリンク

「3.5の階乗って、どうやって計算するんだろう?」

スプレッドシートで統計や確率の計算をしていると、整数だけでなく小数の階乗が必要になる場面がありますよね。

FACT関数は整数の階乗しか計算できないので、小数には対応できません。

そんなときに使えるのがGAMMA関数です。整数はもちろん、小数に対しても「階乗を拡張した値」を返してくれます。

この記事では、GAMMA関数の基本の書き方から実務での活用例、FACT関数やGAMMALN関数との違いまで紹介します。

スプレッドシートのGAMMA関数とは?

GAMMA関数(読み方: ガンマ関数)は、指定した数値のガンマ関数値 Γ(x) を返す関数です。

名前はギリシャ文字の「Γ(ガンマ)」からきています。

ガンマ関数は「階乗を小数まで拡張した」数学の仕組みです。整数 n に対しては次の関係が成り立ちます。

  • GAMMA(n) = (n-1)!
  • つまり GAMMA(6) = 5! = 120

ポイントは、FACT関数では計算できない「小数の階乗」も扱えることです。たとえば =GAMMA(4.5) は約 11.63 を返します。

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

  • 整数・小数を問わず、ガンマ関数値を計算する
  • 統計分布(ガンマ分布・カイ二乗分布など)の確率計算に使う
  • FACT関数ではできない小数の階乗相当の値を求める

NOTE

GAMMA関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。

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

基本構文

=GAMMA(数値)

カッコの中に「数値(ガンマ関数値を求めたい値)」を1つだけ入れます。

引数の説明

引数必須/任意説明
数値必須ガンマ関数値を求めたい正の数値。整数でも小数でも指定できる

引数は1つだけなので、とてもシンプルですね。ただし、0や負の整数を指定するとエラーになるので注意してください。

GAMMA関数の基本的な使い方

整数を指定する

まずは整数を指定してみましょう。GAMMA(n) は (n-1)! を返します。

=GAMMA(1)

結果は「1」です。これは 0! = 1 に相当します。

=GAMMA(5)

結果は「24」です。4! = 4 x 3 x 2 x 1 = 24 ですね。

=GAMMA(6)

結果は「120」です。5! = 120 なので、=FACT(5) と同じ値が返ります。

整数の場合は「GAMMA(n) は (n-1) の階乗」と覚えておくとわかりやすいですよ。

小数を指定する

GAMMA関数の真価は、小数にも対応している点です。

=GAMMA(4.5)

結果は約「11.63」です。FACT関数では小数を整数に切り捨てて計算します。GAMMA関数なら小数でも正確な値を返してくれますよ。

=GAMMA(0.5)

結果は約「1.77」です。数学的には √π(パイの平方根)と等しい有名な定数ですよ。統計学の計算でよく登場します。

セル参照を使う

A1に数値「7」が入っているとします。

=GAMMA(A1)

結果は「720」です。GAMMA(7) = 6! = 720 ですね。セル参照を使えば、値を変えるだけで結果が自動更新されます。

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

階乗の値を一覧で確認する

A列に1から10までの数値が入っているとき、B列にGAMMA関数を使って各値のガンマ関数値(= 前の数の階乗)を一覧にできます。

=GAMMA(A1)

この数式をB1に入れて下にコピーすると、1から10までのガンマ関数値が一覧で表示されます。

A列の値GAMMA(A) の結果意味
110! = 1
211! = 1
322! = 2
463! = 6
5244! = 24
61205! = 120

GAMMA関数で組み合わせの一般化を計算する

整数の組み合わせはCOMBIN関数で計算できます。しかし、小数を含む一般化された組み合わせの計算にはGAMMA関数が必要です。

一般化された二項係数の公式は次のとおりです。

=GAMMA(n+1) / (GAMMA(r+1) * GAMMA(n-r+1))

たとえば n=5.5、r=2 のときは次のようになります。

=GAMMA(5.5+1) / (GAMMA(2+1) * GAMMA(5.5-2+1))

結果は約「12.37」です。COMBIN関数では整数しか扱えない計算を、GAMMA関数なら実現できます。

GAMMALN関数と組み合わせて大きな値を扱う

GAMMA関数は引数が約172以上になると、オーバーフローで#NUM!エラーになります。大きな値を扱うときは、GAMMALN関数を使うのが定番です。GAMMALN関数はガンマ関数の自然対数を返してくれます。

=GAMMA(172)

この数式は#NUM!エラーになります。

=GAMMALN(172)

こちらは約「711.7」を返します。対数に変換することで、巨大な値でもエラーなく計算できますよ。

対数の値を元に戻したいときは、EXP関数=EXP(GAMMALN(172)) と書けます。ただし、172以上では結果が非常に大きいため精度に限界があります。その点は覚えておきましょう。

TIP

統計分布の計算で大きなガンマ関数値が必要なときは、GAMMALN関数で対数のまま計算を進め、最後にEXP関数で戻す方法がおすすめです。

よくあるエラーと対処法

GAMMA関数で発生しやすいエラーをまとめました。

エラー原因対処法
#NUM!0または負の整数を指定した正の数値を指定する
#NUM!値が大きすぎる(約172以上)GAMMALN関数を使って対数で計算する
#VALUE!引数に文字列が入っているセル参照先が数値かどうか確認する

0や負の整数を指定したとき

もっとも多いエラーです。ガンマ関数は0と負の整数では定義されていません。

=GAMMA(0)

この数式は#NUM!エラーになります。負の整数(-1、-2、-3…)も同様です。

ただし、負の小数(-0.5、-1.5 など整数でない負の値)は計算できます。 =GAMMA(-0.5) は約「-3.54」を返しますよ。

値が大きすぎるとき

GAMMA関数の結果が大きくなりすぎると、オーバーフローで#NUM!エラーになります。

=GAMMA(172)

この数式はエラーです。上限は約171.6までです。

大きな値が必要なときは =GAMMALN(数値) に切り替えてみてください。

FACT関数・GAMMALN関数との違い・使い分け

関数動作対応する値用途
GAMMAガンマ関数値 Γ(x) を返す正の実数(小数OK)小数の階乗・統計分布の計算
FACT階乗 n! を返す0以上の整数のみ順列・組み合わせ・確率計算
GAMMALNLN(Γ(x)) を返す(自然対数)正の実数大きな値のオーバーフロー回避

GAMMA関数とFACT関数の違い

FACT関数は整数の階乗専用で、小数は切り捨てて計算します。一方、GAMMA関数は小数にも正確に対応しています。ここが最大の違いです。

整数の階乗を計算するだけならFACT関数のほうがシンプルです。

  • FACT(5) = 120(5の階乗をそのまま返す)
  • GAMMA(6) = 120(引数を1つ大きくする必要がある)

FACT関数で n! を求めたいときは =FACT(n) と書けます。GAMMA関数だと =GAMMA(n+1) です。整数の階乗だけならFACT関数のほうが直感的ですね。

GAMMA関数とGAMMALN関数の関係

GAMMALN関数は、GAMMA関数の結果の自然対数を返す関数です。

=GAMMALN(5)

この結果(約3.18)は、=LN(GAMMA(5)) つまり =LN(24) と同じ値です。

GAMMA関数は約172以上でオーバーフローします。GAMMALN関数なら桁数が減るので安全に計算できますよ。大きなガンマ関数値が必要な場面では、ぜひ活用してみてください。

Excelとの違い

GAMMA関数はExcelとGoogleスプレッドシートで完全に同じ動作です。

項目ExcelGoogleスプレッドシート
構文=GAMMA(数値)=GAMMA(数値)
動作ガンマ関数値を返すガンマ関数値を返す
対応バージョンExcel 2013以降全バージョン
エラー時#NUM! / #VALUE!#NUM! / #VALUE!

Excelでの使い方はExcelのGAMMA関数の記事で詳しく解説しています。

まとめ

GAMMA関数は、指定した数値のガンマ関数値 Γ(x) を返す関数です。

ポイントを整理します。

  • 構文は =GAMMA(数値) の1引数。整数にも小数にも対応
  • 整数 n に対しては GAMMA(n) = (n-1)! の関係がある
  • 小数の階乗を求められるのがFACT関数との最大の違い
  • GAMMA(0.5) = √π(約1.77)は統計学でよく使う値
  • 0や負の整数では#NUM!エラー。約172以上もオーバーフローする
  • 大きな値にはGAMMALN関数(自然対数で返す)が便利
  • ExcelのGAMMA関数と完全に同じ動作で、互換性も安心

まずは =GAMMA(5) で「24」が返ることを確認してみてください。

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