[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『3つのグループに振り分けたい』(カンポウ)
お世話になります。
現在、個人の力量を数値化(0〜100)して管理しています。
3つのグループに振り分けたときに、個人の力量を合計した値が
なるべく均等になるように振り分けることは可能でしょうか。
日によってグループ分けをする人数(10〜20)が違います。
たとえば
Aグループ
佐藤50+鈴木50=100
Bグループ
田中10+村上10+山下90=110
Cグループ
小林70+相川35=105
上記のように振り分けることは可能でしょうか。
結果が複数通り発生することが考えられますが
一覧表みたいに表記できれば視覚的にわかりやすくて助かります。
(フォーマット等は決まっておりません)
< 使用 Excel:Excel2007、使用 OS:Windows7 >
最適化問題ってやつで、人数が増えるにつれ計算量がとんでもないことになります。 [[20150116160046]]
こちらで似たような回答したので参考にしてください。
質問とは関係ないのですが 90点と10点の組み合わせと 50点と50点の組み合わせだと どうしても後者のほうが優秀だと思うのですが・・・ (稲葉) 2015/04/06(月) 08:27
Sub test() Dim i As Long Dim iC As Long Dim iR As Long
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row iR = Fix((i + 2) / 3) + 1 iC = ((i + 2) Mod 3) * 2 + 4 Cells(iR, iC).Value = Cells(i, "A").Value Cells(iR, iC + 1).Value = Cells(i, "B").Value Next i
For i = 5 To 9 Step 2 Cells(1, i).FormulaR1C1 = "=SUM(R2C:R" & iR & "C)" Next i End Sub (???) 2015/04/06(月) 09:12
A列に名前、B列に得点があるとして、
作業列Cに、
C1=IFERROR(COUNTIF($B$1:$B1,$B1)-1+RANK(B1,OFFSET($B$1,,,COUNT($B:$B)),0),"")
これでランキングを求めます。同じ点数の場合下の行のものに1が足され、さらに下にはさらに1が足される方式のため、人数分の整数がすべて使われることになるはずです
チーム1の人名をE列、得点をF列、順位をG列
チーム2の人名をH列、得点をI列、順位をJ列
チーム3の人名をK列、得点をL列、順位をM列
とした場合に、
G1=IF(COUNT($C:$C)<1+(ROW(G1)-ROW($G$1))*3+(COLUMN(G1)-COLUMN($G$1))/3,"",1+(ROW(G1)-ROW($G$1))*3+(COLUMN(G1)-COLUMN($G$1))/3)
J1=IF(COUNT($C:$C)<1+(ROW(J1)-ROW($G$1))*3+(COLUMN(J1)-COLUMN($G$1))/3,"",1+(ROW(J1)-ROW($G$1))*3+(COLUMN(J1)-COLUMN($G$1))/3)
M1=IF(COUNT($C:$C)<1+(ROW(M1)-ROW($G$1))*3+(COLUMN(M1)-COLUMN($G$1))/3,"",1+(ROW(M1)-ROW($G$1))*3+(COLUMN(M1)-COLUMN($G$1))/3)
G2=IF(COUNT($C:$C)<1+(ROW(G2)-ROW($G$1))*3+(COLUMN($M$1)-COLUMN(G1))/3,"",1+(ROW(G2)-ROW($G$1))*3+(COLUMN($M$1)-COLUMN(G1))/3)
J2=IF(COUNT($C:$C)<1+(ROW(J2)-ROW($G$1))*3+(COLUMN($M$1)-COLUMN(J1))/3,"",1+(ROW(J2)-ROW($G$1))*3+(COLUMN($M$1)-COLUMN(J1))/3)
M2=IF(COUNT($C:$C)<1+(ROW(M2)-ROW($G$1))*3+(COLUMN($M$1)-COLUMN(M1))/3,"",1+(ROW(M2)-ROW($G$1))*3+(COLUMN($M$1)-COLUMN(M1))/3)
G1:M2をドラッグして、下方向にオートフィル
E1=IFERROR(OFFSET($A$1,MATCH(G1,OFFSET($C$1,,,COUNT($C:$C)),0)-1,),"")
F1=IFERROR(OFFSET($B$1,MATCH(G1,OFFSET($C$1,,,COUNT($C:$C)),0)-1,),"")
E1:F1をドラッグして、下方向にオートフィル
オートフィルしたものをコピーして、
H列I列とK列L列にコピペ
これで順位が高い人がある程度均等に分かれてなおかつ、全体の点数がある程度近くなるという表になるかと思います。
人数をある程度そろえる方がいい場合なら利用可能かと。
(安針) 2015/04/07(火) 01:33
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.