[[20040408100722]] 『作業日報』(sunmoon) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『作業日報』(sunmoon)

前回の車輌集計は「ありがとうございました」
本当に助かりました。
応用して「いろいろ」作れました。

今回は作業日報の中の労働時間等の出し方を教えて下さい。  

集合時間 7:30 作業時間 8:00〜17:00 休憩 0.5 h 残業時間   h 終業時間 ○:○ 労働時間   h

こんな感じに(伝わりますか)なっています。作業時間は予定で0:00という書き方で
 「h」の前には0.5とか1と表記したいです。

で、教えて頂きたいのは、残業時間&終業
時間&労働時間の計算方法です。(表記は○.○としたい)

基本労働時間は
8hです。宜しくお願いします。


 ↓こんな表になっているとします。
  |   A    |   B    |C |   D    |  E   |   F    |   G    |   H    |
 1|集合時間|      作業時間      | 休憩 |残業時間|終業時間|労働時間|
 2|  7:30  |  8:00  |〜| 17:30  | 0.5h |        |        |        |
 ※E2,F2,H2の"h"は表示形式で設定してください。

 終業時間を入力する事で残業時間と労働時間を計算するとします。

 労働時間=終業時間(G2)-始業時間(B2)-休憩(E2)と考えて、
 H2に =IF(G2<>"",((G2-B2)/"1:0")-E2,"")

 残業時間=労働時間(H2)-基本労働時間(8時間)と考えて、
 F2に =IF(G2<>"",H2-8,"")

 こんな感じになると思うのですが、どうでしょうか。
(Yosh!)


Yosh!さん

すご〜い、すご〜い!
意味は全くわからないのですが「そのまま」入れたら
「できました」嬉しいです。

でも「h」を表示形式の設定と
通常労働(8時間)だと残業時間のF2セルに「1.77636E-15」

という数字がでますけど?どうしたらいいですか


 労働時間を計算する時に演算誤差が出てしまうみたいですね。
 H2を =IF(G2<>"",((G2/"1:0"*10)-(B2/"1:0"*10)-(E2*10))/10,"") とすれば
 たぶん大丈夫だと思います。(Yosh!)


Yosh!さん

お返事頂いてから「ず〜と」やってるんですけど「エラー」に
なっちゃいます。Vr2000 OS=Me です。


 こちらではエラーになっていないので、状況が分からないです。
 どんなエラーでしょう?エラーメッセージとか出ていますか?
↓こちらに私がテストで作ったブックを置いておきますので比較してみてもらえますか?
http://pub.idisk-just.com/fview/JzOFNEcWplMfLN1CpLIxkWg1C26avXiAqqzmLMyBhSNUbL6HW1Ypdyc9f1XdbAak
(Yosh!)


Yosh!さん

忙しいのに本当にすいません。

エラーは「関数のエラー」で、作って頂いたものの関数をコピーさせて
頂きましたらエラーは出なかったのですが
「1.77636E-15」は
消えないです。宜しくお願いします。


 あぁ、ごめんなさい。誤差が出るの確認しました。
演算誤差の対策方法が間違っていました。
H2を =IF(G2<>"",ROUND(((G2/"1:0")-(B2/"1:0")-(E2)),1),"") で良いと思います。
(Yosh!)


 横から失礼します。
演算誤差の対策になっていないのでは?
単に表示桁数を2桁にしただけのような気がします。
例えば、終業17:01 始業7:00 休憩0.5hの場合
=IF(G2<>"",ROUND(((G2/"1:0")-(B2/"1:0")-(E2)),1),"")
で計算すると 9.5 になります。
=TIMEVALUE(TEXT((G2-B2-E2/24),"h:mm"))*24
で計算すると
9:31*24=0.396527777777778*24=9.516667
となります。
 
今回の質問の場合は0.5h単位なので問題はないのかもしれませんが、
ちょっと疑問が沸き書き込ませてもらいました。(マーヤ)

 ご指摘ありがとうございます。確かに私の式ではおかしいですね。
H2を =TIMEVALUE(TEXT((G2-B2-E2/24),"h:mm"))*24 にすれば良いんですね。
(Yosh!)


 演算誤差については勉強しなくてはと思い、このスレッドも参考にしようと読ませて頂いています。
 
>H2を =TIMEVALUE(TEXT((G2-B2-E2/24),"h:mm"))*24 にすれば良いんですね。
この数式は Yosh!さんがはじめに回答された「=IF(G2<>"",((G2-B2)/"1:0")-E2,"")」と同じ結果になります。
私は「演算誤差の対策」に反応してしまいました。解答をしたのではありません。
例に挙げた「9:31」を時間単位に直すのに使用した式が上の数式です。
つまり、ROUNDを使った式は小数点以下1桁にまとめる式であって、
「演算誤差の対策」にはなっていないのでは?と書いたつもりです。
「演算誤差の対策」を提示してくださるのを期待しての書き込みでした。
実のところ、どういった計算で「1.77636E-15」のような値が出てくるのかも理解できずに、
不思議に思っているのです。
質問者の方へ:本題からそれて申し訳ありませんでした。
(マーヤ)

 マーヤさんの式と自分の式の計算結果を比較してみたんですけど、
同じにはならずに、マーヤさんの式ではちゃんと演算誤差が解消されています。
上のリンク先のブックにテスト結果を保存しておきます。
(Yosh!)

Yosh!さん&マーヤさん

ありがとうございました。

先程、帰宅して学校に来たら「びっくり」先日まで皆さんの質問や答えを見て
勉強させて頂いていたので
私の質問にもお2人が参加してくれてm(__)m

途中、難しい話になっていて自分が質問したことを忘れていました(^^;)

お蔭様で「変な数値」が消えて「0」が表示されました。

Yosh!さん、ブックありがとうございました。おつかれさまでした。


 sunmoonさん、お疲れ様です。
Yosh!さん、ファイルを拝見(DL)しました。成る程・・・も〜ちょっと勉強してみます。
ありがとうございました。 (マーヤ)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.