- ベストアンサー
組み合わせを実際に作成したい
8人を4人づつのA・B2組に振り分ける組み合わせは 70通りと計算では出たのですが、実際に組み合わせを 作成すると70通り出来ません。 エクセルで関数を使って実際の組み合わせを作成することは出来るのでしょうか。 もし、出来るのならば、やり方も教えていただければと思います。 宜しくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2です。 #NAME?がでましたか???どのセルに出たのでしょうか? もしかしたらバージョン違いで対応していない関数使っちゃいましたかね。 では、少しやり方を変えます。以下の関数なら大昔のExcelから有った と思いますので。。。(質問者さんのExcelの事言ってる訳じゃなくて、 私が大昔から使っているものでね) 以下、入力するセルと式です。そのまま書き込みをコピーしてペーストしてください。 A1 =INT(ROW(A1)/128) B1 =INT(MOD(ROW(B1),128)/64) C1 =INT(MOD(ROW(C1),64)/32) D1 =INT(MOD(ROW(D1),32)/16) E1 =INT(MOD(ROW(E1),16)/8) F1 =INT(MOD(ROW(F1),8)/4) G1 =INT(MOD(ROW(G1),4)/2) H1 =MOD(ROW(H1),2) I1 =SUM(A1:H1) A1-I1をコピーしてA2-I255までペースト 後はI列をオートフィルターに設定して4だけ表示してください。
その他の回答 (4)
- age_momo
- ベストアンサー率52% (327/622)
どうも補足は気付くのが遅れてしまいますね。すみません。 (メールとかに反映されないので。。。) >7人を4人と3人に分ける場合 I列の =SUM(A1:H1) を =SUM(B1:H1) に変更して4を集める。 >6人を3人と3人に分ける場合 I列の =SUM(A1:H1) を =SUM(C1:H1) に変更して3を集める。というところでしょうか。
お礼
何から何まで甘えまして、本当にありがとうございます。 よく分かりました。 今後の参考にさせていただきます。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#2>「#NAME?」と表示されます。 多分DEC2BIN だと思いますが、この関数を使うには分析ツールアドインを入れる必要があります。
補足
エクセルのツールを見てみましたが、確かに分析ツールには チェックが入っていませんでした。
- age_momo
- ベストアンサー率52% (327/622)
かなり邪道な方法なのですが、一応、リクエストにお答えして A1-A255までに1,2,3,・・・を入力(自動入力使うか、A1に1入れて A2以降には"=A1+1"を入力してください。) B1 =RIGHT("0000000"&DEC2BIN(A1),8) C1 =VALUE(MID($B2,COLUMN(A1),1)) C1をコピーしてD1-J1にペースト K1 =SUM(C1:J1) B1-K1をコピーしてB2-K255にペースト K列を『データ』⇒『フィルター』⇒『オートフィルター』 タブを押して4を選択 これで『0』と『1』それぞれ4つずつの組が70個出てきます。 最初はC,D,E,Fが0、G,H,I,Jが1ですね。 (入力はこの書き込みを直接コピーしてペーストしていいですよ)
補足
提示の通り、エクセルに打ち込みましたが 「#NAME?」と表示されます。 どうしてでしょうか?
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
関数でということなんですが、反って面倒くさそうなのでVBAでやってみました。 ---------------------------------------------------------------- '8個から4個とる組み合わせ 'ワークシート上には選んだ4つを表示(選ばれた組と選ばれなかった組で組み分けされたとします) Public Sub Sample() Dim data() Dim pos(8) As Integer Dim count As Integer Dim i As Integer Dim j As Integer Dim k As Integer Dim base As Range Dim rowPos As Long data = Array("Dummy", "A", "B", "C", "D", "E", "F", "G", "H") Set base = Range("A1") '表示先の基準位置 rowPos = 0 '行の相対的基準位置 '8ビットの数値からビットの立っている数を数えて4つだったらその4つが選ばれたことにする For i = 0 To 255 '8ビットの数の全てで count = 0: k = 1 'Kはマスク For j = 1 To 8 If i And k Then 'ビットが立っている count = count + 1 '立っているビットのカウント pos(count) = j ' 立っていたビットの場所の保存 End If k = k * 2 '次のビット Next If count = 4 Then 'ビットが4つ立っていた For j = 1 To count '保存しておいた位置からデータをシートへ転記する base.Offset(rowPos, j - 1).Value = data(pos(j)) Next rowPos = rowPos + 1 End If Next End Sub
お礼
ありがとうございます。 VBAは、良く分かりません。 しかし、一度チャレンジしてみます。
お礼
ありがとうございました。おかげさまで出来ました。 まったく、すばらしい出来でした。 このような計算式は、どこから思い浮かぶのでしょうか。 因みに「#NAME?」は、A列以外全てでした。
補足
ついでと言っては失礼ですが、もうひとつ。 7人を4人と3人に分ける場合 6人を3人と3人に分ける場合 なども、この計算式がつかえるのでしょうか? その場合は、どこをどのように変更すれば 良いのでしょうか。