過去に3回手を出して、調査段階で諦めました←
グループ分けの行き着く先はシフト作成です。
これはナーススケジューリング問題というやつで
現在でも難しい問題とされ専門の会社があるくらいです。 (AIは活躍してるのでしょうか)
動けばいい我々に取っては一番敷居が高いので
そっとしておくのが吉。
叩き台の作成くらいは簡単ですが、
大抵それは手作業でやってもあんまり変わらないです。
などといいつつ、他所様のネタを拝借しての
派生問題。
元のお題は部屋割りだそうな。
こんな要件は多分ほとんど無いのでおいといて
(ありそうなのは部屋数を少なく振り分け、とか、 別に成績のデータがあって部屋ごとの平均をおんなじくらいにしたいとか)
出力結果に着目。
簡単に言うと
部屋番号:定員
201:2
202:3
301:2
こういうデータを
201 201 202 202 301 301 301
定員の数分だけ掛け算したデータを一列に並べてるだけです。
こういうところにサクッと気づいてほしいところです。
めんどいのでdebug.printです。
これ実行すると
Sub 個数分並べる() Dim r r = Range("A2:B7") Dim col As New Collection Dim i, k For i = 1 To UBound(r) For k = 1 To r(i, 2) col.Add r(i, 1) Debug.Print r(i, 1), k Next Next End Sub
こういう風に部屋番号の並び順で出力されます。
201 1
201 2
201 3
201 4
201 5
202 1
202 2
203 1
203 2
301 1
301 2
301 3
302 1
302 2
303 1
303 2
303 3
303 4
303 5
201
202
203 ...
みたいに部屋を周回したい場合は→にある
数字で昇順するとオッケーです。
並べ替えようとデータを他に持たせておくと後で楽
というお話でした。
だってソート苦手なんだもん!