電子書籍の厳選無料作品が豊富!

A〜Jまでの10人のスタッフが月曜日から金曜日の午前と午後の窓口当番を交代で行なう場合、以下の条件を満たす一か月分のシフト表の作成方法を教えてください。
①全員のシフトが出来るだけ均等になる。
②月曜日の午前と午後のシフトは均等にする。
③一人が連続して2日のシフトはない。
④全員の一か月分の月曜日から金曜日までの午前と午後のシフト回数が分かる表を作成する。
よろしくお願いします。

A 回答 (4件)

4通目/全4通 です。

 これで終了です。

(4)最後に、個人No.1~10をA~Jの各人の名前に置き換え、各人の午前,午後,トータルの担当回数を計算します。・・・これについては、大したプログラムではないので、『シフト組み 火~金曜日(乱数)』ボタンModule2 の最後に組み込んでいます。
「VBAでシフト表を作成する方法を教えてく」の回答画像4
    • good
    • 4

3通目/全4通 です。



(3)『シフト組み 火~金曜日(乱数)』ボタンModule2
  月曜日のみのシフト作成が終わったら、このプログラムを起動します。
①まず、第1週について、
 1回目の乱数で、第1週の候補者8人(下図で第1週/月曜日担当の9番と6番を除いた8人)の担当者から1人を選びます。これを順次合計8回繰り返すと、8人全員が特定され、最初の4人を火~金曜日の午前の担当者に張り付け、最後の4人を火~金曜日の午後の担当者に張り付けます。
②同じ作業を5週に亘って繰り返すと、5週全部の火~金曜日の午前、午後の担当者が決まります。
〔備考〕当然のことながら、『シフト組み 火~金曜日(乱数)』ボタンModule2 も何度でも起動できます。

(下図の例)下のほうのセルが赤くなったものは、第1週~第4週の処理を終えて、最後の第5週の計算結果を示しています。
 すなわち、第5週の月曜日の担当(3番,5番)を除いた8人について、
上から順番に、【9,8,2,4,10,7,6,1】が特定されています。
そして、最初に特定された4人(9,8,2,4)を第5週の火~金曜日の午前に張り付け、後の4人(10,7,6,1)を午後に張り付けています。
「VBAでシフト表を作成する方法を教えてく」の回答画像3
    • good
    • 0

2通目/全4通 です。



(2)月曜日のみのシフト作成・・・『シフト組み 月曜(乱数)』ボタンModule1
①For~next を使用するため、A~Jの人を整数番号1~10に当て嵌める。
②まず、1回目の乱数で、10人の担当者から1人を選び(下図で9番の人)、月曜日午前の担当とします。
③9番の人を除いた9人のメンバーで乱数を使い、次の人を選びます(下図で6番の人)。
④以下、順次、同じ作業を繰り返し、合計9回の作業で、5週間に亘った月曜日の全員の担当が決まります。 
⑤なお、I列だけでなく、N列にも、決定した月曜日の担当者の番号をコピーしておきます。
これは、同じ月曜日シフト担当構成(N列)の下で、『シフト組み 火~金曜日(乱数)』ボタンModule2 を何度も使って、火~金曜日のシフトのシミュレーションを繰り返し行う場合に必要です。
〔備考〕当然のことながら、『シフト組み 月曜(乱数)』ボタンModule1 も何度でも起動できます。
「VBAでシフト表を作成する方法を教えてく」の回答画像2
    • good
    • 1

課題として面白そうなので、挑戦してみました。


 まだ、回答者が付いていないようなので、投稿させていただきます。以下は、私個人の作成方法です。

【シフト表の作成方法について】
1.基本的な考え方
 ②の『月曜日の午前と午後のシフトは均等にする。』という意味について、月曜日の担当は、午前・午後は問わずに、各人が平等に負担する・・という意味と考えました。
 この場合、月曜日の設定を最優先するということになると思います。しかしこの場合、例えば、今年の各月の月曜日の数は、1月から12月まで順に、5,4,4,5,4,4,5,4,4,5,4,5日となっており、『一ヶ月分のシフト』毎にプログラムを作成しようとすると、月曜日が4回しかない月では、残り二人の担当者を次月に優先して割り当てなければならなくなります。
 この点を考慮するとプログラムがかなり複雑になると思われるので、各月にこだわらず、月曜日から始まる5週間分のシフトを作成することにしました。そうすると、一回のシミュレーションで10人全員が月曜日の担当に収まるので、プログラムはすっきりしたものになります。
 また、この方法を採れば、月曜日の担当者2名がまず決まるので、残り4日(火~金)の担当者が8人決まることになり、10名全員がその週の担当を一回は担当することになります。
 したがって、条件①の『全員のシフトが出来るだけ均等になる。』、並びに条件③の『一人が連続して2日のシフトはない。』も自動的に満たすことになります。但し、金曜日の担当と月曜日の担当は連続することがあり得ます。
 また、月曜日が祭日になる日は、正月休みを入れて、今年1年は9日ありますが、その日が担当になった人は、“ラッキー”という扱いで納得して貰えるとします。

 文面からすると質問者様は、VBAを作っておられるんですよね。プログラムも貼り付けようと思ったのですが、思いつくままにフィーリングで作成しましたので、for~next文の整理・集約をしておらずプログラム行数が約500行と多く、「作成方法を教えてください。」とのことですので、アルゴリズムの説明のみとさせていただきます。

以上、ご参考になさってください。

2.アルゴリズムの手順
(1)初期画面
初期画面では、各セルに以下のような記述をしておきます。 

【※注】 図が4つあるので、分割してお送りします。
「VBAでシフト表を作成する方法を教えてく」の回答画像1
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!