アプリ版:「スタンプのみでお礼する」機能のリリースについて

例えば
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列に並べる方法でもかまいません。
また昇り順でなくてもかまいません。 よろしくおねがいします。

A 回答 (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
    • good
    • 0
この回答へのお礼

えっ,し・し・し…宿題… バレたか…
というような歳ではないのですよ,残念ながら。
宿題はイヤですけど,2~3日くらいなら宿題があったころにもどってみたい気もします。

回答ありがとうございました!
8桁までならハングアップすることもなかったです。完璧です。すごい。

お礼日時:2005/09/08 17:37

過去に似たような質問がありました


(セルを分けていませんが)
http://okweb.jp/kotaeru.php3?qid=1126322
http://okweb.jp/kotaeru.php3?qid=1128457
    • good
    • 1
この回答へのお礼

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

お礼日時:2005/09/08 17:36

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!