【スプレッドシート】PERMUTATIONA関数の使い方|重複順列(n^r)とPERMUTとの違い

スポンサーリンク

暗証番号は全部で何通りあるのか。パスワードを8桁にしたら、どれくらい破られにくくなるのか。社内ルールの説明資料で、こんな数字を求められたことはありませんか?

順列の公式がうろ覚えのまま関数を探すと、PERMUT と PERMUTATIONA が並んでいて迷います。試しに 0 を入れたら #NUM! が出て、公式ヘルプを読んでも実際の動きと合わない。たった1つの数字を出すのに、意外と時間を取られがちです。

Googleスプレッドシートの PERMUTATIONA 関数なら、この数字は1つの式で出せます。同じものを何度でも使える並び(重複順列)を数える関数です。

この記事では、書き方と実務での使い方、PERMUT との使い分けを解説。0・小数・r>n などを入れたときに返る値も、スプレッドシートで実際に試した結果をまとめました。

スプレッドシートのPERMUTATIONA関数とは?答えは n^r(POWER・^ と同じ値)

PERMUTATIONA 関数は、n 種類のものから r 個を選んで並べるときの「並び方の数」を返す関数です。同じものを何回選んでもよい「重複順列」を数えます。

結論を3行でまとめると、次のとおりです。

  • 答えは n^r(n の r 乗)。=PERMUTATIONA(3, 2) なら 3×3=9
  • 暗証番号やパスワードのように「同じ文字をくり返し使える並び」に使う
  • 同じものを1回しか使えない並びなら、PERMUT 関数のほうを使う

読み方は「パーミュテーション・エー」。permutation は英語で「順列」という意味です。

末尾の「A」は、重複ありの組み合わせを数える COMBINA と同じ付け方。ただし A の意味そのものは、公式ヘルプには書かれていません。

構文と引数(=PERMUTATIONA(n, r))

=PERMUTATIONA(n, r)
引数意味指定できる値(スプレッドシートで試した範囲)
n選べるものの種類の数(数字なら0〜9の10種類)1以上。小数は切り捨て
r並べる個数(暗証番号なら桁数)1以上。n より大きくてもよい

引数は2つとも必須です。1つだけ書くと #N/A が返りました。

Google の公式ヘルプには「number_chosen(r)は number(n)以下」と書かれています。ところが実際に試すと、=PERMUTATIONA(3, 5) は 3^5=243 を返し、エラーになりません。重複ありなら3種類から5個並べても成り立つので、計算としてはこちらが自然でしょう。

=PERMUTATIONA(10,4)・=POWER(10,4)・=10^4 を並べて比べる

答えが n^r なら、べき乗を計算する POWER 関数や ^ 演算子でも同じ値が出るはず。3つの式を並べてみましょう。

=PERMUTATIONA(10, 4)   → 10000
=POWER(10, 4)          → 10000
=10^4                  → 10000

どれも 10000 になりました。0〜9の数字で4桁の暗証番号を作ると、10,000通りという意味です。POWER 関数の書き方はPOWER関数の解説にまとめています。

それでも PERMUTATIONA を使う理由(意図が読める・小数の扱いが違う)

同じ値なら ^ で十分では?と思いますよね。それでも PERMUTATIONA を選ぶ理由は2つあります。

1つ目は、式を見ただけで「並び方の数を数えている」と伝わること。=10^4 だけでは、何の計算なのか後から読む人には判断がつきません。共有シートでは、この差が意外と効いてきます。

2つ目は、小数の扱いが違うことです。PERMUTATIONA は n と r の小数点以下を切り捨ててから計算します。一方の POWER と ^ は小数の指数をそのまま計算するので、答えが変わるんです。

=PERMUTATIONA(10, 2.5)   → 100(r を 2 に切り捨てて 10^2)
=POWER(10, 2.5)          → 316.227766016838
=10^2.5                  → 316.227766016838

桁数や文字種は、本来は整数のはず。計算の途中で小数が混ざっても、PERMUTATIONA なら「並び方の数」として筋の通る値を返します。

ただし、小数が混ざっても気づきにくい点には注意が必要です。丸め方を自分で決める方法は、後半のエラーの章で紹介しますね。

実務での使い方|暗証番号・パスワード・アンケートのパターン数を見積もる

ここからは、仕事で「何通りあるか」を聞かれやすい3つの場面で使ってみます。n と r をセルに入れておけば、値を変えるだけで結果が変わるシミュレーション表に早変わり。

暗証番号(数字4桁・6桁)は何通り?

暗証番号は0〜9の10種類の数字を使い、同じ数字を何度でも使えます。n=10 は式に直接書き、桁数 r をA列のセルに入れておきましょう。

行A(桁数)B(パターン数)
24=PERMUTATIONA(10, A2) → 10,000
36=PERMUTATIONA(10, A3) → 1,000,000

4桁で1万通り、6桁で100万通り。桁が1つ増えるごとに10倍になるので、2桁増やせば100倍です。

比較のために、同じ数字を使えない場合も出してみます。

=PERMUT(10, 4)   → 5040

5,040通りなので、重複ありの10,000通りのほぼ半分。実際の暗証番号は「1123」のように同じ数字をくり返せるため、PERMUTATIONA で数えるのが正解です。

パスワードは文字種と桁数のどちらを増やすと強くなる?(10^4 / 36^8 / 62^8 の表)

パスワードも考え方は同じです。n に「使える文字の種類数」、r に「桁数」を入れます。英小文字と英大文字は各26種、数字は10種なので、どれを混ぜるかで n が変わります。

D列とE列には、次の式を入れて下にコピーしましょう(E列は3〜5行目だけ)。

D2: =PERMUTATIONA(B2, C2)
E3: =D3/$D$3
行A(条件)B(文字種 n)C(桁数 r)D(パターン数)E(3行目との比)
2数字のみ(暗証番号)10410,000—
3英小文字+数字3682,821,109,907,456(約2.8兆)1
4英小文字+数字369101,559,956,668,416(約101.6兆)36
5英大小文字+数字628218,340,105,584,896(約218兆)約77.4

3行目の「英小文字+数字の8桁」を起点に比べてみます。桁を1つ増やすと36倍、英大文字を加えて62種にすると約77倍。この条件では、文字種を増やしたほうが伸び幅は大きくなりました。

とはいえ、桁を2つ増やせば 36×36=1,296倍です。桁数の効果も小さくはありません。「8桁以上・英大小文字と数字を混ぜる」といったルールの理由を、この表1枚で数字として示せます。

アンケートの回答パターン数(5段階×質問数)

5段階評価の質問が並ぶアンケートも、重複順列の一種です。どの質問でも同じ選択肢を何度でも選べるからです。n=5、r=質問数で計算します。

質問数 r数式回答パターン数
3=PERMUTATIONA(5, 3)125
5=PERMUTATIONA(5, 5)3,125
10=PERMUTATIONA(5, 10)9,765,625

10問で約977万通り。回答者が数百人なら、ほとんどのパターンは一度も現れない計算です。「回答の組み合わせごとに集計する」設計は現実的でないと、アンケートを作る前に判断できますよ。

PERMUT・COMBIN・COMBINA との使い分け

スプレッドシートには、並び方や選び方の数を返す関数が4つあります。名前が似ていて迷いやすいので、2つの軸で整理しましょう。

「順番を区別するか × 重複を許すか」の2×2マトリクス(n=5,r=3 で 60/125/10/35)

 重複なし(1回だけ使える)重複あり(何度でも使える)
順番を区別するPERMUT:60PERMUTATIONA:125
順番を区別しないCOMBIN:10COMBINA:35

数字はすべて n=5、r=3 で計算した結果です。同じ条件で4つの式を並べると、違いがよく見えます。

=PERMUT(5, 3)         → 60
=PERMUTATIONA(5, 3)   → 125
=COMBIN(5, 3)         → 10
=COMBINA(5, 3)        → 35

PERMUT の計算は n!/(n−r)! で、5×4×3=60。階乗の考え方はFACT関数の解説が参考になります。PERMUTATIONA は 5×5×5=125 なので、重複を許す分だけ PERMUT より大きくなるわけです。

COMBIN と COMBINA は順番を区別しません。並べ替えただけのものを同じ1通りとして数えるため、上の段より値が小さくなります。

迷ったら「同じものをもう一度使えるか」で判断(リレーの走順 vs 暗証番号)

順番を区別する2つで迷ったら、一度選んだものが選択肢に戻ってくるかを考えます。

  • リレーの走順 → PERMUT。同じ人は2回走れない
  • 表彰の1位〜3位 → PERMUT。1人が2つの枠を埋めることはない
  • 暗証番号・パスワード → PERMUTATIONA。同じ数字や文字を何度でも使える
  • アンケートの回答 → PERMUTATIONA。どの質問でも同じ選択肢を選べる

もう1つの違いは、r が n より大きいときの扱いです。=PERMUT(3, 5) は #NUM! ですが、=PERMUTATIONA(3, 5) は 243 を返します。PERMUT で #NUM! が出たら、重複ありで数えるべき問題ではないか見直すきっかけにしてください。

重複なしの順列については、PERMUT関数の使い方で詳しく紹介しています。

エラー・意外な結果になるケース(スプレッドシートで実際に試した結果)

PERMUTATIONA は引数2つだけの単純な関数ですが、境目の値を入れると意外な結果が返ります。2026年10月に Google スプレッドシートで試した結果を一覧にしました。

引数の境界値で返る値の一覧(0・r>n・小数・負数・文字列・空白セル)

数式結果ポイント
=PERMUTATIONA(3, 2)9基本形(3^2)
=PERMUTATIONA(3, 5)243r>n でもエラーにならない
=PERMUTATIONA(0, 5)#NUM!n が 0
=PERMUTATIONA(0, 0)#NUM!両方 0
=PERMUTATIONA(5, 0)#NUM!r が 0 でも 1 にならない
=PERMUTATIONA(3.9, 2.9)9両方切り捨てて (3, 2)
=PERMUTATIONA(0.5, 2)#NUM!切り捨てると n が 0
=PERMUTATIONA(-3, 2)#NUM!n が負数
=PERMUTATIONA(3, -1)#NUM!r が負数
=PERMUTATIONA("3", 2)9数字の文字列は数値扱い
=PERMUTATIONA("ABC", 2)#VALUE!数値にできない文字列
=PERMUTATIONA(Z1, 2)(Z1 は空白)#NUM!空白は 0 扱い
=PERMUTATIONA(TRUE, 2)1TRUE は 1 扱い(1^2)
=PERMUTATIONA(3)#N/A引数が足りない
=PERMUTATIONA(10, 308)1E+308計算できる上限付近
=PERMUTATIONA(10, 309)#NUM!上限を超えた

押さえたいのは2点。r が n より大きくても計算できること、そして n・r のどちらかが 0 だと #NUM! になることです。

数学では n^0=1 と決まっているので、r=0 なら 1 が返りそうに思えますよね。ところが、スプレッドシートの PERMUTATIONA では #NUM! でした。n と r はどちらも「切り捨てたあとで1以上」が必要、と覚えておくと安全です。

#NUM! が出るとき

#NUM! の原因は、次の2パターンに分けられます。

  • 1 未満の値が入っている:0・負数のほか、空白セル(0 扱い)や 0.5 のような小数(切り捨てて 0)も該当する。r=0 も「何も選ばない=1通り」とはならない
  • 結果が大きすぎる:約1.8×10^308 を超えると計算できない

上限の目安は、10^308 までは計算でき、10^309 で #NUM! です。2種類の場合は、=PERMUTATIONA(2, 1023) が 8.98846567431158E+307 でした。=PERMUTATIONA(2, 1024) からは #NUM! です。

実務でよくあるのは、参照先のセルが空白のまま計算してしまうケースでしょう。入力前の行に #NUM! が並ぶのを避けたいなら、IF で分岐させておきます。

=IF(OR(A2<1, B2<1), "1以上を入力", PERMUTATIONA(A2, B2))

r=0 を「1通り」として扱いたいときは、=IF(B2=0, 1, PERMUTATIONA(A2, B2)) のように別扱いにします。

小数の切り捨てが困る場合は、渡す前に丸め方を決めておきましょう。たとえば計算結果の 5.8 を 6 として扱いたい場合。=PERMUTATIONA(ROUNDUP(5.8, 0), 2) と書けば、6^2=36 になります。

切り上げの書き方はROUNDUP関数の解説を参考にしてください。

#VALUE! が出るとき

#VALUE! は、引数を数値として読めないときに返ります。”ABC” のような文字列が典型例です。

一方で、ダブルクォートで囲んだ “3” は数値の3として計算され、9 が返りました。TRUE も 1 として扱われ、=PERMUTATIONA(TRUE, 2) は 1 です。エラーにならない分、間違いに気づきにくい点に注意しましょう。

参照先のセルには数値だけを入れ、「種類」「桁」といった単位は見出し行に書くのがおすすめです。

結果が 1E+10 のように指数表示になるとき

桁数が多い結果は、セルの書式によって 1E+10 のような指数表示になります。=PERMUTATIONA(10, 10) の値は 10,000,000,000 で、計算自体が間違っているわけではありません。

ふつうの数字で見たいときは、セルを選んでメニューの「表示形式」→「数字」→「数値」を選びます。桁区切りのカンマ付きで表示されますが、小数点以下2桁も付きます。不要なら、ツールバーの「小数点以下の桁数を減らす」で消しましょう。

資料に貼る文字列として整えたいなら、TEXT 関数で書式を指定する方法もあります。

=TEXT(PERMUTATIONA(10, 10), "#,##0")   → 10,000,000,000

TEXT の結果は文字列になるので、その後の計算には使わないようにしてください。

よくある質問とまとめ

Q. Excel でも同じ書き方で使えますか?

A. Excel にも同じ名前の PERMUTATIONA 関数があり、=PERMUTATIONA(n, r) の形で書けます。Excel で使う場合の手順はExcel版 PERMUTATIONA関数の解説にまとめました。

この記事の境界値の結果は、スプレッドシートで試したものです。0 や r>n を入れたときの挙動が Excel でも同じとは限らない点は、覚えておいてください。

Q. ^ と POWER と PERMUTATIONA、どれを使えばいい?

A. 値はどれも n^r で同じなので、目的で選びましょう。

  • 暗証番号やパターン数など「何通りか」を出す → PERMUTATIONA
  • 単純なべき乗の計算 → ^ または POWER関数
  • 小数の指数を計算したい(10^2.5 など) → ^ か POWER(PERMUTATIONA は切り捨てる)

迷ったら、後でシートを読む人に意図が伝わるかで決めるとよいでしょう。

Q. 並びの一覧そのものを書き出せますか?

A. PERMUTATIONA が返すのは「何通りか」という数だけです。一覧が必要なら、2個並べる程度の小さなケースは式で作れます。A・B・C から2個並べる9通りの例はこちら。

=FLATTEN(ARRAYFORMULA({"A";"B";"C"} & {"A","B","C"}))

AA から CC までの9通りが縦に並びます。3個以上並べるケースや種類が多いケースは、行数が一気に増えて式では扱いにくくなります。Google Apps Script などで生成する方法を検討しましょう。

まとめ

  • スプレッドシートの PERMUTATIONA 関数は、=PERMUTATIONA(n, r) で重複順列の数(n^r)を返す
  • 値は POWER・^ と同じ。ただし PERMUTATIONA は小数を切り捨てる
  • 暗証番号・パスワード・アンケートのように、同じものをくり返し使える並びに向く
  • 1回しか使えないなら PERMUT、順番を区別しないなら COMBIN・COMBINA
  • r>n はエラーにならない。n・r が 0(空白や1未満の小数を含む)や負数だと #NUM!
  • 結果が約1.8×10^308 を超えると #NUM!。桁が多いと指数表示になる

まずは =PERMUTATIONA(10, 4) で、暗証番号の10,000通りを出してみてください。文字種と桁数をセルで変えれば、パスワードの見積もり表もすぐに作れます。選び方の数を数える関数は、COMBIN関数とCOMBINA関数の解説もあわせてどうぞ。

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