• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelですべての組合せ(重複組合せ)を出力するには? )

Excelですべての組合せ(重複組合せ)を出力するには?

このQ&Aのポイント
  • Excelの関数を使用して、組合せ(重複組合せ)の一覧を出力する方法を教えてください。
  • 10種類のお菓子から好きなものを3個選び、組合せを作成する方法をExcelで実現したいです。
  • Accessを使用しても組合せ(重複組合せ)を作成することはできるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓 つまり「菓子A、菓子A、菓子A」も「菓子A、菓子A、菓子B」もあり ですね。 №2さんのコードをお借りして Sub Test()   Dim myStr As Variant   Dim rowX As Long   Dim i As Long, j As Long, k As Long   Const MaxNum = 10   myStr = Split("A B C D E F G H I J")   rowX = 1   For i = 0 To MaxNum - 1     For j = i To MaxNum - 1       For k = j To MaxNum - 1         Cells(rowX, 1).Value = myStr(i)         Cells(rowX, 2).Value = myStr(j)         Cells(rowX, 3).Value = myStr(k)         rowX = rowX + 1       Next k     Next j   Next i End Sub

noname#243374
質問者

お礼

悩んでいた問題が解決し、とても助かりました。ありがとうございました。

その他の回答 (3)

  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.4

#2さんの回答は(普通の)組合せの場合のコードですので、 重複組合せの場合は、次のようにコードの一部を変えるだけ可能です。 '3個の場合 For i = 1 To MaxNum - 2 For j = i + 1 To MaxNum - 1 For k = j + 1 To MaxNum ↓ For i = 1 To MaxNum For j = i To MaxNum For k = j To MaxNum '5個の場合 For i = 1 To MaxNum - 4 For j = i + 1 To MaxNum - 3 For k = j + 1 To MaxNum - 2 For l = k + 1 To MaxNum - 1 For m = l + 1 To MaxNum ↓ For i = 1 To MaxNum For j = i To MaxNum For k = j To MaxNum For l = k To MaxNum For m = l To MaxNum

noname#243374
質問者

お礼

悩んでいた問題が解決し、とても助かりました。ありがとうございました。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.2

なぜCOMBIN(10+3-1,3)なのでしょうか? COMBIN(10,3)で良いと思うのですが・・・ Sub test() Const MaxNum = 10 Dim s(10) As String s(1) = "菓子A" s(2) = "菓子B" s(3) = "菓子C" s(4) = "菓子D" s(5) = "菓子E" s(6) = "菓子F" s(7) = "菓子G" s(8) = "菓子H" s(9) = "菓子I" s(10) = "菓子J" Dim i, j, k, l, m Dim rowX As Long rowX = 1 '3個の場合 For i = 1 To MaxNum - 2 For j = i + 1 To MaxNum - 1 For k = j + 1 To MaxNum Cells(rowX, 1).Value = s(i) Cells(rowX, 2).Value = s(j) Cells(rowX, 3).Value = s(k) rowX = rowX + 1 Next k Next j Next i rowX = rowX + 1 '5個の場合 For i = 1 To MaxNum - 4 For j = i + 1 To MaxNum - 3 For k = j + 1 To MaxNum - 2 For l = k + 1 To MaxNum - 1 For m = l + 1 To MaxNum Cells(rowX, 1).Value = s(i) Cells(rowX, 2).Value = s(j) Cells(rowX, 3).Value = s(k) Cells(rowX, 4).Value = s(l) Cells(rowX, 5).Value = s(m) rowX = rowX + 1 Next m Next l Next k Next j Next i End Sub

noname#243374
質問者

お礼

今回初めて知ったのですが、数学では「組合せ」と「重複組合せ」というのがあるようで、組合せが COMBIN(10,3) 重複組合せが COMBIN(10+3-1,3) なんだそうです。 組合せでの方法も知りたかったのでとても助かりました。ありがとうございました。

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.1

面白そうなので、アクセスでやってみました。 選んだものを何かの規則で順番に並べ、グループ化してみました。 テーブル t1 を作成し フィールド f1 に A,B,C...と十個のデータをセットする。 ソートに関しては、 http://www.geocities.co.jp/SilkRoad/4511/vb/strsort.htm をお借りして、そのまま、モジュールに貼り付けました。 モジュールにファンクションを一つ作り、クエリからソートされた文字列を表示できるようにしました。 Public strA(2) As String Function Reorg(a, b, c) As String Dim i As Long strA(0) = a strA(1) = b strA(2) = c StrSort strA, 0, 2 Reorg = "" For i = 0 To 2 Reorg = Reorg & strA(i) Next i End Function クエリを作成し、t1を3回表示させ(t1,t1_1,T1_2) 文字をソートして並べたものでグループ化して、 それぞれのf1の先頭を表示させる SELECT First(t1.f1) AS f1の先頭2, First(t1_1.f1) AS f1の先頭1, First(t1_2.f1) AS f1の先頭, reorg([t1].[f1],[t1_1].[f1],[t1_2].[f1]) AS 式1 FROM t1, t1 AS t1_1, t1 AS t1_2 GROUP BY reorg([t1].[f1],[t1_1].[f1],[t1_2].[f1]) ORDER BY First(t1.f1), First(t1_1.f1), First(t1_2.f1); 効率的なやり方かどうかはわかりませんが、ちょっと改造すれば5個でもできます。

noname#243374
質問者

お礼

クエリを実行したところ、220件のデータが表示されました。 なぜそうなるかはまだ理解できていませんが、とても参考になりました。 ありがとうございました。

関連するQ&A