• ベストアンサー

エクセルVBA 条件付整数組合わせ表示方法

整数の組み合わせを表示する方法をおしえてください。 1~6の整数をつかって A<B<C かつ D<E<F となるような数字の組み合わせを A列 B列 C列 D列 E列 F列 1 2 3 4 5 6 1 2 4 3 5 6 ・ ・ ・ となるように順番に表示していくには どうすればよいのでしょうか?

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

Dim c Private Function check(str As String) As Boolean Dim b, e b = Mid(str, 2, 1) check = False If Mid(str, 1, 1) < b And b < Mid(str, 3, 1) Then e = Mid(str, 5, 1) If Mid(str, 4, 1) < e And e < Mid(str, 6, 1) Then check = True 'A<B<C AND D<E<F End If End If End Function Private Sub rp(ByVal result As String, ByVal selectList As String) Dim i, strLen As Integer, choice As String strLen = Len(selectList) If strLen = 1 Then If check(result & selectList) Then Range("A1").Offset(c).Value = result & selectList c = c + 1 End If Else For i = 1 To strLen choice = Mid(selectList, i, 1) Call rp(result & choice, Replace(selectList, choice, "")) Next End If End Sub Public Sub exec() c = 0 Call rp("", "123456") End Sub

taniyan777
質問者

お礼

すごい。の一言です。 このソースを勉強してみます。 ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

別の回答で使ったコードを再度使います。 Option Explicit Const N = 6 Dim k Dim p(N) Sub test_perm()  Dim i As Long  Range("a1").CurrentRegion.ClearContents  k = 0  For i = 1 To N   p(i) = i  Next i   perm 1 End Sub Private Sub perm(i As Variant)  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   If (p(1) < p(2) And p(2) < p(3)) _     And p(4) < p(5) And p(5) < p(6) Then    For j = 1 To N     Cells(k + 1, j) = p(j)    Next j    k = k + 1   End If  End If End Sub

taniyan777
質問者

お礼

ありがとうございます。 しばらくヘルプをひっぱりながら ソースを理解できるまでがんばってみます。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 こういうのは、アリですか?ナシですか? 1  5  6  2  3  4 4  5  6  1  2  3 条件からすれば、OK のような気がしますが?

taniyan777
質問者

補足

もちろんありです。 それができずにこまってます。

関連するQ&A

  • エクセルで組み合わせの集計方法

    またお世話になります。 例えば下記のようなデータがあるとします。  |B|C|D|E| ---------------------- 1|a|b|c|e| ---------------------- 2|b|c|a|e| ---------------------- 3|a|e|f|g| ---------------------- 4|b|f|e|a| ----------------------      :      : (データは下へ追加されていきます) 上記のデータを行毎に調べて、各値と最も多い組み合わせを調べるにはどうしたらよいでしょうか? 例えば「a」と最も多く組み合わせているのは、「e」となります。 あた「b」と多く組み合わせているのは、「e」となります。 このように各入力値ごとに、最も多く組み合わせているものを抽出するにはどのようにしたら良いでしょうか。 実際には文字ではなく数字を入力しています。 私が考えている方法は、すべての文字に対しての組み合わせ表を作成して、そこから最も多いそれぞれの組み合わせを求めるということですが、これではかなりの量の組み合わせデータを作成しなければならないことになります。 もっと簡単にできる方法はないかと思い、こちらに質問させて頂きました。 とても難しいような気がしますが、アドバイスをよろしく御願いします。 (エクセル98を使用しております。)

  • エクセルVBA 全ての組み合わせを作る

    エクセルVBAで、全ての組み合わせを表現する方法を教えてください 既にA列に色、B列に数字、C列にサイズが入力済みだとします   A  B  C 1  色  数字 サイズ ←タイトルの行 2  赤   1  S 3  青   2  M 4  緑   3  L (完成例)   D  E  F 1  色  数字 サイズ ←タイトルの行 2  赤   1  S 3  赤   1  M 4  赤   1  L 5  赤  2  S 6  赤  2  M 7  赤  2  L 8  赤  3  S 9  赤  3  M 10 赤  3  L 11 青   1  S 12 青   1  M 13 青   1  L 14 青  2  S 15 青  2  M 16 青  2  L 17 青  3  S 18 青  3  M 19 青  3  L 20 緑   1  S 21 緑   1  M 22 緑   1  L 23 緑  2  S 24 緑  2  M 25 緑  2  L 26 緑  3  S 27 緑  3  M 28 緑  3  L ・全ての組み合わせが表現できていれば、2~28行目は上の完成例の順番でなくてもいいです ・完成はD~F列の上から(2行目から)結果を反映させ、空白行を作らないようにする ・今回はA~C列の4行まで入力されている例をあげましたが、実際はA~C列の何行まで入力されているか随時変更します ・A~C列のデータ入力は、必ず上から(2行目から)されています ・A~C列のデータ入力は、5行目以降に続くこともあります ・A~C列のデータ入力は、データがない場合もあります (データ入力がない場合)   A  B  C 1  色  数字 サイズ ←タイトルの行 2      1  S 3      2  M 4         L (この場合の完成例)   D  E  F 1  色  数字 サイズ ←タイトルの行 2      1  S 3      1  M 4      1  L 5     2  S 6     2  M 7     2  L 空白行が出来てしまってはいけないので、『まずデータ入力されている列を認識し、認識した列の情報で全ての組み合わせを作成する』という考え方なのかな?と思ったのですが、そのようなことをエクセルVBAでできるのでしょうか もし分かる方がいたら教えてください よろしくお願いします

  • エクセル2003の条件式(?)で質問です。

    クリスマスのパーティーで全員参加のロトのようなくじを企画しています。 予め参加者に好きな5つの数字(1~30あたり)を申込用紙に記入してもらいます。 次にビンゴのように、無作為に選んだ数字の組み合わせと合っていれば賞品を贈呈します。 問題なのは賞品の兼ね合いで『はっきりとした順位付けをしたい』ということです。 つまりこちらで選ぶ数字(1つ目~5つ目)に5段階評価(a~e)で1つ目のaには5ポイント、 以下順に5つ目のeは1ポイントとし、同じ数字の組み合わせでも優劣を付けたいのです。 <例>1つめをa、2つ目をb、・・・5つ目をeとして  A列   B列   C列   D列   E列   F列   G列  H列  I列 1       a     b     c     d     e         a    13 2タロウ  10     3    5     27   18         b     5 4ハナコ  13    19   11      9    3         c    27   5                                      d     9 6                                      e     3 各自のポイントを集計するにはどのような関数式を入れれば良いか 教えていただけませんでしょうか。

  • エクセル関数(条件付sum)

    宜しくお願いします。    A   B   C    D理想形 1  A001  0   A     15 2  C001  10  C     60 3  B004  20  B     20 4  A002  0   A     0 5  C002  50  C     0 6  A003  10  A     0 7  D002  0   D     20 8  A004  5   A     0 9  D005  20  D     0 上記のようなリストがあり、A列にIDのようなもの、それぞれB列に数字を持っています。グループID別には既にC列に所得してあります。 B列の数字をCのグループごとに合算し、各グループの一番数字の少ない人(AでいうとA001、BではB004)のD列に表示したいです。 sumifでいけるかと思ったのですが・・・解りにくい説明でしたら補足させていただきますので御教授いただけますでしょうか。 宜しくお願いします。

  • エクセルで組みあわせについて教えて下さい。

    エクセル2000です。エクセルで組合せの合計をだしたいのですが、 A1 58 B1 13.5 C1 44.5 D1 51.5 E1 31 F1 49.4 G1 19.6 H1 41.5 J1 41 となっていて、その中から「292」に一番近い組合せを知りたいんですが、方法がありましたら教えて下さい。 上記の場合だったら 58、51.5、31、49.4、19.6、41.5、41 が292になるといった感じです。 292になるなら上記では7つ数字を使いましたが、5つでも6つでもいいです。ぴったりにならなくても近似値でもOKです。 宜しくお願いします。

  • excel 2つの条件(第三弾)

    http://okwave.jp/qa5057168.html の更に続きですが、    A   B   C  D  E   F  G 1  あ   3  22    4  15  ? 2  い   4  15    4  15  ? 3  う   2  10    4  10  ? 4  え   4  10 5  お   4  15 想定していなかった5行目を追加しました。 E1に=LARGE(B1:B5,1) E2に=LARGE(B1:B5,2) E3に=LARGE(B1:B5,3) F1とF2とF3に{=MOD(LARGE(B1:B5*(MAX(C1:C5)+1)+C1:C5,ROW(B1:B5)),MAX(C1:C5)+1)} G1に=INDEX($A$1:$A$5,SUMPRODUCT((B$1:B$5=E1)*(C$1:C$5=F1)*ROW(A$1:A$5)))を入れましたがB列とC列が同じ組み合わせがある場合ではエラーが出てしまいます。 G1に『い』、G2に『お』を表示させる事は可能でしょうか? 重ね重ね申し訳有りませんがわかる方おりましたらよろしくお願いします。

  • 組合せVBA

    環境はExcel2002です A列に連番数字1から100が入力されていて B列の100行には数字のデータがあるとします ある目的の数値Xに一番近くなるB列の組合せをC列に表示したいのです…VBAで B列に表示するのはA列の連番です 『一番近くなる』の意味は2通りあって、両方の算出方法をご教示願います (1)目的の数値Xを絶対超えないで目的の数値Xに一番近くなる組合せ (2)目的の数値Xを必ず超えて目的の数値Xに一番近くなる組合せ

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

    エクセルでシート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を組み込む方法は、これまでに経験があるので理解しております。 アドバイスを頂けると嬉しく思います。 何卒、よろしくお願い致します。

  • エクセル マクロ 組み合せ

    エクセルのマクロでa,b,c,d,e,f,g の2組合せ (7C2)の全組合せを洗い出して表示したいですが、、、、、、

  • エクセル セルの組み合わせ

    エクセル表の中で目的の数値になるセルの組み合わせを探したいです A列  B列に a  210 b  80 c  403 d  196 e  221 f  307 g  325 h  233 i  237 j  307 k  487 L  267 のようにあります。 これを組み合わせて980に近い組み合わせをいくつかさがしたいのですが、 どうしたらできるでしょうか。重複はできないのです。 ソルバーで挑戦しようと思いましたが、使い方がわかりません。 だれか教えてください。おねがいします。