[[20090409112601]] 『タイムカード計算』(こめ) ページの最後に飛ぶ

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

 

『タイムカード計算』(こめ)

 調べてみたのですがわからなくておすがりします。

 基本就業時間    8:30〜17:30
 60分単位残業時間 17:30〜19:30(この時間帯は18:00でも残業はつかない)
 30分単位残業時間 19:30〜 0:00(この時間帯は20:00だと残業は2.5時間)
 休憩時間     12:00〜 1:00

    A     B      C       D     E
 |日付|  始業 | 終業 |時間内| 残業
1| 4/1|  8:30 |18:00 | 8:00 | 0:00   始業/終業は手入力です
2| 4/2|  8:30 |18:30 | 8:00 | 1:00   (8:05に来ても8:30と入れる)

 どう入れたらいいのでしょう。
 お願いします。


 (1) D2セル =IF(COUNT(B2:C2)=2,MAX(0,MIN("17:30",C2+(B2>C2))-B2)-MAX(0,MIN(C2+(B2>C2),"13:00")-MAX(B2,0.5)),"")
 (2) E2セル =IF(D2="","",FLOOR(MAX(0,TEXT(C2+(B2>C2)-"17:30","h:m")),IF(C2+(B2>C2)-"19:31"<0,"1:00","0:30")))

 <結果図>
  行  ___A___  __B__  __C__  ___D___  __E__
   1  日付     始業   終業   時間内   残業 
   2  4月1日   8:30   18:00  8:00     0:00 
   3  4月2日   8:30   18:30  8:00     1:00 
   4           13:30  18:00  4:00     0:00 
   5           8:30    1:00  8:00     7:30 
   6           8:30   20:00  8:00     2:30 
   7           8:30   19:00  8:00     1:00 
   8           8:30                        

 (半平太) 2009/04/09 20:45

 半平太さん ありがとうございました。
 タイムカード計算は説明をしっかりしないといけないという事に過去ログを見てて気づきこれでは
 説明不足かと反省していました所お答えをいただき助かりました。
 その後この式を自分で考えながら表を作成しましたが、少し内容が変わってしまいやり直しになって
 しまいました。トホホ
 よくわからない点があります。E2セルの式の中で"h:m"と"0:30"というのはどういう意味ですか。

 変わった所を説明します
 基本就業時間/60分単位と30分単位残業時間は変わらず
 30分単位早出時間  5:00〜 7:30
 60分単位早出時間  7:30〜 8:30
 休憩時間          〜13:00(前は間違えて1:00と書いてました)

  A B     C      D       E     F
 |日付|  始業 | 終業 |時間内| 残業
1| 4/1|  7:30 |18:00 |  8.0 | 1.0  ←時間内/残業時間は1.5などの.単位でした
2| 4/2|  8:30 |16:00 |  6.5 | 0.0   

 早出時間が出てきてしまい、式の内容がよくわかっていないことを痛感しました。
 こういう早出の時間単位区分けはどうやるんでしょう。
 教えていただけないでしょうか。
 (こめ)


 "h:m"
FLOOR(数値,基準値)
 "0:30"
IF(論理式,真の場合,偽の場合)
 (ヘルプも見よう)

 >E2セルの式の中で"h:m"と"0:30"というのはどういう意味ですか

 1.今となってはもう関係ないことですが、正しくは以下であるべきでした m(__)m
   E2セル =IF(D2="","",FLOOR(TEXT(MAX(0,C2+(B2>C2)-"17:30"),"h:m"),IF(C2+(B2>C2)-"19:31"<0,"1:00","0:30")))

 30分単位とか1時間単位とかに足切りするときは、Floor()関数を使いますが、
 当然、その元となっている時間データが正しいことが前提になります。

 しかしながら、時間データは小数誤差を含んでおり、人間の目には30分に達していると見えても、
 コンピュータレベルからすると、僅かに30分に足りておらず足切りが実施されてしまう、
 と云うことが起こり得ます。(いつもではありません)

 これは経験則でしかありませんが、
  「手入力の時間データ」や
  「Text()関数を使って"h:m"の形式で出させた時間データ」なら、
 FLOOR()関数を使っても、小数誤差が表面化しないことが分かっています。

 以上の基礎知識を以て上の式を眺めると、まず C2+(B2>C2)-"17:30" で残業時間を計算しています。
 これは「計算の結果得られた時間データ」です。そのままでは正しく足切りをしてくれないかも知れません。
 このため、TEXT関数で処理してから、Floorに掛けている訳です。

 > IF(C2+(B2>C2)-"19:31"<0,"1:00","0:30")
 ここはFloor関数の第二引数に当たる部分で、"19:30"以前なら" 1:00"、以後なら"0:30"の単位を指定しています。
 ここでも、小数誤差を恐れて、19:31を引いて、19:30以前であることを確実にすることを考えています。
  尤も、30分単位で入力されていると云うことなので、現実問題としては、
 19:01〜19:31の時刻であれば、何でも良かったのですけどね。(^^ゞ

 > タイムカード計算は説明をしっかりしないといけないという事に過去ログを見てて気づき
 2.全く、その通りなんです。
  勤務時間の質問に、なぜ回答が付きにくいかと云うと、条件の後出しが非常に多いのです。
  簡単な説明で質問が開始された時は、特にそうです。下手すると泥沼になります。

  質問者側は、逐次追加して聞けばいいと考えるのでしょうが、
  回答側は、そんな条件があるのなら、別の解法を検討しなければならず、
  初めに考えたことが無駄になると云う思いが生じたりもします。

   今回も簡単だったのですが、本当に簡単なことなのかも知れない、
   と云う気がしてレスを入れて見たのですが、、
  なんか、泥沼の手前に来ている気がしてきましたよぉー。(^^ゞ

  この後さらに
   「時間内が8時間に達するまでは、残業時間は計上しない」とか
   「超早朝始業の場合」「深夜残業」「深夜休憩」「深夜始業の場合」とか、何か別の条件も

  出て来そうな気がしますので、一旦ドロップアウトさせていただきます。

 (半平太) 2009/04/10 13:01

残業計算で探していたら似た内容で見つけたけど、
なんかフーンって感じ。尻切れトンボですね。
(通りすがり)

コメント返信:

[ 一覧(最新更新順) ]


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