![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
エクセルで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も見ましたが,上記に該当するような質問は見つけられませんでした。
よろしくお願いいたします。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?e8efa67)
No.2ベストアンサー
- 回答日時:
以下のマクロを標準モジュールに登録してください。
表示したいシート上で、「組み合わせ」を実行すると、そのシートに結果が書き込まれます。
尚、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
No.3
- 回答日時:
やっつけで作ったので汚いですが、、、、
基本的なコマンドしか使っていないので、古い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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Visual Basic(VBA) VBAコードを張り付け後のエクセルの進め方 2 2023/02/07 18:24
- Excel(エクセル) エクセルの表示形式について教えてください あるセルの「A」という値と、別のセルの「B」という値を組み 4 2023/02/21 21:55
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) エクセルシートの合計の変動 5 2022/04/05 15:56
- Excel(エクセル) 【エクセル】COUNTIFの検索条件が可変する数字の場合の数式 1 2022/09/27 15:34
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelの表示についての質問
-
再質問です。マクロの修正箇所...
-
データチェックを行うエクセル...
-
エクセルの数式バーのフォント...
-
エクセルで「ページレイアウト...
-
エクセルでセルに標準で入力さ...
-
【マクロ】毎回、ファイル名が...
-
2列に入っているデータを1列...
-
文字列になっている時間をVBAで...
-
VBA Private Sub Worksheet_Cha...
-
Excel VBAで全ての矢印を赤色に...
-
エクセルの関数について教えて...
-
Excelの数式について教えてくだ...
-
シフト表をエクセルで作るとき...
-
Excel VBについての質問です。
-
excel2013 MonthDays 関数が使...
-
REGEXREPLACE関数について、
-
ユーザー定義関数をアドイン登...
-
エクセル日付 文字列の関数がエ...
-
【マクロ】 IFERROR関数をマク...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセル DBから該当データを...
-
エクセルで印刷をするときのマ...
-
エクセルで数字9個の並び順の組...
-
不明なコマンドです("FROM")。...
-
Access2010 「演算子がありませ...
-
【ExcelVBA】sheet作成時にマク...
-
エクセル/マクロ Exit Subが実...
-
オペランドが足りませんとコメ...
-
mfc42.dllファイルってなんです...
-
pythonでrequestsが使えない
-
エクセルの文字間スペースを入...
-
Excel2010でふりがなが漢字にな...
-
フェイス・シートについて教え...
-
エクセル 「実行時エラー"13":...
-
VBAで横データを縦データに変換...
-
マクロ実行ボタンがコピー出来ない
-
VBA シートの切り替えができな...
-
AUTOCAD 2010でdwlファイルの場...
-
VBAでシートコピー後、シート名...
-
『PHP』 MAMPで$_SERVER["REMOT...
おすすめ情報
先ほどやってみました。1分27秒でできました!時間測定結果まで表示する機能も付けて頂き,ありがとうございました。
あらっそさんありがとうございました。先ほどやってみました。1分20-30秒程度でできました!別の方が数分早くコードをあげて頂きましたので,その方をベストアンサーとしました。申し訳ありません。