「10人を3人・3人・4人の3グループに分けると、何通りあるんだろう?」
グループ分けのパターン数を求めたい場面って、意外とありますよね。
COMBIN関数だけだと、グループの数だけ計算を繰り返す必要があって面倒です。
そんなときに使えるのがMULTINOMIAL関数です。各グループの人数を指定するだけで、分け方の総数を一発で計算してくれます。
この記事では基本の書き方からグループ分け・文字の並べ替えなどの活用例、FACT関数やCOMBIN関数との関係まで紹介します。
スプレッドシートのMULTINOMIAL関数とは?
MULTINOMIAL関数(読み方: マルチノミアル関数)は、多項係数を返す関数です。
名前は英語の「multinomial(多項式)」からきています。
多項係数とは、次の計算式で求める値のことです。
各引数の合計の階乗 / 各引数の階乗の積
たとえば =MULTINOMIAL(2, 3) と書くと「(2+3)! / (2! x 3!) = 120 / 12 = 10」が返ります。
ちょっとむずかしく見えますが、やっていることはシンプルです。「全体を決まった人数ずつのグループに分けるとき、何通りの分け方があるか」を求めているんですね。
MULTINOMIAL関数にできることをまとめると、次のとおりです。
- グループ分けの総パターン数を求める
- 同じ文字を含む文字列の並べ替えパターン数を計算する
- 多項分布の確率計算に使う
- FACT関数を使った手計算をまとめて処理する
NOTE
MULTINOMIAL関数はGoogleスプレッドシートの全バージョンで使えます。Excelとの互換性も完全なので、ファイルのやり取りでも安心です。
MULTINOMIAL関数の書き方(構文と引数)
基本構文
=MULTINOMIAL(値1, 値2, ...)
カッコの中に、各グループの人数(要素数)をカンマ区切りで入れます。
引数の説明
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値1 | 必須 | 1番目のグループの個数。0以上の整数を指定する |
| 値2, … | 任意 | 2番目以降のグループの個数。最大255個まで指定可能 |
引数を1つだけ指定した場合は「n! / n! = 1」となり、必ず1が返ります。
スプレッドシートでのMULTINOMIAL関数の基本的な使い方
もっともシンプルな使い方
2つのグループに分けるパターンです。
=MULTINOMIAL(2, 3)
結果は「10」です。5人を2人と3人のグループに分ける方法は10通りあります。
この計算は (2+3)! / (2! x 3!) = 120 / (2 x 6) = 10 です。
=MULTINOMIAL(3, 3)
結果は「20」です。6人を3人ずつの2グループに分ける方法ですね。
=MULTINOMIAL(1, 1, 1)
結果は「6」です。3人を1人ずつ3つに分ける方法は6通りです。これは3人の並べ方(3! = 6)と同じですね。
セル参照を使う
A1に「3」、B1に「3」、C1に「4」が入っているとします。
=MULTINOMIAL(A1, B1, C1)
結果は「4200」です。セル参照を使えば、人数を変えるだけで結果が自動更新されます。
特殊なケース
引数を1つだけ指定した場合は、常に「1」が返ります。
=MULTINOMIAL(5)
結果は「1」です。5! / 5! = 1 ですね。
引数に0を含めた場合は、そのグループを無視したのと同じ結果になります。
=MULTINOMIAL(3, 0, 4)
結果は「35」です。これは =MULTINOMIAL(3, 4) と同じ結果ですね。0! = 1 なので、計算に影響しません。
MULTINOMIAL関数の実践的な使い方・応用例
グループ分けの総パターン数を求める
10人を3人・3人・4人の3グループに分ける方法は何通りあるか求めてみましょう。
=MULTINOMIAL(3, 3, 4)
結果は「4200」です。4,200通りもの分け方があります。
この計算をFACT関数で書くとこうなります。
=FACT(10) / (FACT(3) * FACT(3) * FACT(4))
結果は同じく「4200」です。MULTINOMIAL関数のほうがずっとシンプルですよね。
TIP
2グループへの分け方はCOMBIN関数でも計算できます。3グループ以上に分ける場合はMULTINOMIAL関数が便利です。
同じ文字を含む文字列の並べ替えパターン数
「MISSISSIPPI」のように同じ文字を含む文字列の並べ替えパターン数を求めてみましょう。
MISSISSIPPIは全11文字で、内訳は次のとおりです。
- M: 1個
- I: 4個
- S: 4個
- P: 2個
=MULTINOMIAL(1, 4, 4, 2)
結果は「34650」です。34,650通りの並べ替えパターンがあります。
もし11文字がすべて異なる文字なら、並べ替えは11! = 39,916,800通りです。同じ文字があると重複するパターンが出るため、ぐっと少なくなるんですね。
社員旅行の部屋割りを計算する
12人の社員を4人部屋が3室に振り分ける方法は何通りか調べてみましょう。
=MULTINOMIAL(4, 4, 4)
結果は「34650」です。
TIP
この計算は「区別のあるグループ」への分け方です。部屋に番号がついている場合の計算ですね。「部屋の区別がない場合」は、この結果をグループ数の階乗で割ります。3室なら 34650 / 3! = 5775通りです。
サイコロの確率計算(多項分布)
サイコロを6回振って、1が2回・2が1回・3が3回出る確率を求めてみましょう。
まず、この出方のパターン数をMULTINOMIAL関数で計算します。
=MULTINOMIAL(2, 1, 3)
結果は「60」です。6回の試行のうち「どの回に1が出て、どの回に2が出て、どの回に3が出るか」のパターンが60通りあります。
全パターン数は6の6乗(46,656通り)です。各目の出る確率は1/6なので、次のように計算できます。
=MULTINOMIAL(2, 1, 3) * (1/6)^6
結果は「0.00129…」です。約0.13%の確率ですね。
よくあるエラーと対処法
MULTINOMIAL関数で発生しやすいエラーをまとめました。
| エラー | 原因 | 対処法 |
|---|---|---|
| #NUM! | 負の数を指定した(例: MULTINOMIAL(-1, 3)) | 0以上の整数を指定する |
| #VALUE! | 引数に文字列が入っている | セル参照先が数値かどうか確認する |
| #ERROR! | 構文ミス(カッコ忘れ等) | 数式の入力内容を見直す |
負の数を指定したとき
もっとも多いエラーです。グループの人数にマイナスはありえませんよね。
=MULTINOMIAL(-2, 3)
この数式は#NUM!エラーになります。セル参照の場合は、参照先に負の値が入っていないか確認してみてください。
引数に小数を指定したとき
小数を指定してもエラーにはなりません。小数点以下が切り捨てられて計算されます。
=MULTINOMIAL(2.7, 3.2)
この数式は =MULTINOMIAL(2, 3) と同じ結果で「10」を返します。
MULTINOMIAL関数と似た関数との違い・使い分け
| 関数 | 動作 | 用途 |
|---|---|---|
| MULTINOMIAL | 多項係数を返す | 3グループ以上への分け方 |
| FACT | 階乗(n!)を返す | 並べ方の総数・確率計算 |
| COMBIN | 組み合わせの数(nCr)を返す | 2グループへの分け方・抽選 |
| FACTDOUBLE | 二重階乗(n!!)を返す | 統計・物理の特殊計算 |
MULTINOMIAL関数とFACT関数の関係
MULTINOMIAL関数は、内部的にFACT関数の計算をまとめたものです。
MULTINOMIAL(a, b, c) = FACT(a+b+c) / (FACT(a) FACT(b) FACT(c))
たとえば =MULTINOMIAL(2, 3, 4) は次のFACT関数の計算と同じ結果になります。
=FACT(9) / (FACT(2) * FACT(3) * FACT(4))
どちらも結果は「1260」です。MULTINOMIAL関数のほうが数式がシンプルですね。
MULTINOMIAL関数とCOMBIN関数の関係
MULTINOMIAL関数の引数が2つの場合、COMBIN関数と同じ結果になります。
=MULTINOMIAL(3, 7)
結果は「120」です。
=COMBIN(10, 3)
こちらも結果は「120」です。
どちらも「10人を3人と7人に分ける方法」を計算しています。2グループへの分け方ならCOMBIN関数、3グループ以上ならMULTINOMIAL関数を使うのがおすすめです。
MULTINOMIAL関数とFACTDOUBLE関数の違い
FACTDOUBLE関数は二重階乗(n!!)を返す関数で、MULTINOMIAL関数とは計算内容がまったく異なります。
- MULTINOMIAL: 多項係数(グループ分けのパターン数)
- FACTDOUBLE: 二重階乗(1つおきに掛け算した積)
名前が似ている部分もありますが、用途は別物です。
Excelとの違い
MULTINOMIAL関数はExcelとGoogleスプレッドシートで完全に同じ動作です。
| 項目 | Excel | Googleスプレッドシート |
|---|---|---|
| 構文 | =MULTINOMIAL(数値1, …) | =MULTINOMIAL(値1, …) |
| 動作 | 多項係数を返す | 多項係数を返す |
| 小数の扱い | 小数点以下を切り捨て | 小数点以下を切り捨て |
| エラー時 | #NUM! / #VALUE! | #NUM! / #VALUE! |
引数名の表記が若干異なるだけで、機能は完全に同じです。
まとめ
MULTINOMIAL関数は、多項係数を求める関数です。
ポイントを整理します。
- 構文は
=MULTINOMIAL(値1, 値2, ...)で、各引数の合計の階乗 / 各引数の階乗の積を返す - グループ分けのパターン数を一発で計算できる
- 同じ文字を含む文字列の並べ替えパターン数にも使える
- 引数が2つならCOMBIN関数と同じ結果になる
- FACT関数で同じ計算ができるが、MULTINOMIAL関数のほうがシンプル
- FACTDOUBLE関数とは計算内容がまったく異なる
まずは =MULTINOMIAL(3, 3, 4) で「10人を3人・3人・4人に分ける方法 = 4,200通り」から試してみてください。
