人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

エクセルの質問です。
「あ」「い」「う」「え」「お」
という文字を、順列組み合わせで全ての並び方をセルに列挙するにはどうしたら効率がよいでしょうか?

●質問者: clinejp
●カテゴリ:コンピュータ
✍キーワード:エクセル セル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● taka27a
●27ポイント

ツール(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://homepage2.nifty.com/jackpotarchive/math/letsgo.htm

◎質問者からの返答

ご丁寧にありがとうございます!

感謝です。


2 ● owl
●27ポイント

http://www010.upp.so-net.ne.jp/catwalk/lib/Answer1147403262.xls

テンプレートを作りましたので御利用ください。

技術論、ということであれば、アルゴリズムを考えて生成すればいいのですが、5文字くらいまででしたらこうした力業のほうが速かったりします。

今回は、手許に7までの数字の順列データがありましたので流用しました。

◎質問者からの返答

ご親切にありがとうございます。

恐縮です。


3 ● gong1971
●26ポイント

順列組合せを求めるのって案外難しいんですよね。やはり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

http://www.moug.net/skillup/ebb/evbb/evbb006-1.htm (ダミー)

◎質問者からの返答

これまた・・・。感激。

はてなの皆さんはすごいな。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ