- ベストアンサー
エクセルで順列の列挙
例えば 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列に並べる方法でもかまいません。 また昇り順でなくてもかまいません。 よろしくおねがいします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 学校の宿題とかではありませんよね。 以下は、再帰を使った、順列生成のアルゴリズムです。 たぶん、大丈夫だと思います。後は、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
その他の回答 (1)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
過去に似たような質問がありました (セルを分けていませんが) http://okweb.jp/kotaeru.php3?qid=1126322 http://okweb.jp/kotaeru.php3?qid=1128457
お礼
回答ありがとうございました。 実際に2つとも実験させていただきました。 特に「質問:EXCELのマクロ :再帰的式を使って書き換える」は参考になりました。 JavaScriptの方ではよくお名前を拝見しておりましたが,実は何でもプログラムできる方だったのですね。 今後ともよろしくおねがいします。
お礼
えっ,し・し・し…宿題… バレたか… というような歳ではないのですよ,残念ながら。 宿題はイヤですけど,2~3日くらいなら宿題があったころにもどってみたい気もします。 回答ありがとうございました! 8桁までならハングアップすることもなかったです。完璧です。すごい。