プロが教える店舗&オフィスのセキュリティ対策術

こんばんは。
エクセル計算で組めない式ができてしまいました。
詳しい方、ぜひ教えてください。
以下に条件を入れます。
勤務時間を計算します。
(1)勤務時間は8:30~17:30です。
(2)昼休憩時間は12:00~12:50です。
   中休憩時間は15:00~15:10です。

ここまでで、式を組んだのですが・・・

=IF(出="","",IF(OR出>="12:00",終<="12:50"),IF(終>15:00,終-出-"1:00",終-出-"0:50")))

※出:出勤時間、終:終了時間
とここまでで勤務時間が出てくるのですが
ここで問題が出てきました。

昼から出勤(12:50~)の方は15:00~15:10の休憩をとるので
4時間30分の勤務時間になるのですが、この計算式だけだと
4:40勤務時間になってしまいます。

そこで4:30になるようにその式だけを考えたら・・・
=IF(出>="12:50",(終-出-"0:10"))
まで考えたのですが、続きの「偽」の式が分からなくなってしまいました。
また、式のつなげ方も分かりません。
あっているかどうかすらよく分からなくなってしまいました。

お手数ですが、分かる方教えてください。
あわてて書いたので、追加質問がございましたら
お願いします。  

A 回答 (5件)

No3です。

解答で示した3つのグループを足し合わせれば次の式になります。

=IF((MIN(終,"12:00")-MAX(出,"8:30"))<0,0,MIN(終,"12:00")-MAX(出,"8:30"))+IF((MIN(終,"15:00")-MAX(出,"12:50"))<0,0,MIN(終,"15:00")-MAX(出,"12:50"))+IF((MIN(終,"17:30")-MAX(出,"15:10"))<0,0,MIN(終,"17:30")-MAX(出,"15:10"))
    • good
    • 0
この回答へのお礼

KURUMOTOさん ありがとうございました。
最初から解説頂き、式の意味も理解できました。
今の段階は式を打ち間違ってしまったのか
回答が出てこなかったのですが、
もう一度トライしてみます。

問題1つとっても色々やり方があるのですね!
貴重なお時間を頂き本当にありがとうございました。

お礼日時:2009/12/04 10:58

>この式で行ってみましたが、勤務時間が昼勤12:50~だと4:29になってしまい


また朝8:30~17:30勤務だと8:49の勤務時間になってしまいました。

数式を見たら、「”」の位置も間違えているだけでなく、AND関数の使い方もおかしいなど、検証した数式以外の数式を投稿してしまったようです。

正しくは以下の数式になります。

=終-出-(("12:00"-出)*(終-"12:50")>0)*"0:50"-(("15:00"-出)*(終-"15:10")>0)*"0:10"
    • good
    • 0
この回答へのお礼

Mackyさん、何度も回答ありがとうございました。
無事、作成することができました。
とてもスマートな式で簡潔に終わりました。

できましたら式の解説を頂けたらと思いますが、
特に*の部分で足し算、引き算の意味までは理解できたのですが・・・
0より大きいとしたところは、ここは0でなくてはだめなのでしょうか?
今後の勉強のため、御教授いただけたらと思います。

お礼日時:2009/12/04 10:54

勤務帯を3つのグループに分けて考えて処理すればよいでしょう。


例えばB1セルにA時間、C1セルにB時間、D1セルにC時間と入力し、A2セルには開始時刻、A3セルには終了時刻と入力します。
B2セルには8:30、B3セルには12:00、C2セルには12:50、C3セルには15:00、D1セルには15:10、D2セルには17:30と入力します。
A5セルには出勤時刻、B5セルには退勤時刻、C5セルにはA時間、D5セルにはB時間、E5セルにはC時間、F5セルには勤務時間と入力します。
A6,B6から下行には実際のデータを入力します。
C6セルには次の式を入力し、E6セルまでオートフィルドラッグしたのちに下行にもオートフィルドラッグします。
=IF($A6="","",IF((MIN($B6,B$3)-MAX($A6,B$2))<0,0,MIN($B6,B$3)-MAX($A6,B$2)))
F6セルには次の式を入力し下方向にオートフィルドラッグします。
=IF(A6="","",SUM(C6:E6))
    • good
    • 0

単純に出勤時間が休憩の開始時間よりも前で、終業時間が休憩の終了時間よりも後のときはその休憩時間を引くという数式でよいのではないでしょうか。



数式にすると

=終-出-AND("12:00-"出)*(終-"12:50")*"0:50"-AND("15:00-"出)*(終-"15:10")*"0:10"

この回答への補足

早速の返信ありがとうございました。
この式で行ってみましたが、勤務時間が昼勤12:50~だと4:29になってしまい
また朝8:30~17:30勤務だと8:49の勤務時間になってしまいました。

とすると、どこかに時間のかぶりがあるということでしょうか。
少し時間の調整をやってみます。

補足日時:2009/12/03 13:21
    • good
    • 0

時間を分解して考えると、間違いが少なくなります



質問のケースでは休憩を取る時間が2つあるため、そこで分けると良いでしょう
 8:30~12:00
 12:50~15:00
 15:10~17:30
あとはこの時間内での勤務時間をそれぞれ求めて合計すればOK
MAX関数と MIN関数を使うと良いでしょう
 =MIN(終,"17:30")-MAX("15:10",出)
これで 15:10から 17:30の間の勤務時間を計算できます
同様に 12:50~15:00、8:30~12:00 の間の勤務時間を求めて、
それらを合計すれば 8:30から 17:30の間の休憩時間を除いた勤務時間を得られます

※ 早出や残業のことは考慮していません

この回答への補足

早速の返信ありがとうございました。

頂いた式を当てはめてみました。

=MIN(終,"12:00")-MAX("8:30",出)+MIN(終,"15:00")-MAX("12:50",出)+MIN(終,"17:30")-MAX("15:10",出)

でやってみました。
12:50~17:30の場合、式を当てはめると勤務時間が3:40となってしまいます。どこかの式の時間がたりないのでしょうか?

もう少し考えて見ます。

補足日時:2009/12/03 13:25
    • good
    • 0

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