• ベストアンサー

エクセル勤務表シフトの自動生成の作り方

お世話になります。 エクセルで勤務表を作り、日にちと曜日の方は月の数字を入力すると自動で変わる様に出来たのですが、シフトの方が月を入力して自動で変わるやり方が分かりません。 シフトはそれぞれ、BBAAで二日休みと言う形です。 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

お示しのデータがA1セルに4、C1セルから横に1,2,3・・と日付が、A3セルに田中、A4セルに鈴木、A5セルに和田が入力されて表示のようなシフトになっているとします。仮に4月におけるこのシフトの状態が基本となってその後の月のシフトが作られていくものとします。 初めに参考のために次の式をC8セルに入力して右横方向にオートフィルドラッグします。 =MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6) このデータが各人のシフトの式を考えるうえで参考になります。 田中のケースではC3セルには次の式を入力して右横方向にオートフィルドラッグします。 =IF(C$1="","",IF(OR(MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=1,MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=2),"B",IF(OR(MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=3,MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=4),"A",""))) 鈴木のケースではC4セルに次の式を入力して右横方向にオートフィルドラッグします。 =IF(C$1="","",IF(OR(MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=5,MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=0),"B",IF(OR(MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=1,MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=2),"A",""))) 和田のケースではC5セルに次の式を入力して右横方向にオートフィルドラッグします。 =IF(C$1="","",IF(OR(MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=3,MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=4),"B",IF(OR(MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=5,MOD(DATE(YEAR(TODAY()),$A$1,C$1)-DATE(2011,4,1),6)=0),"A",""))) 他の人のケースでも8行目に示されたMODの値を見ながら条件を設定すればよいでしょう。 これで4月のケースをシフトの元の条件としたときにA1セルに5、や6,7と入力することでその月のシフト表が表示されますね。

noname#130812
質問者

お礼

すみません。 A11セル4、C11セルから横に1.2.3・・・と日付が、A13セルに田中、A14セルに鈴木、A15セルに和田となっています。数式の数字を入れ替えればよいのでしょうか?出来ればご回答宜しくお願いいたします。 そして、大変ありがとうございました。

noname#130812
質問者

補足

御回答ありがとうございます。 早速入力致しオートフィルドラッグした所、各セルに ### と出てまいります。 何か設定が悪いのでしょうか? 教えて頂けたら幸いです。 宜しくお願い致します。

その他の回答 (2)

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

回答No2です。####が表示されるのはセルの幅よりも長い数値が入力されている場合や、または、結果画布になるような日付、時刻を計算している場合ですね。 MOD関数のみが使われていますので問題は無いように思われます。こちらが提案したとおりに新しいシートを使って試験してみてください。

noname#130812
質問者

お礼

大変ご丁寧にありがとうございました。 もう一度チャレンジしてみます。 失礼致します。

  • nattocurry
  • ベストアンサー率31% (587/1853)
回答No.1

B,B,A,A, , , という周期の初日の日付を【基準日付】とすると、以下の数式でシフトを求められます。 =CHOOSE(MOD(【当該日付】-【基準日付】,6)+1,"B","B","A","A","","") 田中さんの行が行3で、4月2日が列Dだとすると、 セルD4に =CHOOSE(MOD(DATE(2011,A1,E1)-DATE(2011,A1,$D1),6)+1,"B","B","A","A","","") と入力し、右にコピペすると、4月3日以降のシフトが求められます。 シフト表に書いてない過去の日付を使うと、4月1日に =CHOOSE(MOD(DATE(2011,4,C1)-DATE(2011,3,27),6)+1,"B","B","A","A","","") と書いて、右にコピペすると、すべての日付についてシフトを出せます。 人によって、基準日付が異なると思うので、人によって基準日を変えてください。

noname#130812
質問者

お礼

ありがとうございました。

関連するQ&A

専門家に質問してみよう