Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

お世話になります。
知恵をお貸しいただければ幸いです。

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,"休","")

よろしくお願いします。

A 回答 (4件)

土、日、祝日のサインを立てる列を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))
で休日出勤日数がでる。

この回答への補足

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列に「休出」と表示させカウントさせることができました。
回答してくださった皆さんありがとうございました。

補足日時:2008/09/18 22:55
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

休日の判定はうまくいきました。
そこまではうまくいくのですが、休日であり出勤した日を出すのがやはりうまくいきませんでした。
休日と判定され、1と表示されている行に出勤の1を入力しても0と表示されました。

ここが今回の質問の困っているところです。
良い方法がありましたらお願いします。

ちなみに出勤したかどうかのE列には文字列が入ります。
よろしくお願いします。

お礼日時:2008/09/18 13:11

#2です。


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

補足をありがとうございます。

先ほどの回答の意味は理解して試しました。
1を入れた場合ということでしたので 試しにD列に1を入れてやってみましたが、うまくカウントされませんでした。
さきほどの"ちなみに"というのは実際使用する際にはこうしたいという意味でした。
説明不足ですみませんでした。

E列には、出勤した日の仕事内容を入力するので、日によって入力される内容が異なるわけです。
出勤していない日は、セルは空白です。
なので、出勤したかどうかは「E5>0」E列のセルが空白でない時で分かると思うのですが

なにか良い案がありましたら、教えてください。

お礼日時:2008/09/18 16:29

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),"休","")

みたいな感じでやれるんじゃないでしょうか。振替休日は祝日一覧
の方で対応して下さいね。
    • good
    • 0

>休日(土、日、祝)出勤手当てを支払われる日が何日あるか


C列の休日を数えれば良いのでは

>=IF(WEEKDAY(A5)=1,"休","")&IF(WEEKDAY(A5)=7,"休","")
では無く
=IF(WEEKDAY(A5)=1,"休",IF(WEEKDAY(A5)=7,"休",""))
の方がスッキリすると思いますが
    • good
    • 0
この回答へのお礼

回答してくださりありがとうございます。

質問の仕方が悪かったですかね。
休日の日数ではなく、休日でありなおかつ出勤もした日をカウントしたいのです。

お礼日時:2008/09/18 12:52

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報