【スプレッドシート】PERMUTATIONA関数の使い方|重複順列でパスワード・暗証番号のパターン数を計算する

スポンサーリンク

「3種類のトッピングから2つ選んで並べたい。同じものを重ねてもOKなら何通りだろう?」

パスワードの桁やダイヤルロックの番号など、同じものを繰り返し使える並び順を数えたい場面は意外と多いですよね。普通の順列計算だと「同じものは1回だけ」が前提なので、こうしたケースではうまく計算できません。

スプレッドシートのPERMUTATIONA関数を使えば、重複ありの順列を一発で求められます。指で数えると気が遠くなるような大きな数も、関数1つで瞬時に計算できますよ。

この記事では基本の書き方から実務で使える活用例、よくあるエラー、FAQまで一気に紹介します。混同しやすいPERMUT関数との違いもあわせて解説しますね。

  1. スプレッドシートのPERMUTATIONA関数とは?
  2. PERMUTATIONA関数の書き方(構文と引数)
    1. 基本構文
    2. 引数の説明
    3. 計算結果の式を理解しておこう
  3. PERMUTATIONA関数の基本的な使い方
    1. もっともシンプルな使い方
    2. セル参照を使う
    3. 特殊なケース
  4. PERMUTATIONA関数の実践的な使い方・応用例
    1. 4桁の暗証番号のパターン数を調べる
    2. 英数字を組み合わせたパスワード強度を見積もる
    3. サイコロの出目パターンを数える
    4. 3色の旗の塗り分けパターンを求める
    5. アンケートの回答パターン数を計算する
    6. ダイヤル錠のセキュリティを試算する
    7. POWER関数で同じ計算をする
  5. よくあるエラーと対処法
    1. 負の数を指定したとき
    2. 引数に小数を指定したとき
    3. 引数に文字列を指定したとき
    4. rがnより大きいときはエラーにならない
  6. PERMUT関数との違い・使い分け
    1. 関連する関数も確認しよう
  7. よくある質問(FAQ)
    1. Q1. PERMUTATIONA関数とPERMUT関数を間違って使ってしまうとどんな結果になりますか?
    2. Q2. PERMUTATIONA関数の結果が「1E+10」のように指数表示されてしまいます
    3. Q3. nやrが大きすぎるとエラーになりますか?
    4. Q4. PERMUTATIONA関数はExcelでも同じ書き方で使えますか?
    5. Q5. 重複順列の結果を「実際の並び一覧」として書き出すことはできますか?
    6. Q6. 結果が「0」になってしまうのですが何が原因ですか?
  8. まとめ

スプレッドシートのPERMUTATIONA関数とは?

PERMUTATIONA関数(読み方: パーミュテーションエー関数)は、n個の中からr個を重複を許して選び、並べる順列の数を返す関数です。

名前は英語の「permutation(順列)」がベースで、末尾の「A」は重複ありを意味する識別子です(英語では “permutation with repetition” や “ordered selection with replacement” などと呼ばれます)。

数学では「重複順列」と呼ばれる計算ですね。計算式は n^r(nのr乗) とシンプルです。

たとえば =PERMUTATIONA(3, 2) と書くと「3種類から2つを重複ありで選んで並べる順列」を計算します。結果は「9」です。3の2乗ですね。

ポイントは、同じ要素を何回でも選べるところです。

「AさんAさん」のように同じものが重なるパターンも1通りとして数えます。普通の順列(PERMUT関数)では除外されるパターンが、PERMUTATIONA関数ではすべてカウント対象になります。

PERMUTATIONA関数にできることをまとめると、次のとおりです。

  • 重複を許した順列(重複順列)の数を計算する
  • パスワードやPINコードのパターン数を調べる
  • ダイヤルロックやカラーコードの組み合わせ数を求める
  • サイコロを複数回振ったときの出目パターンを数える
  • アンケートやテストの回答パターン数を見積もる
  • 文字列やトークンが取り得る組み合わせ数からセキュリティ強度を試算する

NOTE

PERMUTATIONA関数はGoogleスプレッドシートの全バージョンで使えます。Excelにも同名の関数があり互換性も問題ありません。ExcelファイルをGoogleスプレッドシートにインポートしてもそのまま動きますよ。

PERMUTATIONA関数の書き方(構文と引数)

基本構文

=PERMUTATIONA(n, r)

カッコの中に「n(選べる種類の数)」と「r(選ぶ個数)」の2つを入れます。引数はたった2つだけ、とてもシンプルな関数です。

引数の説明

引数必須/任意説明
n必須選べる要素の総数。0以上の整数を指定する
r必須選択する個数。0以上の整数を指定する

10種類の数字から4つ選んで並べる(重複あり)なら、nが10、rが4です。

PERMUT関数と違い、rがnより大きくてもエラーになりません。同じ要素を繰り返し使えるので、nが3でrが5でも計算できますよ。

小数を指定した場合は小数点以下が切り捨てられます。マイナスの値を入れると #NUM! エラーになるので、必ず0以上の整数を指定しましょう。

計算結果の式を理解しておこう

PERMUTATIONA関数の戻り値は n^r(nのr乗) です。中身の計算式を知っておくと、結果の桁数が急に増えた理由や、想定外の数値が出たときに「あれっ?」と気付けるので便利です。

nrn^r計算式
24162×2×2×2
33273×3×3
546255×5×5×5
105100,00010×10×10×10×10
264456,97626×26×26×26

ご覧のとおり、rが1増えるたびに結果はn倍になります。パスワードの桁数を1桁増やすだけでパターン数が急増するのは、この性質のおかげですね。

PERMUTATIONA関数の基本的な使い方

もっともシンプルな使い方

数値を直接指定するパターンです。

01 data sample table
=PERMUTATIONA(3, 2)
02 formula permutationa basic

結果は「9」です。3種類から2つを重複ありで並べると9通りですね。3^2 = 9 です。

03 result permutationa basic
=PERMUTATIONA(10, 4)

結果は「10000」です。10種類から4つを重複ありで並べると10,000通りになります。

=PERMUTATIONA(2, 3)

結果は「8」です。2種類から3つを選んで並べる場合ですね。2^3 = 8 です。nよりrが大きくても計算できるのがPERMUTATIONA関数の特徴です。コイントス3回分の表裏の並びをイメージすると分かりやすいですね。

セル参照を使う

A1に総数「5」、B1に選ぶ個数「3」が入っているとします。

=PERMUTATIONA(A1, B1)

結果は「125」です。5種類から3つを重複ありで並べると125通りあります。

!_images/spreadsheet-permutationa-function/04_result_permutationa-reference.png

セル参照を使えば値を変えるだけで結果が自動更新されますよ。シミュレーション用のシートを作るときは、引数をセル入力にしておくと便利です。

特殊なケース

選ぶ個数が0のとき、結果は「1」です。何も選ばないパターンは1通りという意味ですね。数学的にも n^0 = 1 と定義されています。

=PERMUTATIONA(10, 0)

選ぶ個数が1のとき、結果は総数と同じになります。

=PERMUTATIONA(10, 1)

結果は「10」です。10種類から1つ選ぶ方法は10通りですね。重複ありでも1つしか選ばないなら結果は変わりません。

総数が1のとき、何個選んでも結果は「1」です。

=PERMUTATIONA(1, 5)

結果は「1」です。1種類しかないので、何個並べても全部同じになりますよね。1^5 = 1 です。

総数が0のときは、選ぶ個数によって挙動が変わります。 =PERMUTATIONA(0, 0) は「1」、 =PERMUTATIONA(0, 5) は「0」です。「0種類から何かを選ぶことはできない」ので0通り、というイメージです。

PERMUTATIONA関数の実践的な使い方・応用例

4桁の暗証番号のパターン数を調べる

0〜9の10種類の数字から4桁の暗証番号を作るケースです。同じ数字を何回でも使えます。

=PERMUTATIONA(10, 4)

結果は「10000」です。4桁の暗証番号には10,000通りのパターンがあります。スマホやキャッシュカードのPINコードがちょうど4桁ですね。

ちなみに重複なしの場合はPERMUT関数で計算します。

=PERMUT(10, 4)

結果は「5040」です。重複を許すかどうかで約2倍の差が出ますね。実際の暗証番号は同じ数字を繰り返し使えるので、PERMUTATIONA関数が正しい考え方です。

TIP

桁数を増やすとパターン数は急激に増えます。6桁なら =PERMUTATIONA(10, 6) で1,000,000通り。8桁なら1億通りに達します。桁数を1つ増やすだけでセキュリティ強度がぐっと上がる理由が数字で分かりますよ。

英数字を組み合わせたパスワード強度を見積もる

英大文字・英小文字・数字を使った8桁のパスワードを考えてみましょう。使える文字は26+26+10=62種類です。

=PERMUTATIONA(62, 8)

結果は「218,340,105,584,896」、つまり約218兆通りです。同じ文字を繰り返し使えるパスワードでも、これだけのパターンを取り得るんですね。

記号を含めて94種類に増やすと、 =PERMUTATIONA(94, 8) で約6,096兆通り。文字種を増やすほど一気に組み合わせ数が伸びるので、パスワードルールの設計検討にも使えます。

サイコロの出目パターンを数える

6面のサイコロを3回振ったとき、出目の並びは何通りあるか調べてみましょう。

=PERMUTATIONA(6, 3)

結果は「216」です。6^3 = 216通りですね。

回数を変えてパターン数の変化を見てみましょう。

回数数式パターン数
1回=PERMUTATIONA(6, 1)6
2回=PERMUTATIONA(6, 2)36
3回=PERMUTATIONA(6, 3)216
4回=PERMUTATIONA(6, 4)1,296
5回=PERMUTATIONA(6, 5)7,776
6回=PERMUTATIONA(6, 6)46,656

回数が1つ増えるたびに6倍になっていくのが分かりますね。確率の問題集や統計入門の演習にも便利です。

3色の旗の塗り分けパターンを求める

赤・青・黄の3色から2か所の旗を塗り分けるケースです。同じ色を2回使ってもOKとします。

=PERMUTATIONA(3, 2)

結果は「9」です。赤赤・赤青・赤黄・青赤・青青・青黄・黄赤・黄青・黄黄の9通りですね。

重複なしならPERMUT関数=PERMUT(3, 2) とすると「6」です。同色の組み合わせ3通り分の差が出ます。

旗だけでなく、ホームページのカラーリングやアイコンセット、商品パッケージの2色刷りなど、デザイン現場でも同じ考え方が活躍します。

アンケートの回答パターン数を計算する

5段階評価(1〜5)のアンケートが3問ある場合を考えてみましょう。回答の組み合わせは何通りあるでしょうか。

=PERMUTATIONA(5, 3)

結果は「125」です。各問で5択、3問あるので5^3 = 125通りのパターンがあります。

回答パターン数が分かると、回収サンプルが何件あれば全パターンを十分に網羅できそうか、という見当をつけられます。マーケティング調査や顧客満足度アンケート設計のときに役立ちますよ。

ダイヤル錠のセキュリティを試算する

旅行カバンの3桁ダイヤル錠を考えます。各ダイヤルは0〜9の10種類なので、

=PERMUTATIONA(10, 3)

結果は「1000」です。3桁ダイヤル錠は1,000通り。1秒に1パターン試せるなら最悪16〜17分で開いてしまう計算になります。

TIP

セキュリティ業界では「総当たり攻撃にかかる時間」を見積もるのに重複順列の計算がよく使われます。文字種と桁数を可変にしたシミュレーションシートを作っておくと、社内ルール策定の説明資料にも使えますよ。

POWER関数で同じ計算をする

PERMUTATIONA関数の計算式は n^r なので、POWER関数でも同じ結果を得られます。

=POWER(10, 4)

結果は「10000」です。=PERMUTATIONA(10, 4) と同じですね。

=10^4 のようにキャレット記号でも同じ計算ができます。

ただし、PERMUTATIONA関数を使ったほうが「重複順列の計算をしている」という意図が伝わりやすくなります。後から数式を読み返したときに、第三者でも目的が分かるのが大事ですよね。数式の読みやすさを考えると、用途に合った関数を選ぶのがおすすめです。

よくあるエラーと対処法

PERMUTATIONA関数で発生しやすいエラーをまとめました。

エラー原因対処法
#NUM!n または r に負の数を指定した0以上の整数を指定する
#VALUE!引数に文字列が入っているセル参照先が数値かどうか確認する
#ERROR!構文ミス(カッコ忘れ・カンマ漏れ等)数式の入力内容を見直す
#NUM!(巨大値)nまたはrを大きくしすぎて計算結果がオーバーフローした引数を小さくするか結果を別関数で扱う

負の数を指定したとき

nまたはrに負の値を入れると#NUM!エラーになります。

=PERMUTATIONA(-3, 2)
05 error num value

この数式は#NUM!エラーを返します。0以上の整数を指定してくださいね。

セル参照先がマイナスになっていないか、IF関数で =IF(A1<0, 0, A1) のような前処理を入れると安全です。

引数に小数を指定したとき

小数を指定してもエラーにはなりません。小数点以下が切り捨てられて計算されます。

=PERMUTATIONA(5.8, 2.3)

この数式は =PERMUTATIONA(5, 2) と同じ結果で「25」を返します。意図しない切り捨てには注意しましょう。 5.86 として扱いたいなら、 =PERMUTATIONA(ROUNDUP(5.8,0), 2) のようにROUNDUP関数で明示的に切り上げると安心です。

引数に文字列を指定したとき

引数に数値以外(文字列)を入れると #VALUE! エラーになります。

=PERMUTATIONA("ABC", 2)

この数式は #VALUE! エラーを返します。セル参照を使うときは、参照先が「数字を文字列として保持していないか」もチェックしてみてください。

rがnより大きいときはエラーにならない

PERMUT関数と違い、rがnより大きくてもエラーになりません。

=PERMUTATIONA(3, 5)

結果は「243」です。3^5 = 243通りですね。重複を許すので、要素数より多い個数を選んでも問題ありません。

ここはPERMUTATIONA関数とPERMUT関数の大きな違いです。「rが大きい場合はPERMUTを選ぶとエラーになる」という点をおさえておくと、関数の使い分けに迷いません。

PERMUT関数との違い・使い分け

PERMUTATIONA関数ともっとも混同しやすいのがPERMUT関数です。違いを表で整理しましょう。

項目PERMUTPERMUTATIONA
重複なし(同じ要素は1回だけ)あり(同じ要素を何回でも使える)
計算式n! / (n-r)!n^r
n=5, r=3の結果60125
n=10, r=4の結果5,04010,000
rがnより大きい場合#NUM!エラー計算できる
主な用途走順・席順・1位2位3位などパスワード・PINコード・パターン総数

5種類から3つ選んで並べるケースで比べてみましょう。

=PERMUT(5, 3)

結果は「60」です。重複なしの順列ですね。

=PERMUTATIONA(5, 3)

結果は「125」です。重複ありの順列になります。

差の「65」が「同じ要素を繰り返し使えるパターン」の数に相当します。

使い分けのポイントは「同じものを繰り返し使えるかどうか」です。

  • リレーの走順を決める → PERMUT関数(同じ人が2回走れない)
  • 暗証番号のパターン → PERMUTATIONA関数(同じ数字を何度でも使える)
  • 席替えの並び順 → PERMUT関数(同じ人が2席に座れない)
  • サイコロを複数回振った出目 → PERMUTATIONA関数(同じ目が何度でも出る)

「同じ要素が選択肢にもう一度戻ってくるかどうか」をイメージすると判別しやすいですよ。

関連する関数も確認しよう

順列・組み合わせに関連する関数の全体像を表にまとめます。

関数動作順番の区別重複
PERMUT順列の数を返す区別するなし
PERMUTATIONA重複順列の数を返す区別するあり
COMBIN組み合わせの数を返す区別しないなし
COMBINA重複組み合わせの数を返す区別しないあり
FACT階乗(n!)を返す--
POWERべき乗(n^r)を返す--

PERMUTATIONA関数の計算結果はPOWER関数と同じですが、「順列の計算をしている」と伝えたいときはPERMUTATIONA関数を使うと意図が明確になりますよ。

「順番を区別するかどうか」「重複を許すかどうか」の2軸でマトリクスを作ると、どの関数を使えばよいか迷わなくなります。

よくある質問(FAQ)

Q1. PERMUTATIONA関数とPERMUT関数を間違って使ってしまうとどんな結果になりますか?

A. 計算結果の数値が大きく異なります。たとえば「5種類から3つを並べる」場合、 =PERMUT(5,3) は60、 =PERMUTATIONA(5,3) は125を返します。実務でこの違いを取り違えると、パスワードの強度試算や品質管理の検証回数の見積りなどで大きな判断ミスにつながります。「同じ要素を繰り返し使えるか」をチェックして、必要に応じてPERMUT関数とPERMUTATIONA関数を選び分けましょう。

Q2. PERMUTATIONA関数の結果が「1E+10」のように指数表示されてしまいます

A. スプレッドシートの数値書式が「自動」または「指数表記」になっている可能性があります。セルを選択して「表示形式 → 数値」を選ぶと、 10,000,000,000 のような通常表記に切り替わります。それでも見づらい場合は、TEXT関数で =TEXT(PERMUTATIONA(10,10), "#,##0") のように整形すると、桁区切り付きの文字列として読みやすく表示できます。

Q3. nやrが大きすぎるとエラーになりますか?

A. はい、引数を極端に大きくすると #NUM! エラーや無限大相当の値が返ります。スプレッドシートが扱える最大数(約1.8×10^308)を超えると計算ができないためです。たとえば =PERMUTATIONA(100, 200) のように指数的に巨大な値はエラーになります。実務ではここまで大きな値を使うことはまずありませんが、シミュレーション用シートを作るときは、入力範囲を制限するプルダウンなどで誤入力を防ぐと安心です。

Q4. PERMUTATIONA関数はExcelでも同じ書き方で使えますか?

A. はい、Excelでも =PERMUTATIONA(n, r) の書き方でまったく同じように動きます。Excel 2013以降であれば標準搭載されているので、ExcelファイルをGoogleスプレッドシートにインポートしても関数はそのまま動作します。互換性が高いので、ExcelとGoogleスプレッドシートを並行運用している環境でも安心して使えますよ。

Q5. 重複順列の結果を「実際の並び一覧」として書き出すことはできますか?

A. PERMUTATIONA関数自体は「パターン数」しか返さないので、実際の並びを一覧化するには別の方法が必要です。スプレッドシートでは2〜3桁程度の小さなケースなら、ARRAYFORMULAやSEQUENCE関数を組み合わせて自作することもできます。ただし、ある程度大きなケース(例: 10種類から5つ)になると行数が爆発するので、Google Apps Scriptで生成するか専用ツールを使うのが現実的です。

Q6. 結果が「0」になってしまうのですが何が原因ですか?

A. 引数の一方が0の場合、結果が0になることがあります。たとえば =PERMUTATIONA(0, 5) は「0種類から5つを選ぶ」ことになるので、結果は0です。一方、 =PERMUTATIONA(10, 0) は「何も選ばないパターンは1通り」と定義されるので結果は1になります。0が返ったときはまずnの値を確認し、空白セルや誤入力で0になっていないかをチェックしましょう。

まとめ

PERMUTATIONA関数は、n個の中からr個を重複を許して選び並べる「重複順列」の数を求める関数です。

ポイントを整理します。

  • 構文は =PERMUTATIONA(n, r) の2引数。計算結果は n^r
  • 同じ要素を何回でも選べるのが特徴
  • 暗証番号やダイヤルロックなど、繰り返し使える並びのパターン数を調べるときに便利
  • PERMUT関数との違いは「重複を許すかどうか」
  • rがnより大きくてもエラーにならない(PERMUT関数は#NUM!エラーになる)
  • POWER関数で同じ計算ができるが、意図を明確にするならPERMUTATIONA関数がおすすめ
  • パスワード強度の試算やセキュリティ検証、確率・統計の演習にも応用できる

まずは =PERMUTATIONA(10, 4) で「10種類から4つ選ぶ重複順列 = 10,000通り」から試してみてください。慣れてきたらPERMUT関数COMBIN関数COMBINA関数もあわせて覚えると、場合の数の計算がグッと楽になりますよ。

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