[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『重複しないグループ分け』(きたみ)
1.1〜24の数値を6つのグループに分け(最初はベタ打ちでかまいません) 2.その後1回目に同じグループにいた数字同士が重ならないようにグループ分けをして 3.1回目と2回目に同じグループにいた数字同士が重ならないようグループ分け 4.1、2、3回目に同じグループにいた数字同士が重ならないようグループ分け ということは可能でしょうか 取っ掛かりすらわからず困っていますどなたかお助けください
G1に =RAND() としてG24までフィルダウン
A B C D E F G 1 Aグループ Bグループ Cグループ Dグループ Eグループ Fグループ =RAND() 2 ↓ 3 4
グループ名が横でしたら A2=MATCH(SMALL($G$1:$G$24,ROW(A1)+4*(COLUMN(A1)-1)),$G$1:$G$24,0) F2までオートフィルして、A2:B2をフィルダウン
A B C D E 1 Aグループ 2 Bグループ 3 Cグループ 4 Dグループ 5 Eグループ 6 Fグループ
グループ名が縦でしたら B1=MATCH(SMALL($G$1:$G$24,ROW(A1)+6*(COLUMN(A1)-1)),$G$1:$G$24,0) E1までオートフィルして、B1:E1をフィルダウン
などでいかがでしょう。。。(gon-2)
1回目
A B C D E F 1 1 5 9 13 17 21 2 2 6 10 14 18 22 3 3 7 11 15 19 23 4 4 8 12 16 20 24 2回目 A B C D E F 6 1 2 3 4 5 6 7 7 8 9 10 11 12 8 13 14 15 16 17 18 9 19 20 21 22 23 24 3回目 ・・・ 4回目 ・・・ のようにしたいんです。 そもそも4回シャッフルして重ならないようにできるかすらわかりません 4回実験を行う際に同じ生徒どうしが同じグループにしたくないんです。 よろしくお願いします。(きたみ)
こんにちは。 > 4回シャッフルして重ならないようにできるか 結論から書くと、可能でした。 下の表の、H〜M列の6列に含まれる、5つのブロックが回答です。 (2ブロック以降は、1〜6を省略しています) かなりノープランで作ったので、数式も小刻みなものになってしまいましたが。 (コタ)
大まかな考え方としては、 ・番号1〜6をグループ固定とする(例えば1番のいるグループがグループ1) ・そうすると、残りの18人(7〜24)の振り分けになる ・各グループ内での順番も関係ないので、それぞれのグループでの番号順位毎に「組」として考える (1組:7〜12、2組:13〜18、3組:19〜24) ・重複しないためには、各組内でグループをシフト移動すればいい (2行目の7〜12を、6行目では1つ右にシフトして、12,7〜11としている このとき、7番は1グループから2グループに移るので、N列の「移動」を2と定義する) ・全組の移動先を変えてやれば、全てのグループで重複しない (6〜8行目では、1組を2で移動、2組を3で、3組を4で移動している) ・このような考え方で移動パターンを決めていくと、N列の 234 325 452 543 の4パターンなら、お互い重複しない(縦で見ても重複していない)ことが分かります。 ※↑これは結果からの判断で、途中までは、O〜X列を使って、使用済番号を外したりして 作っていました(実はO〜X列は不要だったということですね)。
※「_」セルは未入力または"" [R/C] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [1] 組 OK OK OK OK OK OK 1 2 3 4 5 6 移動 使 用 可 番 号 使 用 済 番 号 [2] 1 7 8 9 10 11 12 7 8 9 10 11 12 _ _ _ _ _ _ 2 3 4 5 6 [3] 2 13 14 15 16 17 18 13 14 15 16 17 18 _ _ _ _ _ _ 2 3 4 5 6 [4] 3 19 20 21 22 23 24 19 20 21 22 23 24 _ _ _ _ _ _ 2 3 4 5 6 [5] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [6] 1 12 7 8 9 10 11 12 7 8 9 10 11 2 2 3 4 5 6 x 3 4 5 6 [7] 2 17 18 13 14 15 16 17 18 13 14 15 16 3 x 3 4 5 6 2 x 4 5 6 [8] 3 22 23 24 19 20 21 22 23 24 19 20 21 4 x x 4 5 6 2 3 x 5 6 [9] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [10] 1 11 12 7 8 9 10 11 12 7 8 9 10 3 x 3 4 5 6 x x 4 5 6 [11] 2 18 13 14 15 16 17 18 13 14 15 16 17 2 2 x 4 5 6 x x 4 5 6 [12] 3 21 22 23 24 19 20 21 22 23 24 19 20 5 x x x 5 6 2 3 x x 6 [13] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [14] 1 10 11 12 7 8 9 10 11 12 7 8 9 4 x x 4 5 6 x x x 5 6 [15] 2 15 16 17 18 13 14 15 16 17 18 13 14 5 x x x 5 6 x x 4 x 6 [16] 3 24 19 20 21 22 23 24 19 20 21 22 23 2 2 3 x x 6 x 3 x x 6 [17] _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [18] 1 9 10 11 12 7 8 9 10 11 12 7 8 5 x x x 5 6 x x x x 6 [19] 2 16 17 18 13 14 15 16 17 18 13 14 15 4 x x 4 x 6 x x x x 6 [20] 3 23 24 19 20 21 22 23 24 19 20 21 22 3 x 3 x x 6 x x x x 6
☆1ブロック目 B1 =IF(SUMPRODUCT((COUNTIF(H1:H30,H1:H30)>1)*1)=0,"OK","NG") →B1:G1フィルコピー H1 : 入力(H1:M1の範囲内) A2 : 入力(A2:A4の範囲内) B2 =H2 →B2:G4フィルコピー H2 =M1+1 →H2:M4フィルコピー T2 =I$1 →T2:X4フィルコピー
☆2ブロック目〜 A6 : 入力(A6:A8の範囲内) B6 =H6 →B6:G8フィルコピー H6 =OFFSET(H$2,,1-$N6) →H6:M8フィルコピー N6 =MIN($O6:$S6) →N6:N8フィルコピー O6 =T2 →O6:S6フィルコピー O7 =IF($N6=T3,"x",T3) →O7:S7フィルコピー O8 =IF(OR($N6=T4,$N7=T4),"x",T4) →O8:S8フィルコピー T6 =IF($N6=T2,"x",T2) →T6:X8フィルコピー ※H6:M8を選択後、条件付書式「数式が」=MOD(H6,6)=1 を設定しておくと移動状況がみやすい 以下、2ブロック目(A6:X8)を1行ずつ空けてコピペ
連投で失礼します。 2点ありまして、1点目は上の回答の訂正です。
☆2ブロック目〜 H6 =OFFSET(H$2,,1-$N6) →H6:M8フィルコピー の箇所ですが、各行で数式を変えないといけませんでしたので、 H6 =OFFSET(H$2,,1-$N6) →H6:M6フィルコピー H7 =OFFSET(H$3,,1-$N7) →H7:M7フィルコピー H8 =OFFSET(H$4,,1-$N8) →H8:M8フィルコピー と訂正します。失礼しました。
2点目ですが、ごめんなさい、実は重なっていました。 [R/C] [A] [I] [J] [N] [1] 組 2 3 移動 [6] 1 7 8 2 [7] 2 18 13 3 [8] 3 23 24 4 [9] _ _ _ _ [10] 1 12 7 3 [11] 2 13 14 2 [12] 3 22 23 5 2グループ(I列)の7・23が、3グループ(J列)でも現れています。 原因は、1組と3組の移動の差が、上は2と4で差2、下も3と5で差2と同じになっているので、 相対的な移動量が変わらないためです。
もう少し考えてみますが、なんとなく不可能が気がしてきました。。 (コタ)
こんにちは。 だいぶ間が空いてしまいましたが、結果が出ました。 また結論から書くと(今度はミスってないといいですが^^;)、可能でした。 下の表の、A〜F列の6列に含まれる、5つのブロックが回答です。 (コタ)
※「_」セルは未入力または"" [R/C] [A] [B] [C] [D] [E] [F] [G] [H] [I] [J] [K] [L] [M] [N] [O] [P] [Q] [R] [S] [T] [U] [V] [W] [X] [Y] [Z] [AA] [AB] [AC] [AD] [AE] [AF] [1] 1 5 9 13 17 21 _ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 [2] 2 6 10 14 18 22 _ 1 _ 1 1 1 2 3 4 5 2 4 3 _ 2 5 4 3 _ _ _ 5 _ _ _ _ [3] 3 7 11 15 19 23 _ 2 _ _ 1 1 3 2 5 4 4 2 _ 3 5 2 3 4 _ _ 5 _ _ _ _ _ [4] 4 8 12 16 20 24 _ 3 _ _ _ 1 4 5 2 3 _ _ _ 5 _ _ _ _ 2 4 3 _ 2 5 4 3 [5] _ _ _ _ _ _ _ 4 _ _ _ _ 5 4 3 2 _ _ 5 _ _ _ _ _ 4 2 _ 3 5 2 3 4 [6] 1 2 3 4 11 12 _ 5 _ _ _ _ _ 1 1 1 2 _ 5 3 2 _ 3 _ _ 4 _ _ 5 _ 4 _ [7] 5 6 7 8 15 16 _ 6 _ _ _ _ _ _ 1 1 _ 2 3 5 _ 2 _ 3 4 _ _ _ _ 5 _ 4 [8] 9 10 17 18 19 20 _ 7 _ _ _ _ _ _ _ 1 _ 4 _ _ 5 _ 4 _ 2 _ 5 3 2 _ 3 _ [9] 13 14 21 22 23 24 _ 8 _ _ _ _ _ _ _ _ 4 _ _ _ _ 5 _ 4 _ 2 3 5 _ 2 _ 3 [10] _ _ _ _ _ _ _ 9 _ _ _ _ _ _ _ _ _ 1 1 1 2 3 5 4 3 5 _ _ _ 3 _ 5 [11] 1 2 3 4 9 10 _ 10 _ _ _ _ _ _ _ _ _ _ 1 1 3 2 4 5 5 3 _ _ 3 _ 5 _ [12] 6 5 8 7 14 13 _ 11 _ _ _ _ _ _ _ _ _ _ _ 1 4 _ 2 3 _ _ 2 4 5 4 2 _ [13] 11 12 19 20 17 18 _ 12 _ _ _ _ _ _ _ _ _ _ _ _ _ 4 3 2 _ _ 4 2 4 5 _ 2 [14] 16 15 24 23 22 21 _ 13 _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 1 _ 3 5 4 3 4 _ _ [15] _ _ _ _ _ _ _ 14 _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 3 _ 4 5 4 3 _ _ [16] 1 2 3 4 11 12 _ 15 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 _ 5 2 _ _ _ 2 5 [17] 7 8 5 6 13 14 _ 16 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 5 _ _ 2 _ _ 5 2 [18] 10 9 18 17 20 19 _ 17 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 1 2 3 5 4 [19] 15 16 23 24 22 21 _ 18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 3 2 4 5 [20] _ _ _ _ _ _ _ 19 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 4 _ 2 3 [21] 1 2 3 4 9 10 _ 20 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 4 3 2 [22] 8 7 6 5 15 16 _ 21 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 1 [23] 14 13 12 11 18 17 _ 22 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 1 [24] 20 19 22 21 24 23 _ 23 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 1 [25] _ _ _ _ _ _ _ 24 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [26] _ _ _ _ _ _ _ 組 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [27] _ _ _ _ _ _ _ 1 36 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [28] _ _ _ _ _ _ _ 2 36 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [29] _ _ _ _ _ _ _ 3 36 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [30] _ _ _ _ _ _ _ 4 36 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ [31] _ _ _ _ _ _ _ 5 36 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
右側の24×24表は、2つ数値ペアが、同グループになっているかどうかを調べたものです。 ・例えば1と2は、1組目の1グループでペアになっているので、J2セル(縦が1で横が2)が1となり、 ・4と5は、5組目の4グループでペアになっているので、M5セル(縦が4で横が5)が1となっています。 同様にペアになっている数値について、全てうめていった結果、各組のペア数がそれぞれ36ずつと なりました(H27:I31)。 1つの組から作られるペアの数は、(3+2+1)×6=36なので、このことから各組どうしでも重複して いないことが分かります。 (長くなったので分割します)
(続き) ところで、上の組合せはマクロで作成しましたので、一応コードを挙げておきます。 動かすと5分以上かかりますし、再帰的に組んでいるので非常に分かりにくいですが、もし試すなら ・新規ブックの標準モジュールに以下のコードをコピペして、 ・Test1を実行 してみてください。 なお、このコードでは、6組目が作成できませんが、5組がMAXかどうかは分かりません。 ペア数上限(276=COMBIN(24,2))から考えると、276÷36=7.66なので、8組以上は不可能とは言えますが。
【Module1】標準モジュール Option Explicit Dim v, pea, use ' Sub test1() Dim L As Long, flg As Long Dim r As Range With ActiveSheet .Rows(1).ColumnWidth = 2 Set r = .Range("A1:F4") .Cells.ClearContents End With v = r.Value ReDim pea(1 To 24, 1 To 24) '移動 Do flg = 0 ReDim use(1 To 24) v = r.Offset(L * 5).Value v(1, 1) = 1 use(1) = 1 Call NumIdo(v, pea, use, 2, flg) Application.StatusBar = False If flg = 0 Then Exit Do r.Offset(L * 5).Value = v L = L + 1 Loop Call peaPut End End Sub ' Private Sub NumIdo(ByVal v2, ByVal pea2, ByVal use2, _ ByRef h As Long, ByRef flg As Long) Dim i As Long, j As Long, k As Long, L As Long If h > 24 Then v = v2: pea = pea2: use = use2 flg = 1 '成功 Exit Sub End If i = (h - 1) Mod 4 + 1 j = (h - 1) \ 4 + 1 L = 2 If i > 1 Then L = v2(i - 1, j) + 1 'Grp内昇順 For k = L To 24 If use2(k) = 0 Then If peaCheck(v2, pea2, i, j, k) Then v2(i, j) = k use2(k) = 1 Call peaSet(v2, pea2, i, j, 1) Call NumIdo(v2, pea2, use2, h + 1, flg) If flg = 1 Then Exit Sub Else '失敗→元に戻す Call peaSet(v2, pea2, i, j, 0) v2(i, j) = 0 use2(k) = 0 End If End If End If Next End Sub ' Private Function peaCheck(ByRef v2, ByRef pea2, _ ByVal i As Long, ByVal j As Long, ByVal k As Long) As Boolean Dim L As Long, mn As Long, mx As Long peaCheck = True For L = i - 1 To 1 Step -1 mn = Application.Min(k, v2(L, j)) mx = Application.Max(k, v2(L, j)) If pea2(mn, mx) = 1 Then peaCheck = False Next End Function ' Private Sub peaSet(ByRef v2, ByRef pea2, _ ByVal i As Long, ByVal j As Long, ByVal b As Long) Dim L As Long, mn As Long, mx As Long For L = i - 1 To 1 Step -1 If v2(i, j) > 0 And v2(L, j) > 0 Then mn = Application.Min(v2(i, j), v2(L, j)) mx = Application.Max(v2(i, j), v2(L, j)) If pea2(mn, mx) = b Then Stop pea2(mn, mx) = b pea2(mn, mx) = b End If Next End Sub ' Sub peaPut() Dim i As Long, j As Long, L As Long Dim r As Range ReDim pea(1 To 24, 1 To 24) With ActiveSheet Set r = .Range("A1:F4") For L = 0 To .Range("A" & Rows.Count).End(xlUp).Row \ 5 For j = 1 To 6 For i = 1 To 4 Call peaSet(r.Offset(L * 5).Value, pea, i, j, L + 1) Next Next Next With .Range("H1") .CurrentRegion.ClearContents .Value = 0 .Resize(, 25).DataSeries .Resize(25).DataSeries .Offset(1, 1).Resize(24, 24).Value = pea End With With .Range("H26") .Value = "組" .Offset(1).Value = 1 .Offset(1).Resize(5).DataSeries .Offset(1, 1).Resize(5).Formula = "=COUNTIF(R2C9:R25C32,RC[-1])" End With End With End Sub
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.