エクセルの質問です。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2006/05/14 12:09:34
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:taka27a No.1

回答回数3149ベストアンサー獲得回数64

ポイント27pt

ツール(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

id:clinejp

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

感謝です。

2006/05/14 12:07:49
id:owl No.2

回答回数165ベストアンサー獲得回数15

ポイント27pt

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

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

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

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

id:clinejp

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

恐縮です。

2006/05/14 12:08:16
id:gong1971 No.3

回答回数451ベストアンサー獲得回数70

ポイント26pt

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

id:clinejp

これまた・・・。感激。

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

2006/05/14 12:09:01
  • id:miyake_kazu
    VBAを使わずに列挙する方法です。

    1.A1セル(左上の隅)に「=IF((2^(MOD(INT(ROW()/(5^4)),5)))+(2^(MOD(INT(ROW()/(5^3)),5)))+(2^(MOD(INT(ROW()/(5^2)),5)))+(2^(MOD(INT(ROW()/(5^1)),5)))+(2^(MOD(INT(ROW()/(5^0)),5)))=31,CHAR(9250+2*(MOD(INT(ROW()/(5^4)),5)))&CHAR(9250+2*(MOD(INT(ROW()/(5^3)),5)))&CHAR(9250+2*(MOD(INT(ROW()/(5^2)),5)))&CHAR(9250+2*(MOD(INT(ROW()/(5^1)),5)))&CHAR(9250+2*(MOD(INT(ROW()/(5^0)),5))),"")」と入力する。
    2.A1セルを、A2930セルまでコピーする。


    疑似5進数を2進数のビットに見立てて、全てのビットが立っている場合に「あいうえお」に変換して出力する仕組みです。
  • id:wedoit
    VBAも使わず、公式も使わずに組み合わせを作成する方法:
    http://superdbtool.blog.jp/archives/490061.html

この質問への反応(ブックマークコメント)

トラックバック

  • というか、そうしないとできにくいような・・・。 あと、セルに列挙というのは 別々のセルにするということかな? ひとつのセルに あいうえお あういえお ・・・ って 入れていくんだろ
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません