「あ」「い」「う」「え」「お」
という文字を、順列組み合わせで全ての並び方をセルに列挙するにはどうしたら効率がよいでしょうか?
ツール(T)→マクロ(M)→Visual Basic Editor(V)
または
Alt+F11
で
Visual Basic Editorを起動する。
挿入(I)→標準モジュール(M)
として
右側に出来たウィンドウに
Option Explicit
Sub kumiawase()
Const motonum = 3 '並べる数字の種類
Const erabinum = 2 '並べる数
Dim i As Integer
Dim j As Integer
Dim k As Integer
Dim countlasthani As Integer
Dim newstartnum As Integer
Dim numlist(1 To erabinum) As Integer
For i = 1 To erabinum
numlist(i) = i
Next
j = 1
Do
numlist(erabinum) = numlist(erabinum - 1)
countlasthani = motonum - numlist(erabinum)
For i = 1 To countlasthani
numlist(erabinum) = numlist(erabinum) + 1
For k = 1 To erabinum
Cells(j, k) = numlist(k)
Next
j = j + 1
Next
For i = erabinum To 2 Step -1
If numlist(i) > numlist(i - 1) + 1 Then
newstartnum = numlist(i - 1) + 1
For k = i - 1 To erabinum - 1
numlist(k) = newstartnum + k - (i - 1)
Next
Exit For
End If
Next
Loop Until numlist(1) = motonum - erabinum + 1
For i = 1 To erabinum
Cells(j, i) = numlist(i)
Next
End Sub
をコピーして貼り付けてください。
その後上書き保存をしてVisual Basic Editorを閉じてください。
ツール(T)→マクロ(M)→マクロ(M)
または
Alt+F8
で呼び出したウィンドウの
kumiawase
を選んで
実行(R)
をクリック
というのが一般的な方法だと思います。
http://www010.upp.so-net.ne.jp/catwalk/lib/Answer1147403262.xls
テンプレートを作りましたので御利用ください。
技術論、ということであれば、アルゴリズムを考えて生成すればいいのですが、5文字くらいまででしたらこうした力業のほうが速かったりします。
今回は、手許に7までの数字の順列データがありましたので流用しました。
ご親切にありがとうございます。
恐縮です。
順列組合せを求めるのって案外難しいんですよね。やはりVBAを使用するのが一番効率的です。
下記の手順を実行すると、A1のセルから下方向に順列組合せがすべて列記されます。
1.Excelを起動し、新規ブックが開いている状態で[Alt]+[F11]を押します。
2.[挿入]メニューから[標準モジュール]をクリック。
3.編集画面に下記のマクロをコピーして貼り付けます。
4.現在の画面を閉じてExcelの画面に戻ります。
5.[Alt]+[F8]でマクロの画面を開き、[実行]ボタンを押します。
Sub test()
Dim i1, i2, i3, i4, i5
Dim m(5) As String
m(1) = "あ"
m(2) = "い"
m(3) = "う"
m(4) = "え"
m(5) = "お"
Range("A1").Select
For i1 = 1 To 5
For i2 = 1 To 5
If InStr(i1, i2) = 0 Then
For i3 = 1 To 5
If InStr(i1 & i2, i3) = 0 Then
For i4 = 1 To 5
If InStr(i1 & i2 & i3, i4) = 0 Then
For i5 = 1 To 5
If InStr(i1 & i2 & i3 & i4, i5) = 0 Then
ActiveCell = m(i1) & m(i2) & m(i3) & m(i4) & m(i5)
ActiveCell.Offset(1, 0).Select
End If
Next
End If
Next
End If
Next
End If
Next
Next
Range("A1").Select
End Sub
これまた・・・。感激。
はてなの皆さんはすごいな。
ご丁寧にありがとうございます!
感謝です。