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 はCOMBINとPERMUTの土台となる構成要素です。
=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(グループ化された並べ方)FACTがCOMBINとPERMUTを組み立てる最小単位である理由
考え方の軸:階乗は並べ方を数える
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! を
見たなら、たいていはこれが原因です。最終的な答え(比)は小さかったはずなのに、途中の階乗の
どれかがオーバーフローしたのです。まさにそれを解決するのが COMBIN と PERMUT です — 巨大な
階乗を一度も実体化させずに 比 を計算します。=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! です。階乗の比
だけが必要なら、オーバーフローを避けるために COMBIN か PERMUT を使いましょう。
FACT と FACTDOUBLE の違いは何ですか?
FACT(n) は n から 1 までのすべての整数を掛けます(n!)。FACTDOUBLE(n) は 1 つおきに
飛ばします — 二重階乗 n!! — なので FACTDOUBLE(7) は 7×5×3×1 = 105、FACTDOUBLE(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
