• 締切済み

エクセルで作成した勤務表を週間勤務表に抽出したい

エクセルで作成した勤務表を元にして 週間勤務表(月~日)を作成したいのです。 現状はコピペで作業をしていますが可能であれば シートをファイルに貼り付ける事により自動計算で反映できるようにしたいと思います。 月初めは1日からですが曜日が都度変わるためそのための関数式が 分かりませんでした。 現在の勤務表は B6以降B欄には社員名 セルC3に月    C4に日    C5に曜日    C6以降はその日の勤務シフト(早、遅 等) 週間予定表は  A6以降A欄が社員名  G4が日  G5が曜日(固定)  G6以降がその社員の勤務シフト と表示したいので 19年8月の場合8/1が水曜日なので  I4に「1」  I6に「シフト」  のような表示が可能な関数式を探しております。 宜しくお願い致します。

みんなの回答

noname#79209
noname#79209
回答No.2

基本的に日付を扱いたい場合は、年、月、日を別々に扱うべきではありません。 「2007/8/1」と言うように入力すれば、エクセルが自動的に「シリアル値」という呼ばれる日付用数値に変換してくれます。 「シリアル値」にしておけば、「閏年」のチェックやその数値から「曜日」を正しく取り出すことができます。 いちいちカレンダーをチェックして曜日を手入力する必要が無くなります。 どうしても年、月、日を別のセルに入力した場合は、ご質問の例では、年がないので仮にA1に年が入っているとして、 C5に「=DATE($A$1,C$3,C$4)」とし、表示書式を「aaa」とすれば常に正しい曜日が表示されます。 もし一枚のシートがひと月分なら、 A1に今月なら「2007/8」と入力すると自動的に「2007/8/1」を表す「シリアル値」に変換されます。 次にA1の表示書式に「ggge年m月の勤務表」と設定すれば、A1に「平成19年8月の勤務表」と表示されます。 表題に「年月」が表示されているので3行目は使いません、 C4には「=DATE(YEAR($A$1),MONTH($A$1),1)」と入力 D4には「=C$4+1」と入力し,この式をE4~AD4へコピー。 AE4には「IF(DAY(AD$4+1)<4,AD$4+1,0」としてAF4とAG4へコピーします。 C4~AG4を選択し、表示書式に「d;;」と設定。 C5に「=C$4」と入力し、D5~AG5へコピした上で、C5~AG5の表示書式に「aaa;;」と設定します。 これで、4行目には日付、5行目には正しい曜日が表示され、かつ小の月(30日や28日の月)の月末を超える日付は表示されません。 A1に「2004/2」(閏年)や「2000/2」(閏年なし)「2007/6」(小の月)などを入力して確認してみてください。 面倒で長文且つ直接の回答ではないので恐縮ですが、日付を扱う表作成の参考になれば幸いです。

LoveGoGoGo
質問者

補足

分かりにくい質問にもかかわらず回答ありがとうございます。 私が勤務表として使用しているのがシェアウェアの楽々勤務表作成 (http://www.rakuraku.net/soft.html)の為、エクセルに出力すると 月・日・曜日が各セルに自動反映されるのです。 作成者に問い合わせてみたところ開発環境に無いため改良は出来ないとのことでしたので質問した次第です。 もう少し悩んでみます。

回答No.1

回答がつかないようなので、コメントさせていただきます。 質問がわかりにくいとレスがつきにくいと思われます。 いろいろな導き出し方があると思われます。 あまりスマートではありませんが、強引にこねくり回してみました。 例:(G1に年、H1に月が入っているとします) G4(月):=IF(WEEKDAY(DATE(G1,H1,1),2)=1,DATE(G1,H1,1),"") H4(火):=IF(G4<>"",G4+1,IF(WEEKDAY(DATE(G1,H1,1),2)=2,DATE($G1,$H1,1),"")) I4(水):=IF(H4<>"",H4+1,IF(WEEKDAY(DATE(G1,H1,1),2)=3,DATE($G1,$H1,1),"")) (J4,K4,L4,M4まで同様、weekdayの解は同様に1づつ追加、隣のセルを参照) N4(月):=M4+1 O4(火):=N4+1 …(以下続く) WEEKDAY関数(第2引数「2」で月曜日始まり)で、○月1日の曜日を出しています。 ご覧の通りあまりスマートではありません。 もっとスマートにするなら、曜日ではなく日付を固定にし、 (例:G4→8/1、H4→8/2、J4→8/3 …) 5行目の曜日を関数で動かす方がスマートでしょう。 4行目の日付を固定するなら、5行目の式は G5:=TEXT(G4,"aaa") H5:=TEXT(H4,"aaa") … で対応する曜日を出せます。 こちらのほうがすっきりできると思います。 最初の曜日を固定する例を使われるなら、色々とご自身で検討してみてください。 整理して冷静に考えれば、色々な導き方があると思います。

LoveGoGoGo
質問者

補足

分かりにくい質問にもかかわらず回答ありがとうございます。 試してみたものの私が求めている結果にはなりませんでした。 もう少し悩んでみます。