🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

Excel の階乗(FACT)— n!・FACTDOUBLE・MULTINOMIAL(そして 171! のオーバーフロー)

|

Excel の階乗(FACT)— n!・FACTDOUBLE・MULTINOMIAL(そして 171! のオーバーフロー)

TL;DR=FACT(n)n の階乗n × (n−1) × … × 1 — を返し、n 個の 異なるものを順番に並べる方法が何通りあるかを数えます。=FACT(5)120 です。 毎回あなたを救う事実が 2 つあります。FACT(0)1(何もないものを並べる方法は ちょうど 1 通り)、そして 階乗は爆発的に増えるFACT(170) は 307 桁の数で、 FACT(171) は Excel をあふれさせて #NUM! を返します。FACTDOUBLE は 1 つおきに項を 飛ばし、MULTINOMIAL は重複するグループを含む並べ方を扱います。FACT は COMBINPERMUT の土台となる構成要素です。

=FACT(5)          ' 5×4×3×2×1 -> 120
=FACT(0)          ' 定義により -> 1
=FACT(171)        ' Excel には大きすぎる -> #NUM!  (上限は 170!)
=FACTDOUBLE(7)    ' 7×5×3×1 -> 105
=MULTINOMIAL(2,3,4) ' 9! / (2!·3!·4!) -> 1260

たいていのページは FACT を 1 行で定義し — 「数値の階乗を返す」 — =FACT(5) を示します。 そこは簡単な部分です。人が実際につまずくのは、階乗が何のためにあるのか、なぜ FACT(0)0 ではなく 1 を返すのか、そしてなぜ 171 のような一見おとなしい入力が突然エラーを 投げるのか、です。先に意味をつかめば、そのどれもが驚くには当たらなくなります。

この記事で学べること

  • 考え方の軸:階乗は異なるものの 並べ方を数える
  • =FACT(0)0 ではなく 1 である理由 — そしてその約束事が大切な理由
  • =FACT(171)#NUM! を返し、170! が Excel の絶対的な上限である理由
  • FACT が小数を切り捨て、負数を拒む仕組み
  • FACTDOUBLE(1 つおきに項を飛ばす積)と MULTINOMIAL(グループ化された並べ方)
  • FACTCOMBINPERMUT を組み立てる最小単位である理由

考え方の軸:階乗は並べ方を数える

FACT(n) は抽象的な数学の小技ではありません — 具体的な問いに答えます。n 個の異なる ものを、何通りの異なる順番で並べられるか? 本を 3 冊、棚に並べると、3! = 3×2×1 = 6 通りの並びがあります。4 冊目を加えると 4! = 24 通りです。新しい項目が加わるたびに、それが 取りうる位置の数だけ場合の数が掛かる — だから数式は掛け算の連なり n × (n−1) × (n−2) × … × 1 になります。

その「掛け算の連なり」という捉え方が、このファミリー全体を貫く糸です。階乗とは、カウント ダウンの PRODUCT にすぎません。組み合わせと順列は、そうした 2 つの積の です。階乗を 「小さく始まって急速に膨らむ掛け算」と見れば、その威力も、その破綻の仕方(とてつもなく 大きくなる)も、自然に見えてきます。

FACT(0) が 0 ではなく 1 である理由

これはバグに見えて、実はシステム全体の要です。

=FACT(0)   ' -> 1

空集合を並べる方法は、ちょうど 1 通り — 何も並べないという並べ方 — なので、0!0 ではなく 1 と定義されます。「何もないものを並べる方法は 1 通り」という直感を超えて、この 約束事は、組み合わせと順列の数式を境界でも成り立たせるものです。COMBIN(n, n)(すべてを 選ぶ)は 1 に等しくなければならず、階乗の数式がそれを実現できる唯一の道が 0! = 1 なの です。もし FACT(0)0 を返したら、これらの数式が境界に当たるたびにゼロ除算が起きて しまいます。つまり、この「奇妙」な答えこそ、他のすべてを一貫させる答えなのです — 好奇心の 対象としてではなく、ルールとして覚えてください。

オーバーフローの天井:FACT(171) は #NUM!

階乗は、あなたがセルに打ち込むほぼ何よりも速く増え、それには厳しい帰結があります。

=FACT(170)   ' -> 7.257...E+306   (307 桁の数、まだ大丈夫)
=FACT(171)   ' -> #NUM!           (Excel の最大数を超えた)

Excel が表せる最大の数はおよそ 1.8×10³⁰⁸ です。FACT(170) はぎりぎりその下に収まり、 FACT(171) はそれを超えて #NUM! — 「数値が範囲外」エラー — を返します。170! が Excel で計算できる最大の階乗で、それが結論です。 FACT を確率の数式に流し込んでいて #NUM! を 見たなら、たいていはこれが原因です。最終的な答え(比)は小さかったはずなのに、途中の階乗の どれかがオーバーフローしたのです。まさにそれを解決するのが COMBINPERMUT です — 巨大な 階乗を一度も実体化させずに を計算します。=FACT(n)/FACT(n-k) を手で組み立てる代わりに、 これらに手を伸ばしてください。

小数と負数

もう 2 つの小さなルールが FACT の振る舞いを締めくくります。

=FACT(5.9)   ' 5 に切り捨て -> 120   (6 に丸めるのではない)
=FACT(-1)    ' 階乗は負数に定義されない -> #NUM!

整数でない入力は 切り捨て られます。丸めではありません — FACT(5.9)6 ではなく 5 を使います。そして階乗は負数に意味を持たないので、負の引数はどれも #NUM! を返します。 (整数以外に対する完全な「一般化階乗」はガンマ関数で、Excel はこれを GAMMA / GAMMALN として別に用意しています。FACT 自体は整数専用です。)

FACTDOUBLE:1 つおきに項を飛ばす

FACTDOUBLE二重階乗 を計算します — 下りていく途中で 1 つおきに数を飛ばす積です。

=FACTDOUBLE(7)   ' 7×5×3×1 -> 105   (奇数の n:奇数だけ)
=FACTDOUBLE(8)   ' 8×6×4×2 -> 384   (偶数の n:偶数だけ)
=FACTDOUBLE(0)   ' -> 1

奇数の n なら奇数を 1 まで掛け、偶数の n なら偶数を 2 まで掛けます。組み合わせ論や、 一部の物理・統計の数式(たとえばサインやコサインのべき乗の積分)に現れます。頻繁に必要に なるものではありませんが、数式が n!! — 感嘆符 2 つ、二重階乗 — を求めているときは、 FACT(FACT(n)) ではなくこの関数です。

MULTINOMIAL:重複するグループを含む並べ方

MULTINOMIAL は、もっと微妙な数え上げの問いに答えます。いくつかが 同一 であるとき、 何通りの異なる並べ方があるか? その数式は、引数の和の階乗を、各引数の階乗の積で割ったもの です。

=MULTINOMIAL(2, 3, 4)   ' (2+3+4)! / (2!·3!·4!) = 9!/288 -> 1260

古典的な使い道は、同じ文字を含む単語の並べ方を数えることや、n 個の項目を決まったサイズの グループに分けることです。ある文字が 2 回、別の文字が 3 回、また別の文字が 4 回繰り返される 9 文字の単語の文字を並べると、1260 通りの異なる並びになります — 9! = 362880 よりはるかに 少ないのは、同じ文字 2 つを入れ替えても新しい並びにはならないからです。MULTINOMIAL はその 割り算をあらかじめ組み込んでくれます。

FACT の位置づけ:数え上げの最小単位

Excel の組み合わせ論ツールキットは、すべて階乗に還元されます。

  • PERMUT(n, k) = n! / (n−k)!n から k 個を選ぶ順序付きの並べ方。
  • COMBIN(n, k) = n! / (k!·(n−k)!) — 順序なしの選び方。

どちらも階乗の比であり、まさにそれが、FACT の呼び出しを自分で割るのではなくこれらの関数に 計算させるべき理由です。生の FACT(n)171 で当たるオーバーフローを、これらは避けて くれます。FACT を最小単位(原子)、COMBIN/PERMUT をそこから組み立てた分子と考えて ください — COMBIN & PERMUT ガイド がちょうどそこから話を 引き継ぎます。

ExcelMaster が役立つ場面

階乗は呼び出すのは簡単で、誤用するのも簡単です — オーバーフローした途中結果からの #NUM! や、 上流のどこかで 0! が誤って扱われてずれた確率、といった具合に。ExcelMaster に「この 8 個の項目を並べる方法は何通り?」と尋ねれば、答えと理由を添えて =FACT(8) を返します。 「確率の数式が #NUM! を返すのはなぜ?」と尋ねれば、大きすぎる階乗を見つけ出し、巨大な途中 結果がそもそも生じないように COMBIN で式を書き換えます。

よくある質問

Excel で階乗を計算するには?

FACT を使います:=FACT(5)120(つまり 5×4×3×2×1)を返します。セル参照も受け取れ ます — =FACT(A1)。入力は非負の数でなければならず、小数は下の整数に切り捨てられ、負数は #NUM! を返します。

Excel で FACT(0) が 1 を返すのはなぜですか?

数学では 0!1 と定義されているからです — ゼロ個の項目を並べる方法はちょうど 1 通り (何も並べないという並べ方)です。この約束事は、組み合わせと順列の数式を、そうでなければ ゼロ除算になる境界でも一貫させます。=FACT(0)1 を返すのは正しく、バグではありません。

FACT が #NUM! エラーを返すのはなぜですか?

よくある理由は 2 つです。入力が であること(階乗は負数に定義されません)、または結果が 大きすぎる こと — Excel はおよそ 1.8×10³⁰⁸ より大きい数を表せないため、=FACT(171) 以上は #NUM! にオーバーフローします。Excel で計算できる最大の階乗は 170! です。階乗の比 だけが必要なら、オーバーフローを避けるために COMBINPERMUT を使いましょう。

FACT と FACTDOUBLE の違いは何ですか?

FACT(n)n から 1 までのすべての整数を掛けます(n!)。FACTDOUBLE(n) は 1 つおきに 飛ばします — 二重階乗 n!! — なので FACTDOUBLE(7)7×5×3×1 = 105FACTDOUBLE(8)8×6×4×2 = 384 です。数式が明確に n!! を求めているときだけ FACTDOUBLE を使いましょう。

MULTINOMIAL は何をしますか?

MULTINOMIAL(a, b, c, …)(a+b+c+…)!a!·b!·c!·… で割ったものを返します。そのサイズの グループに分けた項目の異なる並べ方を数えます — 繰り返す文字を含む単語や、項目を決まった サイズのグループに分ける場合に便利です。=MULTINOMIAL(2,3,4)1260 を返します。

検証環境

検証環境: Excel 365 (Windows 11) — 最終確認 2026-07-26。

関連ガイド: Excel COMBIN & PERMUT · Excel PRODUCT · Excel POWER & SQRT · Excel ROUND · Excel SUMPRODUCT