電子書籍の厳選無料作品が豊富!

エクセルで1から9までの数字全てを1回ずつ使った並び順は全部で362,880通りあるようですが,この組合せをエクセルで表示しようと考え,関数を使って比較的入力の手間をかけずに作成しようとしましたが,どうしてもできませんでした。手入力でやっていきましたが,1000行を超えたあたりで目がかすれ,頭もクラクラしてきました。
どなたか,作成の方法を教えて頂けないでしょうか。
表示結果のイメージとしては,以下のように1セルに1つの数字が入るように組合せ全てを表示したいと考えております。
  A B C D E F G H I
1 1 2 3 4 5 6 7 8 9
2 1 2 3 4 5 6 7 9 8
3 1 2 3 4 5 6 8 7 9
      |
362880 9 8 7 6 5 4 3 2 1

VBAを使うとできるのかもしれませんが,VBAは勉強しようかとページを開いた程度の段階ですので,上記のことをプログラムするまでの知識はありません。ただ,コードを貼り付ける程度であればできますので,勿論,VBAで作成されたコードを教えて頂ければ大変ありがたいです。
過去のQも見ましたが,上記に該当するような質問は見つけられませんでした。
よろしくお願いいたします。

質問者からの補足コメント

  • 先ほどやってみました。1分27秒でできました!時間測定結果まで表示する機能も付けて頂き,ありがとうございました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2018/04/23 23:50
  • あらっそさんありがとうございました。先ほどやってみました。1分20-30秒程度でできました!別の方が数分早くコードをあげて頂きましたので,その方をベストアンサーとしました。申し訳ありません。

    No.3の回答に寄せられた補足コメントです。 補足日時:2018/04/23 23:53

A 回答 (3件)

以下のマクロを標準モジュールに登録してください。


表示したいシート上で、「組み合わせ」を実行すると、そのシートに結果が書き込まれます。
尚、362880行を表示する為にはexcel 2007以上でないとだめですので、excel2007以上を使用してください。
所要時間は、当方excel2007で約3分ほどです。
--------------------------------------------------
Option Explicit

Dim row As Long
Public Sub 組み合わせ()
Dim arr As Variant
Dim stime As Variant
Dim etime As Variant
stime = Time
Application.ScreenUpdating = False
arr = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
'arr = Array(1, 2, 3, 4)
row = 1
Call pout(arr, "")
Application.ScreenUpdating = True
etime = Time
MsgBox ("所要時間=" & Minute(etime - stime) & "分" & Second(etime - stime) & "秒")
End Sub

Private Sub pout(ByVal arr As Variant, ByVal str As String)
Dim i As Long
Dim col As Long
Dim wstr As String
Dim warr As Variant
For i = 0 To UBound(arr)
wstr = str & arr(i)
If UBound(arr) = 0 Then
For col = 1 To 9
Cells(row, col).Value = Mid(wstr, col, 1)
Next
row = row + 1
Exit Sub
End If
warr = get_array(arr, i)
Call pout(warr, wstr)
Next
End Sub

Private Function get_array(ByVal arr As Variant, ByVal ix As Long)
Dim i As Long
Dim j As Long
Dim warr As Variant
warr = Array(0)
ReDim warr(UBound(arr) - 1)
j = 0
For i = 0 To UBound(arr)
If i <> ix Then
warr(j) = arr(i)
j = j + 1
End If
Next
get_array = warr
End Function
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

早速ありがとうございます。
やってみようと思います。
取り急ぎ御礼申し上げます。

お礼日時:2018/04/23 10:09

やっつけで作ったので汚いですが、、、、



基本的なコマンドしか使っていないので、古いExcelでも動くかな。。。

Excel2016で、5分弱だったかな



Sub nine()

r = 1


For a = 1 To 9
For b = 1 To 9
If a = b Then GoTo next_b
For c = 1 To 9
If a = c Or b = c Then GoTo next_c
For d = 1 To 9
If a = d Or b = d Or c = d Then GoTo next_d
For e = 1 To 9
If a = e Or b = e Or c = e Or d = e Then GoTo next_e
For f = 1 To 9
If a = f Or b = f Or c = f Or d = f Or e = f Then GoTo next_f
For g = 1 To 9
If a = g Or b = g Or c = g Or d = g Or e = g Or f = g Then GoTo next_g
For h = 1 To 9
If a = h Or b = h Or c = h Or d = h Or e = h Or f = h Or g = h Then GoTo next_h
For i = 1 To 9
If a = i Or b = i Or c = i Or d = i Or e = i Or f = i Or g = i Or h = i Then GoTo next_i
Cells(r, "A") = a
Cells(r, "B") = b
Cells(r, "C") = c
Cells(r, "D") = d
Cells(r, "E") = e
Cells(r, "F") = f
Cells(r, "G") = g
Cells(r, "H") = h
Cells(r, "I") = i
r = r + 1
next_i: Next i
next_h: Next h
next_g: Next g
next_f: Next f
next_e: Next e
next_d: Next d
next_c: Next c
next_b: Next b
Next a



End Sub
この回答への補足あり
    • good
    • 0
この回答へのお礼

ありがとう

早速ありがとうございます。
違う書き方もあるのですね。
こちらもやってみようと思います。
因みにエクセルは2016です。

お礼日時:2018/04/23 10:11

似たようなプログラムの書いたマクロの本を探してその内容を改造しましょう。


エクセルに印刷させるのには、チョットボリューム的にどうかと思うけどね。

やはりVBAが基本でわからないと難しいですね。
    • good
    • 0
この回答へのお礼

早速お返事ありがとうございます。
私に改造する能力は余りなさそうですが,ご指摘の似たようなマクロ(の出典)をもしご存じであれば,教えて頂けないでしょうか。
一度トライしてみようかと思います。途中で挫折しそうですが(笑)。
よろしくお願いいたします。

お礼日時:2018/04/22 20:28

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