• 締切済み

EXCELで休日出勤を計算する

お世話になります。 知恵をお貸しいただければ幸いです。 EXCELでひと月ごとのの出勤報告書を作っています。 そこで、休日(土、日、祝)出勤手当てを支払われる日が何日あるかを自動表示させようとしています。 今のシートの構成は A列:日付(2008/9/1の形で入力し、「1」のように表示 A5:A35) B列:曜日(A列から参照し、表示形式でaaaとし「月」のように表示) C列:休日(仕方なく手入力で「休」と入れている) D列:休日出勤したか判定(=IF(OR((C5>0)*(E5>0)),"休出","")C列とE列とも入力された場合に休日出勤とし「休出」と表示) E列:出勤した日はその日の仕事内容を入力 D列の最下部で「休出」が何回あるかカウント(=COUNTIF(D5:D35,"休出")) 祝日は関数が無いので、祝日一覧を作り該当する日付から祝日を割り出すのは分かったのですが。 =IF(WEEKDAY(A5)=1,"休","")&IF(WEEKDAY(A5)=7,"休","") よろしくお願いします。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

#2です。 回答をよく読んでくれてないのでは。 私は >D列に出勤日は1が入るとして 質問者は >文字列が入ります であれば =SUMPRODUCT((C2:C31=1)*(D2:D31=1)) の式のD2:D31=1 の式のD2:D31=1のD列をE列、1を文字列(””つき)に修正しないと。 それぐらい質問者は判ると思って。 こういうとき文字列と「一般化」した書き方をしないで、「出勤」とか具体的に書くと、回答が具体的になるよ。

hiro_ele
質問者

お礼

補足をありがとうございます。 先ほどの回答の意味は理解して試しました。 1を入れた場合ということでしたので 試しにD列に1を入れてやってみましたが、うまくカウントされませんでした。 さきほどの"ちなみに"というのは実際使用する際にはこうしたいという意味でした。 説明不足ですみませんでした。 E列には、出勤した日の仕事内容を入力するので、日によって入力される内容が異なるわけです。 出勤していない日は、セルは空白です。 なので、出勤したかどうかは「E5>0」E列のセルが空白でない時で分かると思うのですが なにか良い案がありましたら、教えてください。

回答No.3

D列で休日出勤の判定が出来ていて(or関数は無駄だけど)、カウント もしているようなので、目的の「出勤手当てを支払われる日が何日 あるか」は達成しているわけです。すると質問は、C列を手入力した くないってことでしょうか。 weekday関数は第二引数を2にすることで月曜が1になります。よって 土日の判定は=if(weekday(A5,2)>=6,"休","")ですみます。そこに祝 日一覧のチェックを加えればいいわけで、たとえば「祝日一覧」 シートのA列に今年の祝日や来年の祝日が列記してあるとして、A5が 祝日じゃない場合はvlookup関数で検索に失敗して#value!エラーが 返ることを利用して、 =if(or(not(iserror(vlookup(A5,祝日一覧!A:A,FALSE))),weekday(A5,2)>=6),"休","") みたいな感じでやれるんじゃないでしょうか。振替休日は祝日一覧 の方で対応して下さいね。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

土、日、祝日のサインを立てる列を1列にして、列のサインが立っている件数をカウントすれば(1という数値なら合計する)仕舞い。 ーー >=IF(WEEKDAY(A5)=1,"休","")&IF(WEEKDAY(A5)=7,"休","") でチョチョ切れているのでは。何を言いたいのかな。 ーー 下記のようなことをしたいのかな。 例データ A列  B列  C列 2008/9/1 月 2008/9/2 火 2008/9/3 水 2008/9/4 木 2008/9/5 金 2008/9/6 土 1 2008/9/7 日 1 2008/9/8 月 2008/9/9 火 2008/9/10 水 2008/9/11 木 2008/9/12 金 2008/9/13 土 1 2008/9/14 日 1 2008/9/15 月 1 ・・・(以下略) A列 今年9月の日付 B列 A列のコピー、書式ーユーザー定義のaaa C2の式 =IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7,NOT(ISERROR(VLOOKUP(A2,$G$1:$G$10,1,FALSE)))),1,"") これを下方向に式を複写。 結果 上記C列。 ただし上の式では、G列に 9月の祝日(特別に会社休業日もあれば入れてよい)である 2008/9/15 2008/9/23 を入れておく。 ちなみに上記結果C列は9月15日は1になっている。 NOT(ISERROR(VLOOKUP(A2,$G$1:$G$10,1,FALSE)))はG列のリストにある日付かどうかを判別しているもの。 ーーー 出勤日とこのC列が同時に1であれば休日出勤日数がわかる。 D列に出勤日は1が入るとして =SUMPRODUCT((C2:C31=1)*(D2:D31=1)) で休日出勤日数がでる。

hiro_ele
質問者

お礼

回答ありがとうございます。 休日の判定はうまくいきました。 そこまではうまくいくのですが、休日であり出勤した日を出すのがやはりうまくいきませんでした。 休日と判定され、1と表示されている行に出勤の1を入力しても0と表示されました。 ここが今回の質問の困っているところです。 良い方法がありましたらお願いします。 ちなみに出勤したかどうかのE列には文字列が入ります。 よろしくお願いします。

hiro_ele
質問者

補足

imogasiさんの =IF(OR(WEEKDAY(A2)=1,WEEKDAY(A2)=7,NOT(ISERROR(VLOOKUP(A2,$G$1:$G$10,1,FALSE)))),1,"") という式と =IF((C5=1)*(E5>0),"休出","") で、 休日出勤した日には、D列に「休出」と表示させカウントさせることができました。 回答してくださった皆さんありがとうございました。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

>休日(土、日、祝)出勤手当てを支払われる日が何日あるか C列の休日を数えれば良いのでは >=IF(WEEKDAY(A5)=1,"休","")&IF(WEEKDAY(A5)=7,"休","") では無く =IF(WEEKDAY(A5)=1,"休",IF(WEEKDAY(A5)=7,"休","")) の方がスッキリすると思いますが

hiro_ele
質問者

お礼

回答してくださりありがとうございます。 質問の仕方が悪かったですかね。 休日の日数ではなく、休日でありなおかつ出勤もした日をカウントしたいのです。

関連するQ&A