教えて下さい。 勤怠管理をエクセルで作っています。 建設業のため、8時から日付を跨いで翌2時とかで終わるときもあります。 現在調べて深夜残業の計算式に
教えて下さい。 勤怠管理をエクセルで作っています。 建設業のため、8時から日付を跨いで翌2時とかで終わるときもあります。 現在調べて深夜残業の計算式に =MAX(MAX(MIN(IF(D6>C6,D6,D6+“24:00″),″29:00”)-MAX(C6,″22:00”),0,)) と入力しています。 深夜残業としては正しく記載されていますが、休みの日など何も入力していない時に2:00と表記がでてしまいます。 これをなんとかしたいのですが、関数に詳しくない為まったくわかりません。 どのようにすればいいか、アドバイスをお願い致します。 ②
Excel・46閲覧
ベストアンサー
MIN関数と空白セル IF関数の論理式を「D6>C6」としているので普通はあり得ない「D6=C6」が「FALSE」を返し、結果「D6+"24:00"」つまり、「"24:00"」が返されています。「"22:00"」を減じて「"2:00"」になります。 「D6>=C6」としましょう。 それだけではありません。 MIN関数では、空白セルと数値の比較の際に思わない結果が返されます。 空白セルD6が「文字列」として扱われるためMIN関数は「D6」ではなく、「"29:00"」を返します。 「空白セル*1」と四則演算して確実に「0」とします。 あなたの数式はその他にも直さなければなりませんが、そのまま上記2件を修正すると次式になります。 =MAX(MAX(MIN(IF(D6>=C6,D6,D6+1)*1,"29:00")-MAX(C6,"22:00"),0,)) 他に直す2件は、 1. 重複している記述が2か所あります。 「MAX()」が重複、「MAX(・・・,0,)」第三引数(省略で0の意味)が重複です。 2. IF関数で真偽の場合に「1」か「0」を返すなら、IF関数は不要で、その論理式のみで同意です。 (TRUEは1、FALSEは0として扱われます。) =IF(D6>=C6,D6,D6+1) 「"24:00"」が「1」であることはご存じですね。 共通の部分「D6」はIF関数の外に出します。 =D6+IF(D6>=C6,0,1) 今回は論理式を反転させましょう。 =D6+IF(D6<C6,1,0) 次式で同意です。 =D6+(D6<C6) これらを全部直して完成します。 =MAX(0,MIN(D6+(D6<C6),"29:00")-MAX(C6,"22:00")) 加算演算子が使われたので、空白セル対策の「*1」は不要になります。
質問者からのお礼コメント
とても丁寧に回答して頂きありがとうございます! 上記の通り入力したところ、問題が無事解決されました! ネットで調べていましたので、私自身関数に詳しくはないのですが、今後はもっと勉強をしてみようと思います! 本当にありがとうございました!
お礼日時:7/2 9:06