- ベストアンサー
エクセル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 ・ ・ ・ となるように順番に表示していくには どうすればよいのでしょうか?
- taniyan777
- お礼率45% (11/24)
- Visual Basic
- 回答数3
- ありがとう数2
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
別の回答で使ったコードを再度使います。 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
お礼
ありがとうございます。 しばらくヘルプをひっぱりながら ソースを理解できるまでがんばってみます。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 こういうのは、アリですか?ナシですか? 1 5 6 2 3 4 4 5 6 1 2 3 条件からすれば、OK のような気がしますが?
補足
もちろんありです。 それができずにこまってます。
関連する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でできるのでしょうか もし分かる方がいたら教えてください よろしくお願いします
- 締切済み
- Excel(エクセル)
- エクセル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に『お』を表示させる事は可能でしょうか? 重ね重ね申し訳有りませんがわかる方おりましたらよろしくお願いします。
- 締切済み
- オフィス系ソフト
- エクセルで組み合せ一覧表を作成したいです
エクセルでシート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列に 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に近い組み合わせをいくつかさがしたいのですが、 どうしたらできるでしょうか。重複はできないのです。 ソルバーで挑戦しようと思いましたが、使い方がわかりません。 だれか教えてください。おねがいします。
- ベストアンサー
- オフィス系ソフト
お礼
すごい。の一言です。 このソースを勉強してみます。 ありがとうございました。