• ベストアンサー

エクセルで順列の列挙

例えば 1 と 2 という2個の数字(文字)がある場合,  A列 B列   1   2   2   1 1 2 3 という3個の数字(文字)がある場合,  A列 B列 C列   1   2   3   1   3   2   2   1   3   2   3   1   3   1   2   3   2   1 1 2 3 4 という4個の数字(文字)がある場合,  A列 B列 C列 D列   1   2   3   4   1   2   4   3    ~ 省略 ~   4   3   2   1 という具合に n 個の数字(文字)がある場合,過不足無く列挙させるマクロ(VBA)を教えてください。 Excelの仕様上65,536行までしかないので,「8個の場合」とかいう限定された個数でもかまいません。 また,123,132,213,…,321 という具合に数値として1列に並べる方法でもかまいません。 また昇り順でなくてもかまいません。 よろしくおねがいします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんにちは。 学校の宿題とかではありませんよね。 以下は、再帰を使った、順列生成のアルゴリズムです。 たぶん、大丈夫だと思います。後は、65536を超えないようにしてください。 Const N As Integer = 3 '生成する順列数 Dim k As Long Dim p(1 To N) Sub perm_test()  Dim i As Long  ActiveSheet.Cells.ClearContents  k = 0  For i = 1 To N   p(i) = i  Next i  perm 1 End Sub Private Sub perm(i As Long)  Dim j As Long, t As Long  If i < N Then   For j = i To N    t = p(i): p(i) = p(j): p(j) = t    perm i + 1    t = p(i): p(i) = p(j): p(j) = t   Next j  Else    For j = 1 To N     Cells(k + 1, j).Value = p(j)    Next j    k = k + 1  End If End Sub

noname#35109
質問者

お礼

えっ,し・し・し…宿題… バレたか… というような歳ではないのですよ,残念ながら。 宿題はイヤですけど,2~3日くらいなら宿題があったころにもどってみたい気もします。 回答ありがとうございました! 8桁までならハングアップすることもなかったです。完璧です。すごい。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

過去に似たような質問がありました (セルを分けていませんが) http://okweb.jp/kotaeru.php3?qid=1126322 http://okweb.jp/kotaeru.php3?qid=1128457

noname#35109
質問者

お礼

回答ありがとうございました。 実際に2つとも実験させていただきました。 特に「質問:EXCELのマクロ :再帰的式を使って書き換える」は参考になりました。 JavaScriptの方ではよくお名前を拝見しておりましたが,実は何でもプログラムできる方だったのですね。 今後ともよろしくおねがいします。

関連するQ&A