スプレッドシートのMULTINOMIAL関数の使い方|班分けが何通りか一発計算

スポンサーリンク

「9人を2人・3人・4人の班に分けたい。分け方は全部で何通りあるんだろう?」

研修の班分けやシフトの割り当てで、こんな疑問が浮かぶことがありますよね。電卓で階乗を掛けたり割ったりするのは手間がかかり、桁の打ち間違いも起きがちです。

GoogleスプレッドシートのMULTINOMIAL関数なら、各班の人数を並べるだけで答えが出ます。この記事では9人の班分けを1つの例にして、結果の数字の意味からFACT・COMBINでの検算まで順に見ていきましょう。

スプレッドシートのMULTINOMIAL関数とは?「班分けの分け方の数」を出す関数

結論:9人を2・3・4人の班に分けると1260通り

先に答えから見てみましょう。9人をA班2人・B班3人・C班4人に分ける方法は、次の1式で求められます。

=MULTINOMIAL(2, 3, 4)

結果は「1260」です。誰をどの班に入れるかのパターンが、全部で1,260通りあるという意味になります。

定義式と構文

MULTINOMIAL関数の読み方は「マルチノミアル」。英語で「多項の」という意味で、数学では「多項係数」と呼ばれる値を返します。

Googleの公式ヘルプでは「値の合計の階乗を、各値の階乗の積で割った結果」と説明されています。階乗とは、1からその数までを全部掛けた値のこと。たとえば4の階乗(4!)は1×2×3×4=24です。

先ほどの例を定義式に当てはめると、こうなります。

(2+3+4)! ÷ (2! × 3! × 4!)
= 362880 ÷ (2 × 6 × 24)
= 362880 ÷ 288
= 1260

階乗そのものを求める関数はFACT関数です。MULTINOMIAL関数は、この割り算を1つにまとめてくれる関数だと考えると分かりやすいでしょう。

構文と引数は次のとおりです。

=MULTINOMIAL(値1, [値2, ...])
引数必須/任意説明
値1必須1つ目の班の人数。数値またはセル範囲を指定
値2, …任意2つ目以降の班の人数。数値またはセル範囲を指定

基本の使い方:数字を並べる・セルを参照する・範囲で渡す

直書きとセル参照

いちばん簡単なのは、人数をカンマ区切りで直接書く方法です。5人を2人と3人に分けるなら、次のように入力します。

=MULTINOMIAL(2, 3)

結果は「10」です。ただ、人数を変えるたびに数式を直すのは面倒ですよね。実務では、人数をセルに入れておくほうが便利です。

次のような表を用意してみてください。

 AB
1班人数
2A班2
3B班3
4C班4

この表なら、セルを1つずつ指定して =MULTINOMIAL(B2, B3, B4) と書けます。結果は「1260」。B列の人数を書き換えれば、答えも自動で更新されます。

範囲指定 =MULTINOMIAL(B2:B4)

セルを1つずつ並べなくても、範囲でまとめて渡せるのが便利なところ。公式ヘルプにも MULTINOMIAL(A2:A9) という範囲指定の例が載っています。

=MULTINOMIAL(B2:B4)

結果は同じく「1260」です。班が増えたら、表に行を足して範囲を広げるだけで済みます。

ただし、範囲内に「3人」のような文字が混じると #VALUE! になります(文字は無視されません)。範囲内の0は結果に影響せず、=MULTINOMIAL(A7:A8,4)(A7=3、A8=0)は35になります。人数の列には数値だけを入れておきましょう。

複数のパターンを行ごとに計算したいときは、1行に1つずつ数式を置いてコピーするのが確実です。=ARRAYFORMULA(MULTINOMIAL(D1:D2,E1:E2)) のように包んでも、行ごとの結果にはなりません。範囲の数値をすべてまとめた1つの値(この例なら =MULTINOMIAL(2,3,3,3) の92400)が返るだけで、スピルもしません。

引数1つ・0を含む場合

引数が1つだけのときは、定義式どおりに計算すると「5! ÷ 5! = 1」になります。分ける先が1つしかないので、分け方も1通りというわけです。

=MULTINOMIAL(5)
=MULTINOMIAL(3, 0, 4)

0を含む2つ目の式は、計算上「35」になります。0の階乗は1なので、0人の班は答えに影響しません。結果は =MULTINOMIAL(3, 4) と同じです。

FACT・COMBINで手計算すると?同じ答えになる検算

3通りの式を並べた検算表

「1260って本当に合っているの?」と気になる人もいるはず。そこで、同じ9人の班分けを3つの方法で計算し、答えをそろえてみます。

計算方法数式途中の値結果
MULTINOMIAL=MULTINOMIAL(2,3,4)—1260
FACT=FACT(9)/(FACT(2)FACT(3)FACT(4))362880÷2881260
COMBIN=COMBIN(9,2)COMBIN(7,3)COMBIN(4,4)36×35×11260

COMBINの式は、人を順に選んでいく考え方です。まず9人からA班の2人を選ぶと36通り。残り7人からB班の3人を選ぶと35通りです。

最後に残った4人は、自動的にC班に決まります(1通り)。これらを掛け合わせると36×35×1=1260で、MULTINOMIALと一致します。

シートで試すなら、3つのセルに次の式を入れて見比べてみてください。

=MULTINOMIAL(2, 3, 4)
=FACT(9)/(FACT(2)*FACT(3)*FACT(4))
=COMBIN(9,2)*COMBIN(7,3)*COMBIN(4,4)

FACTの分母は PRODUCT(FACT(2),FACT(3),FACT(4)) と書くこともできます。掛け算の関数はPRODUCT関数で詳しく紹介しています。

班に区別がある・ない(6人→3人×2班:20通りと10通り)

ここが一番間違えやすいポイントです。MULTINOMIAL関数が数えるのは「A班・B班のように、班に名前がある場合」の分け方になります。

6人を3人ずつの2班に分けてみましょう。

=MULTINOMIAL(3, 3)
=MULTINOMIAL(3, 3)/FACT(2)

1つ目の答えは「20」です。ところが班に名前がなく、単に「2つのグループ」に分けるだけなら事情が変わります。

たとえば「太郎・花子・健太の組」と「残り3人の組」は、どちらをA班と呼んでも同じ分け方ですよね。班に名前がなければ、この入れ替えが2通りずつ重なっています。そこで、2つ目の式のように2!で割ると「10」になります。

ルールは、同じ人数の班がk個あり、それを区別しないならFACT(k)で割るです。9人を2・3・4人に分ける例は人数がすべて違うため、割る必要はありません。

COMBINとの使い分け・PERMUT系は順序ありの別物

2班に分けるだけなら、COMBIN関数でも同じ答えになります。たとえば =MULTINOMIAL(3, 7) と =COMBIN(10, 3) は、どちらも「120」です。

3班以上になると、COMBINでは掛け算を重ねる必要があります。人数を並べるだけで済むMULTINOMIALのほうが、式は短く読みやすいでしょう。

なお、PERMUT関数やPERMUTATIONA関数は「順番を区別する並べ方」を数える関数です。班の中の並び順を問わない班分けとは別物なので、混同に注意しましょう。

名前の似たFACTDOUBLE関数は、1つおきに掛ける「二重階乗」を返します。こちらも計算内容はまったく異なります。

使いどころ:班分け・シフト割り当て・同じ文字を含む並べ替え

班分け・割り当て

10人をA・B・Cの3チームに、3人・3人・4人で分けるとします。この場合は =MULTINOMIAL(3, 3, 4) で「4200」通りです。チームに名前があるので、割り算は要りません。

シフトの割り当てにも使えます。12人を早番・中番・遅番に4人ずつ振り分けると、=MULTINOMIAL(4, 4, 4) で「34650」通り。早番と遅番は入れ替えると別の割り当てになるので、こちらもそのままの値で数えます。

同じ文字を含む並べ替え(AABなど)

意外な使い道が、同じ文字を含む文字列の並べ替えです。「AAB」を並べ替えると、AAB・ABA・BAAの3通りになります。

=MULTINOMIAL(2, 1)

Aが2個、Bが1個なので、引数は2と1です。結果は「3」で、書き出した数と一致します。

長い単語でも考え方は同じ。「MISSISSIPPI」はM1個・I4個・S4個・P2個です。=MULTINOMIAL(1, 4, 4, 2) で「34650」通りになります。

11文字がすべて違えば11!=39,916,800通りなので、同じ文字の重複でぐっと減ることが分かります。

多項分布の確率

サイコロを6回振って、1が2回・2が1回・3が3回出る確率も計算できます。出る順番のパターン数をMULTINOMIALで求め、1回ごとの確率を掛けるのがコツです。

=MULTINOMIAL(2, 1, 3)*(1/6)^6

パターン数は「60」、全体の出方は6の6乗で46,656通りです。結果は60÷46656で約0.001286。つまり約0.13%しかありません。

目ごとに確率が違う場合は、B2:B4に回数、C2:C4に確率を入れておきましょう。そのうえで次の式を入れれば、セルの値を変えるだけで再計算できます。

=MULTINOMIAL(B2:B4)*C2^B2*C3^B3*C4^B4

スプレッドシートのMULTINOMIAL関数のエラーと注意点・Excel版との違い・まとめ

エラーになりやすい入力と対処

人数として不自然な値を渡すと、エラーや想定外の結果につながります。次の表は、スプレッドシートで実際に試した結果です。

入力の例結果対処
負の数(=MULTINOMIAL(-1,3))#NUM!0以上の人数を入れる
文字の直書き(=MULTINOMIAL("a",3))#VALUE!数値だけを入れる
数字の文字列(=MULTINOMIAL("2",3))10(数値として扱われる)数値で入れておくほうが安全
範囲・セル参照内の文字#VALUE!(無視されない)人数の列は数値だけにする
空白セル1つだけを参照(=MULTINOMIAL(A6))1参照先がずれていないか確認する
小数(=MULTINOMIAL(2.7,3))10(2.7は2として扱われる。切り捨て)ROUNDやINTで整数にしてから渡す
TRUE(=MULTINOMIAL(TRUE,3))4(TRUEは1として扱われる)論理値は渡さない
合計がとても大きい(=MULTINOMIAL(100,71)、合計171)約1.56355E+49(エラーにならない)指数表記になるので桁に注意

特に注意したいのが小数です。小数は四捨五入ではなく切り捨てられるため、2.7人は2人として計算されます。人数を別の計算から持ってくると端数が残ることがあるので、次のように整数にそろえてから渡せば、結果を読み違えずに済むでしょう。

=MULTINOMIAL(ROUND(B2,0), ROUND(B3,0))

Excel版との違い

関数名と計算の考え方は、Excelでも共通です。Excelの公式ヘルプでは、引数は1〜255個と書かれています。非数値は #VALUE!、0未満の値は #NUM! になるとも明記されています。

スプレッドシート版のヘルプにはエラーの種類が載っていませんが、実際に試すと負の数は #NUM!、文字は #VALUE! になりました。この点はExcelと同じです。一方、小数は切り捨てて計算され、TRUEは1として扱われます。Excelで使う場合は、ExcelのMULTINOMIAL関数の使い方にまとめています。

よくある質問

Q. 結果が「1」になってしまうのはなぜ?

引数が1つしか渡っていない可能性があります。範囲の指定がずれて、1つのセルだけを参照していないか確認してみてください。

Q. FACTで計算した値と合いません。

分子の階乗が「人数の合計」になっているかを見直しましょう。9人の例なら、分子は FACT(9) です。分母の階乗の個数が、班の数とそろっているかもチェックしてください。

Q. 班に名前がない場合は?

同じ人数の班の数だけ階乗で割ります。3人×2班なら =MULTINOMIAL(3, 3)/FACT(2) で10通りです。

まとめ

  • MULTINOMIAL関数は「合計の階乗 ÷ 各値の階乗の積」を返し、班分けの数を1式で出せる
  • 9人を2・3・4人に分けると1260通りで、FACT・COMBINの検算とも一致する
  • 人数はセル範囲でも渡せる(=MULTINOMIAL(B2:B4))
  • 同じ人数の班を区別しないなら、その班の数の階乗で割る
  • 2班ならCOMBINと同じ結果になり、3班以上ならMULTINOMIALが便利

まずは =MULTINOMIAL(2, 3, 4) を入力して、1260が返ることを確かめてみてください。そのあとFACTとCOMBINの式を横に並べると、数字の意味がすっと腹落ちするはずです。

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