出産前後の痔にはご注意!

こんにちは。
http://oshiete.goo.ne.jp/qa/4122783.html
にあった質問より、もう少し複雑な組み合わせを出力したいと思っています。

例えば
【肉類】として
牛肉 豚肉 鶏肉 魚肉  の中から2つ選び
【根菜】として
大根 にんじん たまねぎ サツマイモ の中から2つ選び
【葉野菜】として
キャベツ 白菜 キャベツ レタス ほうれん草 の中から2つ選ぶ、

といった場合の全ての組み合わせを

【肉類】【根菜】【葉野菜】の列、または
【肉類1】【肉類2】【根菜1】【根菜2】【葉野菜1】【葉野菜2】の列に出力する事は出来るものでしょうか?

組み合わせ例としては、

牛肉、魚肉、大根、たまねぎ、レタス、ほうれん草

のような感じです。
実際に使用したい選択肢の総数が100個ほどあり、手入力には多すぎるので
なんとかExcelで出来たらと思ってるのですが……。

 ご存知の方がいらっしゃいましたらご教授下さい!

A 回答 (3件)

組み合わせ(順番は関係ない)という前提で


A1セルに総数 =PRODUCT(B1:D1)
B1セルに「肉」の組み合わせ数 =COMBIN(4,2)
C1セルに「根菜」の組み合わせ数 =COMBIN(4,2)
D1セルに「葉」の組み合わせ数 =COMBIN(5,2)

A2セルに連番として 1
B2セルに=IF($A2>$A$1,"",MOD(INT(($A2-1)/C$1/D$1),B$1)+1)
C2セルに=IF($A2>$A$1,"",MOD(INT(($A2-1)/$D$1),C$1)+1)
D2セルに=IF($A2>$A$1,"",MOD($A2-1,D$1)+1)
(D2セルから考えた)
A2:D2下へオートフィル連番360まで


各組合せ
I1セルに肉の品数の4
K5セルに根菜の品数の4
M5セルに葉の品数の5
I2に1、J2に2 右へコピー

I3セルに =(COUNTIF(I$2:I2,I2)>=I$1-I2)+I2
J3セルに =IF(I3<>I2,I3+1,J2+1)
I3:J3セルを右へ下へオートフィル
(添付図の罫線で囲まれた部分しか使わない)

E2セルに肉
=INDEX(P:P,INDEX(I:I,B2+1)+1)&" "&INDEX(P:P,INDEX(J:J,B2+1)+1)
F2セルに根菜
=INDEX(Q:Q,INDEX(K:K,C2+1)+1)&" "&INDEX(Q:Q,INDEX(L:L,C2+1)+1)
G2セルに葉
=INDEX(R:R,INDEX(M:M,D2+1)+1)&" "&INDEX(R:R,INDEX(N:N,D2+1)+1)
E2:G2セル フィルハンドルダブルクリック

考え方を理解するようにしてください
「Excelでの全通りの組み合わせ出力方法」の回答画像3
    • good
    • 0
この回答へのお礼

画像付きのとても丁寧なご回答、ありがとうございます!
COMBIN関数で、それぞれ値を出した後の手順がよく分からなかったので、とても参考になりました。
ご回答サンプルを参考に、実際出したかったデータを出すことが出来ました!本当にありがとうございます!

お礼日時:2011/11/02 21:54

ご覧になった過去ログに2通りの方法が書かれていましたが,どちらでも構わないのでほとんどそのまま利用して,肉4種の中から肉肉の組合せ計12通りを計算することは簡単にできますね。



同じ事を今度は根菜4種の中から,根菜1根菜2の組合せ12通りを計算することも簡単にできます。
この2つをまた同じ方法で掛け合わせれば,肉肉12通り×根菜根菜12通りの組合せが出てきます。

同様にして野菜5種の中からも20通りの組合せを計算して並べ,最後に肉肉根根144×葉葉20=2880通りもまた同じ事の繰り返しで並べることができます。
    • good
    • 1
この回答へのお礼

ご回答有難うございました!
可能との事で安心しました。コピーペーストのくり返しで出来そうだと思うのですが、今回出したい組み合わせ総数が3万程度になるものですから、途中にヒューマンエラーを起こした場合、うっかり見過ごすかも知れないので、そこだけ気をつけたらよさそうですね。
どうも有難うございました!

お礼日時:2011/11/02 21:49

知っていると思うが、組み合わせというのは、区分の場合の数が増えると急激に増える。


質問者はエクセル関数の初歩的な数十個しか出来ないと思うのだが、それでは出来ない。
プログラムを学んで、プログラムで3重,4重(ネストという)の繰り返しの処理で組み合わせれば、理論上は可能。
しかし場合の数が増えると、処理する時間・シートに書き出すコンピュータの時間も相当なものになり、待機我慢限度を超えた時間がかかるという感じをもつ場合もある。
ーー
そもそも理論的に1000件を超えるような組み合わせをシート上に出しても、使いこなせるのか?
もっと色々な数学的なことやコンピュター処理を勉強してから、考えて質問すべきと思う。
    • good
    • 0
この回答へのお礼

早々のご忠告ありがとうございました。
ご拝察のとおり、関数の一部しかまだ分からない初心者です。
私の判る範囲で出来る方法をご案内くださった3さまのお力添えで3万ほどの一覧を出すことが出来ました。
ご心配いただきありがとうございます。

OKWaveさんは、VBAプログラマー程度の知識がある方でないと質問すべきではない場所、とのご指摘ありがとうございます。
今後は、過去ログの知識レベルを参考にしてから質問させていただきますね。

お礼日時:2011/11/02 22:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

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

Excelについて全くの初心者で、教えて頂きたい質問があります。

Excelの文字列の全通りの組み合わせを出力がしたいのですが、その方法が分かりません。
例えばセルAに
・りんご
・みかん
・いちご

セルBに
・だいこん
・キャベツ
・トマト

があり、別のセルにその全通りの組み合わせを出力
(文字と文字の間はスペース)

りんご だいこん
りんご キャベツ
りんご トマト
みかん だいこん
みかん キャベツ
みかん トマト
いちご だいこん
いちご キャベツ
いちご トマト

この様に出来る方法はあるでしょうか?
また出来ればその裏(だいこん りんご)も出力したいと考えており、キーワードは3つまで出来るようになりたいです。

どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行からB列最終行まで繰り返し
x = x + 1
Cells(x, "C") = Cells(i, "A") & " " & Cells(n, "B") 'C列に結合して転記
Next n
Next i
End Sub

3.Alt+F11キーでワークシートへもどります.

4.メニューから、ツール、マクロ、マクロで出てきたマクロ名(test01)を選択して実行

これでできます。
これがわかれば「裏」というのも簡単ですよね。
以上はVBAでの回答ですが、外していたらごめんなさい。

A列B列は1行目からデータがあるものとします。
C列に転記するものとします。

以下の手順をおためしください。

1.Altキー+F11キーでVisualBasicEditorを呼び出します。

2.メニューから挿入、標準モジュールで出てきたコードウィンド(右側の白い広い部分)に以下のコードをコピペします。

Sub test01()
a = Cells(Rows.Count, "A").End(xlUp).Row 'A列最終行取得
b = Cells(Rows.Count, "B").End(xlUp).Row 'B列最終行取得
For i = 1 To a '1行からA列最終行まで繰り返し
For n = 1 To b '1行...続きを読む

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

Excelでデータ全通り組み合わせ出力方法について教えて頂けますと助かります。

セルA~Eに、数がまちまちのアイテム名が入っています。
(セルA~Eというのは例で、変則的に全てのアイテム数は増減します。)

全ての組合せをセルG~Kに各々書き出してくれる方法はあるでしょうか?
(イメージ添付あり)

できればセルに入力すれば自動的に組合せが追加されていくのが理想です。
Excel2010を使用しており、VBAは初心者です。


どなたかご存じでしたら、ぜひお教え下さい。
よろしくお願いします。

Aベストアンサー

#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

#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
...続きを読む

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

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

次の条件のような場合、Excelですべての組合せ(重複組合せ)をVBAで出力するにはどうしたらいいのでしょうか?

10種類のお菓子の中から、好きなものを3個選んでセットにするとします。
同じものを複数選ぶのはありですが「菓子A、菓子B、菓子C」と「菓子B、菓子C、菓子A」は選んだ順が違うだけで同じ組合せなので、どちらか片方だけにします。

この場合、すべての組合せの数は Excelの関数で求めることができるようで COMBIN(10+3-1,3) = 220 通りあることまではわかりましたが、このすべての組合せの一覧をどのようにして出力したらいいのかがわかりません。

いろいろ検索した結果、順列という方法は見つかりましたが、重複組合せでの方法は見つけることができませんでした。
また、Accessを使っても似たようなことができるのでしょうか? 直積?

できれば、3個固定ではなく5個の場合も出来るとうれしいです。
よろしくお願いします。

Aベストアンサー

>同じものを複数選ぶのはありですが「菓子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

>同じものを複数選ぶのはありですが「菓子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
       ...続きを読む

Q「○○通りのパターンがある」の計算のしかた

よくこの組み合わせは全部で1万通りのパターンが存在するというようなことを聞きますが、
あれの方程式などはあるのでしょうか。

以下の例で説明をお願いします。

1. [a,b,c]の3つだけの文字列を作った時のパターン数
2. 英数字のみのパスワード4桁のパターン数
3. [a,b,c,d,e,f,g]の中から4文字をつかった文字列のパターン数。

Aベストアンサー

ちゃんと中学で確率を勉強しましたか?
方程式というか中学生で習う確率の授業をちゃんとやればわかります。難しいとこは
全くなく基本です。

(1)(a.b.c)の3つだけの文字列を作った時のパターン数

▼3つだけを使うので同じものは2回使えない
▽最初にa.b.cの3つのうちのひとつが選べる
▽次に最初に選んだもの以外の2つのうちのひとつが選べる
▽最後に1つ残る

従って
3×2×1=6

で答えは6通り

▽検証
下記がその6通り
a.b.c
a.c.b
b.a.c
b.c.a
c.a.b
c.b.a

(2)英数字のみのパスワード4桁

アルファベットは26文字
数字は10種類

▼同じ英数字を二度使ってもかまわないので

選べる英数字は毎回36通り

ここから4桁を選ぶのだから

36×36×36×36=1679616

1679616通り

(3)(a.b.c.d.e.f.g)の中から4文字を使った文字列のパターン

▼同じ文字を二度使わない場合
▽最初は7つ選べる
▽二回目は6つから選べる
▽三回目は5つから選べる
▽四回目は4つから選べる

7×6×5×4=840

840通り

ちなみに
▼同じ文字を二度使ってもよい場合なら
▽毎回7つから選択できる

7×7×7×7=2401

2401通り

ちゃんと中学で確率を勉強しましたか?
方程式というか中学生で習う確率の授業をちゃんとやればわかります。難しいとこは
全くなく基本です。

(1)(a.b.c)の3つだけの文字列を作った時のパターン数

▼3つだけを使うので同じものは2回使えない
▽最初にa.b.cの3つのうちのひとつが選べる
▽次に最初に選んだもの以外の2つのうちのひとつが選べる
▽最後に1つ残る

従って
3×2×1=6

で答えは6通り

▽検証
下記がその6通り
a.b.c
a.c.b
b.a.c
b.c.a
c.a.b
c.b.a

(2)英数字のみの...続きを読む

Qエクセルで順列の列挙

例えば
1 と 2 という2個の数字(文字)がある場合,

 A列 B列
  1   2
  2   1

1 2 3 という3個の数字(文字)がある場合,

 A列 B列 C列
  1   2   3
  1   3   2
  2   1   3
  2   3   1
  3   1   2
  3   2   1

1 2 3 4 という4個の数字(文字)がある場合,

 A列 B列 C列 D列
  1   2   3   4
  1   2   4   3
   ~ 省略 ~
  4   3   2   1

という具合に n 個の数字(文字)がある場合,過不足無く列挙させるマクロ(VBA)を教えてください。
Excelの仕様上65,536行までしかないので,「8個の場合」とかいう限定された個数でもかまいません。
また,123,132,213,…,321 という具合に数値として1列に並べる方法でもかまいません。
また昇り順でなくてもかまいません。 よろしくおねがいします。

Aベストアンサー

こんにちは。

学校の宿題とかではありませんよね。
以下は、再帰を使った、順列生成のアルゴリズムです。
たぶん、大丈夫だと思います。後は、65536を超えないようにしてください。

Const N As Integer = 3 '生成する順列数
Dim k As Long
Dim p(1 To N)
Sub perm_test()
 Dim i As Long
 ActiveSheet.Cells.ClearContents
 k = 0
 For i = 1 To N
  p(i) = i
 Next i
 perm 1
End Sub
Private Sub perm(i As Long)
 Dim j As Long, t As Long
 If i < N Then
  For j = i To N
   t = p(i): p(i) = p(j): p(j) = t
   perm i + 1
   t = p(i): p(i) = p(j): p(j) = t
  Next j
 Else
   For j = 1 To N
    Cells(k + 1, j).Value = p(j)
   Next j
   k = k + 1
 End If
End Sub

こんにちは。

学校の宿題とかではありませんよね。
以下は、再帰を使った、順列生成のアルゴリズムです。
たぶん、大丈夫だと思います。後は、65536を超えないようにしてください。

Const N As Integer = 3 '生成する順列数
Dim k As Long
Dim p(1 To N)
Sub perm_test()
 Dim i As Long
 ActiveSheet.Cells.ClearContents
 k = 0
 For i = 1 To N
  p(i) = i
 Next i
 perm 1
End Sub
Private Sub perm(i As Long)
 Dim j As Long, t As Long
 If i < N Then
  For j = i To N...続きを読む

Qエクセルでの組み合わせ出力方法(計算含む)

エクセルの初心者です。
エクセルで作成した数字の表を利用して、その表の中の任意の数字の組み合わせの合計が、ある数字ぴったりの組み合わせを探し出すにはどうすればいいでしょうか?表の数字は50くらいあります。

Aベストアンサー

ご希望の操作は、50個のセルに入力されている値の中からいくつかの数字を選択して、その数字の合計が特定の値になる組み合わせを探したいということでしょうか?

その場合はソルバーの機能を利用します。

たとえばA1からA50セルに任意の数字が入力されている場合、C1セルに「=SUMPRODUCT(A1:A50,B1:B50)」と入力しこのセルを選択しておき、「ツール」「ソルバー」(表示されない場合は「アドイン」からソルバーにチェックを入れます)から、目標値の「値」の欄にチェックを入れ、合計する目標数字を入力し、変化させるセルの欄は「B1:B50」セルを選択し、制約条件で「追加」ボタンを押し、左側の欄に「B1:B50」セル、真ん中を「データ」にして「OK」します。
条件を入力したら「キャンセル」して元のダイアログを表示して、「OK」します。

これで目標値が見つかりましたと表示された場合、B列に1と表示されているA列の数字の組み合わせが、求める組み合わせデータとなります。

QエクセルでnCr (組み合わせ)の作成方法

どなたかご存じでしたら回答願います。
ミニロトとロト6をエクセルを使用して予想に利用しております。
その中で知りたいのは、下記の場合のエクセルVBAのソースです。

●知りたいこと。

(1)ミニロトの場合は、31個から5個全てが一致すると一等ですが、
 「25個から5個選択した場合の組み合わせ(25C5)」作成方法

(2)ロト6の場合は、43個から6個全てが一致すると一等ですが、
 「24個から6個選択した場合の組み合わせ(24C6)」作成方法。

●入力

(1)ミニロトの場合は、下記のように5×5マスに重複しない数字が入っています。
  数字は毎回変わります。
  1   2 5 6 7
10 4 11 13 15
8 9 17 21 28
14 16 18 20 25
19 22 23 24 27

(2)ロト6の場合は、下記のように6×4マスに重複しない数字が入っています。
  数字は毎回変わります。

  1   2 5 6 7 19
10 4 11 13 5 22
8 9 17 21 28 23
14 16 18 20 25 24

●出力

  VBAを実行すると、新シートにそれぞれ、25C5又は、24C6の全組み合わせが出力される。

【注意事項】
   ・使用しているエクセルは2010です。

以上、ご回答よろしくお願いします。

どなたかご存じでしたら回答願います。
ミニロトとロト6をエクセルを使用して予想に利用しております。
その中で知りたいのは、下記の場合のエクセルVBAのソースです。

●知りたいこと。

(1)ミニロトの場合は、31個から5個全てが一致すると一等ですが、
 「25個から5個選択した場合の組み合わせ(25C5)」作成方法

(2)ロト6の場合は、43個から6個全てが一致すると一等ですが、
 「24個から6個選択した場合の組み合わせ(24C6)」作成方法。

●入力

(1)ミニロトの場合は、下記のように5×5マス...続きを読む

Aベストアンサー

過去のQ&A(参考URL)を参照なさってはいかがでしょう?

参考URL:http://oshiete.goo.ne.jp/qa/5571459.html

Qエクセル2007で総当り表を作りたいです。

エクセル2007で俗に言う総当り表を作りたいのですが、分からないことがあり作成が進みません。
あれこれ調べてみたのですが私自身関数が得意というわけでもなく…こちらで質問させていただきます。

画像のように

(1)2行目のデータを、関数・オートフィルを用いて2列目に並べなおす
(2)同一のデータ同士が当たらないように、斜めに線を(自動で)引く

という状態にしたいと考えています。
それぞれ、どのような設定・関数を用いればよいのでしょうか?

Aベストアンサー

こんばんは!
質問の操作に関しては関数云々というより、コツコツ手を動かして操作するしかないと思います。
(1)2行目データを範囲指定 → 右クリック → コピー
(2)A3セルを選択 → 右クリック → 形式を選択して貼り付け → 「行列を入れ替える」にチェックを入れOK
(3)Ctrlキーを押しながら斜線を入れたいセルを選択 → 右クリック → セルの書式設定 → 「罫線」タブで「右下がりの斜線」を選択しOK
(4)最後にA2セル~最終セルを選択 → 罫線の「格子」を選択しOK

こういった流れになると思います。

これを自動で!というコトであればVBAになってしまいますが、一例です。
表を作成したい元データはB2セルから列方向に並んでいるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面のカーソルが点滅しているところに
↓のコードをコピー&ペースト → Excel画面に戻りマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub Sample1() 'この行から
Dim j As Long, lastCol As Long
lastCol = Cells(2, Columns.Count).End(xlToLeft).Column
Range(Cells(2, "B"), Cells(2, lastCol)).Copy
Range("A3").PasteSpecial Paste:=xlPasteAll, Transpose:=True
For j = 2 To lastCol + 1
Cells(j, j - 1).Borders(xlDiagonalDown).LineStyle = xlContinuous
Next j
With Range("A2").CurrentRegion
.Borders.LineStyle = xlContinuous
.HorizontalAlignment = xlCenter
End With
End Sub 'この行まで

※ おそらく一度だけの操作になると思いますので、
わざわざマクロでやるよりご自身で手を動かした方が良いと思います。m(_ _)m

こんばんは!
質問の操作に関しては関数云々というより、コツコツ手を動かして操作するしかないと思います。
(1)2行目データを範囲指定 → 右クリック → コピー
(2)A3セルを選択 → 右クリック → 形式を選択して貼り付け → 「行列を入れ替える」にチェックを入れOK
(3)Ctrlキーを押しながら斜線を入れたいセルを選択 → 右クリック → セルの書式設定 → 「罫線」タブで「右下がりの斜線」を選択しOK
(4)最後にA2セル~最終セルを選択 → 罫線の「格子」を選択しOK

こういった流れになると思...続きを読む

QExcel 全通り組み合わせ

マクロ全通り組み合わせを作成しようとしています。
セルのA1から7までに
りんご
みかん
ばなな
ぶどう
すいか
めろん
いちご
の値があり、これをC列からI列に出力したいです。
値が全てブランク、ひとつだけ、ふたつだけといった形で全ての組み合わせを出したいです。

伝わりにくいかも知れませんが、よろしくお願いします。

Aベストアンサー

以下でどうなりますか

★ 部分を有効にすると、左詰め表示します


Public Sub Samp1()
  Dim vA As Variant, vB As Variant
  Dim i As Long, j As Long, k As Long, n As Long
  
  vA = WorksheetFunction.Transpose( _
    Range("A1", Cells(Rows.Count, "A").End(xlUp)))

  Application.ScreenUpdating = False
  With Range("C1").Resize(, UBound(vA))
    .EntireColumn.Clear
    k = 1
    For i = 1 To UBound(vA)
      ReDim vB(1 To UBound(vA))
      j = 1
      n = 0
      Do While (1)
        While (n < i)
          vB(j) = vA(j)
          j = j + 1
          n = n + 1
        Wend

        k = k + 1
        .Rows(k).Value = vB

        vB(j - 1) = Empty
        n = n - 1
        If ((UBound(vA) - j + 1) < (i - n)) Then
          j = j - 2
          Do While (j > 0)
            If (vB(j) <> "") Then
              vB(j) = Empty
              j = j + 1
              n = n - 1
              If ((UBound(vA) - j + 1) >= (i - n)) Then Exit Do
              j = j - 1
            End If
            j = j - 1
          Loop
          If (j < 1) Then Exit Do
        End If
      Loop
    Next

    With .Resize(k)
      .HorizontalAlignment = xlCenter
      .Borders.LineStyle = xlContinuous
      On Error Resume Next
'      .SpecialCells(xlCellTypeBlanks).Delete xlShiftToLeft ' ★
      .Columns.AutoFit
    End With
  End With
  Application.ScreenUpdating = True
End Sub

以下でどうなりますか

★ 部分を有効にすると、左詰め表示します


Public Sub Samp1()
  Dim vA As Variant, vB As Variant
  Dim i As Long, j As Long, k As Long, n As Long
  
  vA = WorksheetFunction.Transpose( _
    Range("A1", Cells(Rows.Count, "A").End(xlUp)))

  Application.ScreenUpdating = False
  With Range("C1").Resize(, UBound(vA))
    .EntireColumn.Clear
    k = 1
    For i = 1 To UBound(vA)
      ReDim vB(1 To UBound(vA))
      j...続きを読む

Q組み合わせパターンについて

質問です!

ExcelのA1からG1のセルに、1から7の数字が入力されています。
A1が1、B1が2・・・G1が7
そこから異なった5つを選びセットを作りたいです。
21通りあることが分かるのですが、全てのパターンをExcelで抽出したいです。

よろしくお願いします。

Aベストアンサー

No.2です!
補足に
>順不同でも同じ数字の組み合わせは表示されないようにしたいのです。
とありましたので・・・

「順列」を選択して実行されていませんか?

「組合せ」を選択 → 「標本セル範囲」をクリック → A1~G1を範囲指定 → 
「リスト開始セル」をクリック → 表示開始セルを選択 → 「抜き取り数」で「5」を選択 → 実行

これで重複なしで21種類のデータが表示されると思います。

これでもダメならごめんなさいね。m(_ _)m


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング