• ベストアンサー

123456789の順番の並びを得るためのマクロは

エクセル上でのマクロを作っています。 結果としてこのようなものが表示される様なマクロを考えています。 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 9 8 1 2 3 4 5 6 8 7 9 1 2 3 4 5 6 8 9 7 1 2 3 4 5 6 9 7 8 1 2 3 4 5 6 9 8 7 1 2 3 4 5 7 6 8 9 … といった具合です。 1つ1つの文字がひとつひとつのセルに入っている様にしたいと思います。 どんなマクロを組んだらいいのか、教えて頂けるとありがたいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

おっしゃっている意味が理解できません。 1~9の順列のパターン表ということでしょうか? そうだとすると、10!通り(10の階乗)=3628800通りとなり、 Excelでは、32767行までしか設定できないため、オーバーフロー します。 それでもよければ、以下をどうぞ。 また、勘違いかなぁ。 Sub Macro1() Dim r_idx As Integer Dim c_idx1 As Integer Dim c_idx2 As Integer Dim c_idx3 As Integer Dim c_idx4 As Integer Dim c_idx5 As Integer Dim c_idx6 As Integer Dim c_idx7 As Integer Dim c_idx8 As Integer Dim c_idx9 As Integer Dim result1 As String Dim result2 As String Dim result3 As String Dim result4 As String Dim result5 As String Dim result6 As String Dim result7 As String Dim result8 As String Dim result9 As String r_idx = 1 For c_idx1 = 1 To 9 Cells(r_idx, 1).Value = c_idx1 result1 = "" & c_idx1 For c_idx2 = 1 To 9 If InStr(result1, "" & c_idx2) = 0 Then result2 = result1 & c_idx2 For c_idx3 = 1 To 9 If InStr(result2, "" & c_idx3) = 0 Then result3 = result2 & c_idx3 For c_idx4 = 1 To 9 If InStr(result3, "" & c_idx4) = 0 Then result4 = result3 & c_idx4 For c_idx5 = 1 To 9 If InStr(result4, "" & c_idx5) = 0 Then result5 = result4 & c_idx5 For c_idx6 = 1 To 9 If InStr(result5, "" & c_idx6) = 0 Then result6 = result5 & c_idx6 For c_idx7 = 1 To 9 If InStr(result6, "" & c_idx7) = 0 Then result7 = result6 & c_idx7 For c_idx8 = 1 To 9 If InStr(result7, "" & c_idx8) = 0 Then result8 = result7 & c_idx8 For c_idx9 = 1 To 9 If InStr(result8, "" & c_idx9) = 0 Then Cells(r_idx, 1).Value = c_idx1 Cells(r_idx, 2).Value = c_idx2 Cells(r_idx, 3).Value = c_idx3 Cells(r_idx, 4).Value = c_idx4 Cells(r_idx, 5).Value = c_idx5 Cells(r_idx, 6).Value = c_idx6 Cells(r_idx, 7).Value = c_idx7 Cells(r_idx, 8).Value = c_idx8 Cells(r_idx, 9).Value = c_idx9 result9 = result8 & c_idx9 r_idx = r_idx + 1 End If Next c_idx9 End If Next c_idx8 End If Next c_idx7 End If Next c_idx6 End If Next c_idx5 End If Next c_idx4 End If Next c_idx3 End If Next c_idx2 Next c_idx1 End Sub

jive
質問者

お礼

度々のご回答ありがとうございます。 そうですね、オーバーフローしてしまいますね^^; でも、そういったことなんです。どうもありがとうございます。 実を言いますと、次の問題の解を求めるマクロを作ろうと思っていたんです。 「OOO+OOO=OOO  ここに登場するあわせて9つの数字は、1~9の数字で、同じ数字が2度使われることはないものとする。このとき、式を満たす9つの数字の並びを全て書き出しなさい」といった問題です。 質問させていただいたような一覧表があれば、かんたんだなあと思った、ということなんです。 お示しいただいた方法を利用して変数に記録させれば、この問題は簡単に解けると思います。でも、もし、それ以外の方法で解くことができるというのがもしあれば、教えていただけると幸いです。

その他の回答 (4)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.5

#2です。 #2で提示したマクロを少し手を加えればできますよね。 3桁を1セルに、1パターンで3列でテキストファイルに出力する だけです。

jive
質問者

お礼

どうもありがとうございます。 おかげで問題は解決しそうです^^

  • toshi_2000
  • ベストアンサー率30% (306/1002)
回答No.4

8割ほどマクロが完成していたのですが、一晩のうちに皆さんに先を越されました。どうマクロにするかというところで時間を取ってしまいました。No.2さんに比べるとあまりにも貧弱なため、お見せすることもできません。マクロの勉強になりました。久しぶりに頭を使いました。

jive
質問者

お礼

ありがとうございます。私も、頭の体操になりました。楽しいですねこういうの^^

  • type0000
  • ベストアンサー率50% (1/2)
回答No.3

1~9までの並び順ってことは、362880パターンの数字の並びということでしょうか? 1*2*3*4*5*6*7*8*9 = 362880 エクセルの表示結果で言うと(362880行×9列)のデータということでしょうか?

jive
質問者

お礼

そうです、362880パターンです。 表示形式は、どのようでもかまいません。 (No.2のお礼の欄をご覧ください)

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

Sub Macro1() Dim r_idx As Integer Dim c_idx As Integer For r_idx = 1 To 9 For c_idx = 1 To 9 Cells(r_idx, c_idx).Value = c_idx Next c_idx Next r_idx End Sub これでいかがでしょうか??

jive
質問者

お礼

早速の解答ありがとうございます。 ただ、質問の意図が伝わっていなかったようで、わかりにくくてすみません。 ただ1から9を9回表示するのではなくて、質問の中にあります様な、ややこしい1から9の数字の入れ替えを表示したいのです。どうぞよろしくお願いいたします。

関連するQ&A