• ベストアンサー

Excelでデータ全通り組み合わせ出力方法

Excelでデータ全通り組み合わせ出力方法について教えて頂けますと助かります。 セルA~Eに、数がまちまちのアイテム名が入っています。 (セルA~Eというのは例で、変則的に全てのアイテム数は増減します。) 全ての組合せをセルG~Kに各々書き出してくれる方法はあるでしょうか? (イメージ添付あり) できればセルに入力すれば自動的に組合せが追加されていくのが理想です。 Excel2010を使用しており、VBAは初心者です。 どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。

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

  • ベストアンサー
  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.4

#1、2、cjです。#1、2、補足欄へのレスです。 取り急ぎ、コードのみ修正しました。 #2を元に書き換えています。 Option Explicit Private Sub Worksheet_Change(ByVal Target As Range)   Dim rSrc As Range   Application.EnableEvents = False   Set rSrc = Range("B2").CurrentRegion   Application.EnableEvents = True   If Intersect(Target, rSrc) Is Nothing Then Exit Sub   Application.EnableEvents = False   Call PrintCombi(rSrc)   Application.EnableEvents = True End Sub Sub PrintCombi(ByVal rSrc As Range)   Dim tnFld As Long   Dim nRc As Long   Dim nConti As Long   Dim nRow As Long   Dim i As Long   Dim j As Long   tnFld = rSrc.Columns.Count   nConti = 1   With rSrc(1, rSrc.Columns.Count + 3)     .CurrentRegion.Clear     Cells(1).Resize(, tnFld).Copy .Cells(1)     For i = tnFld To 1 Step -1       nRc = Cells(Rows.Count, i).End(xlUp).Row       nRow = 2       For j = 2 To nRc         Cells(j, i).Copy Destination:=.Cells(nRow, i).Resize(nConti)         nRow = nRow + nConti       Next j       nConti = nConti * (nRc - 1)     Next i     With .Cells(2, 1).Resize(nConti)       For i = 2 To tnFld         Range(.Cells(1, i), .Cells(.Cells.Count + 1, i).End(xlUp)).Copy Destination:=.Columns(i)       Next i     End With   End With End Sub

yamayama456
質問者

お礼

cj_mover さん ほんとうに理想が叶いました! ご丁寧に回答くださり、とても助かりました。 ありがとうございます!!

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 横1列に並んだ6個(A~E列の列数+1)の適当な未使用のセルを作業用セルとして使用します。  ここでは仮に、M1~R1を作業用セルとして使用するものとします。  まず、R1セルに 1 と入力して下さい。  次に、Q1セルに次の関数を入力して下さい。 =MAX(IF(COUNTIF(E:E,"*?"),MATCH("*?",E:E,-1),1),IF(COUNT(E:E),MATCH(MAX(E:E)+1,E:E),1))  次に、Q1セルをコピーして、M1~P1の範囲に貼り付けて下さい。  次に、K1セルに次の関数を入力して下さい。 =IF(ROWS($1:1)>PRODUCT($M$1:$Q$1),"",IF(INDEX(E:E,MOD(INT((ROWS($1:1)-1)/PRODUCT(R$1:$R$1)),Q$1)-ROW(E$1)+2)="","",INDEX(E:E,MOD(INT((ROWS($1:1)-1)/PRODUCT(R$1:$R$1)),Q$1)-ROW(E$1)+2)))  次に、K1セルをコピーして、G1~J1の範囲に貼り付けて下さい。  次に、K1~J1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。

yamayama456
質問者

お礼

kagakusuki さん まだうまく使いこなせていないのですが、 ご回答ありがとうございました。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.2

#1、cjです。 ちょっとミスしましたので、コードの差し替えをお願いします。 加えて、 > 右側、1列挟んで右側に、全通りの組合わせを > 作成します。 この部分の説明ですが、 右側、2列挟んで右側に、全通りの組合わせを 作成します。 というようにしないと、列を追加しながらの作成がうまく行きませんでした。 実際に試す際も、予め、入力範囲の右側に2列の空列がある状態から 始めるようにしてください。 失礼しました。 ' ' ここから Private Sub Worksheet_Change(ByVal Target As Range)   Dim rSrc As Range   Application.EnableEvents = False   Set rSrc = Range("B2").CurrentRegion   Application.EnableEvents = True   If Intersect(Target, rSrc) Is Nothing Then Exit Sub   Application.EnableEvents = False   Call PrintCombi(rSrc)   Application.EnableEvents = True End Sub Sub PrintCombi(ByVal rSrc As Range)   Dim tnFld As Long   Dim nRc As Long   Dim nConti As Long   Dim nRow As Long   Dim i As Long   Dim j As Long   tnFld = rSrc.Columns.Count   nConti = 1   With rSrc(1, rSrc.Columns.Count + 3)     .CurrentRegion.Clear     For i = tnFld To 1 Step -1       nRc = Cells(Rows.Count, i).End(xlUp).Row       nRow = 1       For j = 1 To nRc         Cells(j, i).Copy Destination:=.Cells(nRow, i).Resize(nConti)         nRow = nRow + nConti       Next j       nConti = nConti * nRc     Next i     With .Resize(nConti)       For i = 2 To tnFld         Range(.Cells(1, i), .Cells(Rows.Count, i).End(xlUp)).Copy Destination:=.Columns(i)       Next i     End With   End With End Sub ' ' ここまで

yamayama456
質問者

補足

cj_mover さん! 変更したい箇所があるので、補足入力しました。 どうか気づいてください・・・>< コードの差し替えのご連絡ありがとうございます。

  • cj_mover
  • ベストアンサー率76% (292/381)
回答No.1

こんにちは。 VBAですが、なるべく基本的な書き方にしました。 適用したいシートを表示して、 シートタブを右クリック、[コードの表示]をクリック、 表示された白いシート(VBEのシートモジュール)に 下記をコピペして Alt + F11 キーでExcelに戻ります。 以降、A1から連続したセル範囲を書き換える度に、 右側、1列挟んで右側に、全通りの組合わせを 作成します。 ' ' ここから Private Sub Worksheet_Change(ByVal Target As Range)   Dim rSrc As Range   Application.EnableEvents = False   Set rSrc = Range("B2").CurrentRegion   Application.EnableEvents = True   If Intersect(Target, rSrc) Is Nothing Then Exit Sub   Application.EnableEvents = False   Call PrintCombi(rSrc)   Application.EnableEvents = True End Sub Sub PrintCombi(ByVal rSrc As Range)   Dim tnFld As Long   Dim nRc As Long   Dim nConti As Long   Dim nRow As Long   Dim i As Long   Dim j As Long   tnFld = rSrc.Columns.Count   nConti = 1   With rSrc(1, rSrc.Columns.Count + 2)     .CurrentRegion.Clear     For i = tnFld To 1 Step -1       nRc = Cells(Rows.Count, i).End(xlUp).Row       nRow = 1       For j = 1 To nRc         Cells(j, i).Copy Destination:=.Cells(nRow, i).Resize(nConti)         nRow = nRow + nConti       Next j       nConti = nConti * nRc     Next i     With .Resize(nConti / nRc)       For i = 3 To tnFld         Range(.Cells(1, i), .Cells(1, i).End(xlDown)).Copy Destination:=.Columns(i)       Next i     End With   End With End Sub ' ' ここまで

yamayama456
質問者

補足

cj_mover さま、ご回答ありがとうございます。 完璧にできました!! 恐れ入りますが追加希望がございまして。 1行目は項目を入れたいので、参照したくありません。 いただいたものを編集してみようと思ったのですが、スキがなくて、わかりません。。。。 2行目以降からスタートという風に書き換えるにはどうすればよろしいでしょうか? またこの質問に気づいていただけることを祈って。

関連するQ&A

  • Excelマクロでのデータ全通り組み合わせ出力方法

    Excelマクロでのデータ全通り組み合わせ出力方法 VBA初心者です。以下の内容につき教えて頂けますと助かります。 添付ファイルの【因子/水準表】データの全組み合わせを【全通り組み合わせ表】に出力したいです。 以下にやりたいことを纏めます。 ・【因子/水準表】データ(因子/水準)の全組み合わせを【全通り組み合わせ表】に出力したい。 ・【因子/水準表】と【全通り組み合わせ表】は同一シート内で列を合わせたい。 ・因子数、水準数は可変としたい。(添付ファイルでは因子数3、水準数の最大は4となっているが、この数が可変となるため、【全通り組み合わせ表】の開始セルも併せて可変となる) 以上、よろしくお願いいたします。

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

    Excelですべての組合せ(重複組合せ)を出力するには? 次の条件のような場合、Excelですべての組合せ(重複組合せ)をVBAで出力するにはどうしたらいいのでしょうか? 10種類のお菓子の中から、好きなものを3個選んでセットにするとします。 同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓子A」は選んだ順が違うだけで同じ組合せなので、どちらか片方だけにします。 この場合、すべての組合せの数は Excelの関数で求めることができるようで COMBIN(10+3-1,3) = 220 通りあることまではわかりましたが、このすべての組合せの一覧をどのようにして出力したらいいのかがわかりません。 いろいろ検索した結果、順列という方法は見つかりましたが、重複組合せでの方法は見つけることができませんでした。 また、Accessを使っても似たようなことができるのでしょうか? 直積? できれば、3個固定ではなく5個の場合も出来るとうれしいです。 よろしくお願いします。

  • Excelでの全通りの組み合わせ出力方法(文字列)

    Excelについて全くの初心者で、教えて頂きたい質問があります。 Excelの文字列の全通りの組み合わせを出力がしたいのですが、その方法が分かりません。 例えばセルAに ・りんご ・みかん ・いちご セルBに ・だいこん ・キャベツ ・トマト があり、別のセルにその全通りの組み合わせを出力 (文字と文字の間はスペース) りんご だいこん りんご キャベツ りんご トマト みかん だいこん みかん キャベツ みかん トマト いちご だいこん いちご キャベツ いちご トマト この様に出来る方法はあるでしょうか? また出来ればその裏(だいこん りんご)も出力したいと考えており、キーワードは3つまで出来るようになりたいです。 どなたかご存じでしたら、ぜひお教え下さい。 よろしくお願いします。

  • エクセルVBAでの文字列抽出とセルへの出力

    エクセルVBAで文字列を検索して、検索した文字列を他のセルへ出力する方法を探しております。状況を図で説明すると、 A1セル:aaa\bbb\item1\ddd A2セル:aaa\bbb\ccc\item2\ddd A3セル:aaa\bbb\ccc\ddd\item3\eee このような状態からitemを検索して、B1セルに B1セル:item1 B2セル:item2 B3セル:item3 と表示させたいです。エクセルVBA初心者なものでRegExpを使うのかな、というところまではたどり着きましたが、そこから先にすすめません。 何か良い方法をご存知の方、教えていただきたいです。よろしくお願いいたします。

  • セルに入力した数値の組み合わせを抽出する方法

    セルに入力した数値の組み合わせを抽出する方法 色々探したのですが、よく分からないので教えてください。 エクセルシートのB3:E6の16個の各セルに、任意に数値を入力していきます。 その入力した数値の組み合わせを全て抽出したいと思っております。 (抽出先はどこでもいいです。) 希望としてはB3:E3の4個の数値は必ず入った組み合わせを作りたいです。 関数でもVBAでも何か方法が有れば教えてください。 宜しくお願い致します。

  • エクセルで組み合せ一覧表を作成したいです

    エクセルでシート1のA1~O1の各セルには、アルファベットや数字(1~50)が入っています。 A1~O1までの15個のセルから、6つを選択した時の組み合せ一覧を作成したいと思っています。 組み合わせは計算すると、15C6となるので全5005通りになります。 組み合せの一覧は、シート2に表示させたいです。 (a,b,c,d,e,f)と(b,a,c,d,e,f)は同じものとします。 またA1~O1のセルに入るのは、アルファベットと数字の組み合せが複雑であれば、数字のみとしたいと思います。 関数だけで何とかしようと思いましたが、どうしても無理のような気がしてしまいましたので、こちらにご質問をさせて頂きました。 VBAの知識もないため、自分でプログラムを組む事もできません。 シートにVBAを組み込む方法は、これまでに経験があるので理解しております。 アドバイスを頂けると嬉しく思います。 何卒、よろしくお願い致します。

  • Excelでの全通りの組み合わせ出力方法2

    こんにちは。 http://okwave.jp/qa/q4122783.html にあった質問より、もう少し複雑な組み合わせを出力したいと思っています。 例えば 【肉類】として 牛肉 豚肉 鶏肉 魚肉  の中から2つ選び 【根菜】として 大根 にんじん たまねぎ サツマイモ の中から2つ選び 【葉野菜】として キャベツ 白菜 キャベツ レタス ほうれん草 の中から2つ選ぶ、 といった場合の全ての組み合わせを 【肉類】【根菜】【葉野菜】の列、または 【肉類1】【肉類2】【根菜1】【根菜2】【葉野菜1】【葉野菜2】の列に出力する事は出来るものでしょうか? 組み合わせ例としては、 牛肉、魚肉、大根、たまねぎ、レタス、ほうれん草 のような感じです。 実際に使用したい選択肢の総数が100個ほどあり、手入力には多すぎるので なんとかExcelで出来たらと思ってるのですが……。  ご存知の方がいらっしゃいましたらご教授下さい!

  • エクセルで256通りの組み合わせ

    たとえば、A,B,C,Dという箱にそれぞれ1~4の数字を入れると 1111 1112 1113 ・ ・ ・ 4444 と全部で256通りの組み合わせができると思います。 このようにいくつもの値の組み合わせをエクセルで全て作製するにはどのようにしたらよいのでしょうか。 実際には、Aに(10,20,30,40)、Bに(0.5,1.0,1.5,2.0)、Cに(500,600,700,800)、Dに(1.1,1.2,1.3,1.4)という感じの値の組み合わせを全通り作りたいです。 簡単なことかもしれませんが、あまり詳しくないので困っています。 よろしくお願いいたします。

  • EXCELVBA 全通りの組み合わせの出力

    はじめまして! VBAの記述の方法が分からず困っています。 過去の質問も検索してみましたが、自分のケースにどうあてはめればよいかわからず・・。 どなたが教えていただけないでしょうか? A1~AK1までそれぞれ1~37までの数字が入力されています。 組み合わせとして、そこから35個の数字を選ぶ場合の全通りを記載したいです。 2行目のA1~AI1までに選んだ35個の数字を出力し、 1行ずつ下にずらしていきたいです。 大変お手数ですが・・・よろしくお願いします・・・

  • EXCEL VBAで組合せを作るには

    EXCEL VBAで組合せを作る方法を考えているのですが、なかなか思い付かず質問させて頂いています。 例) 1 2 3 4 5 … nという数字があり、そこから抜き取り組合せを作る。 ・2個ずつの組合せ 1と2 1と3 1と4 という感じで組合わせて行くが、2と1というような逆のパターンは除外する。 ・3個ずつの組合せ、4個ずつの組合せ…と最終n-1個(n個全てを抜取る組合せは1パターンしかないので、あえて作らなくてもよいのではと思っています)まで組合せを作って行く。 という内容です。 抜き取りたい数字の個数が、いつも決まった数ではなく、それに対応したものが考えきれなくてつまづきました。 どうかよろしくお願いいたします。

専門家に質問してみよう