時刻を15分・30分単位にまるめてから時間数を計算

時間数の「まるめ」処理は、出退勤管理(勤怠管理)での時間計算によく利用されます。この場合は「時刻間の時間数を算出してから指定分数で切り捨てる」のではなく、最初から「時刻を切り捨てる」処理をしてから時間数を算出するのが一般的です。
かつての「マクドナルド」が時間計算を切り捨てていた問題に関わります。   ここで紹介しているような勤務時間を概算化する方法は、手作業で集計していた時代では「当たり前」のことでした。
現在ではこれらの勤怠集計は電算化が当たり前なので、手作業時代のような切り捨て処置は許されないそうです。



古い話ですが、2005年8月に「マクドナルド」がアルバイトに対して、日々の労働時間集計を30分単位で端数を切り捨てていたことを労働基準監督署から追求されて、1分単位の計算方法に切り替えたというニュースがあったことを記憶しています。
当時は何年分か遡って再計算し、相当な時間外手当を支払ったのでしょう。



このページでは当時の手法を再現しています。



月次での集計に際しての端数処理は問題視されないようですが、日々の切り捨てはいけないということのようです。 但し、以前に社労士に確認したところでは、月次であっても切り捨てはダメで四捨五入とするべきだそうです。
  ⇒「時間数計算で30分単位に四捨五入!」



時刻・時間数の「まるめ」処理

時刻「まるめ」による時間数算出
(画像をクリックすると、このサンプルがダウンロードできます)

「開始時刻」から「終了時刻」までの「経過時間」は、「経過時間(時・分)を算出する」で説明したとおりで、

 [経過時間] = [終了時刻] - [開始時刻]
で算出されます。



昔の「出退勤処理」で行なわれていた時間数「まるめ」は、上記の「経過時間(NET)」を単位時間数で切り捨てるのではなく、 「開始時刻」は切り上げ、「終了時刻」は切り捨ててから、差し引きで「経過時間」を算出していたはずです。
上のサンプル画像では「開始時刻」が「8:48」、「終了時刻」が「18:29」です。 差し引きの「経過時間(NET)」はE2セルにあるように「9:41」です。



この「9:41」があれば、15分切り捨てで「9:30」になるのは判るでしょうが、 時刻の「8:4818:29」だけを見た状態からの「9:30」は、暗算ではなかなか困難だったため、 先に時刻をまるめてしまう方法が一般的だったと想像できます。



「先に時刻をまるめる」の件で、まるめた結果を「検証用時刻(H、I列)」に表示させています。 「時間数(E列)」は「検証用時刻」の値ではなく、元の「開始時刻」「終了時刻」から算出させているので、15分単位の「時間数」の数式は、

 =FLOOR($B$4,$F3)-CEILING($B$2,$F3)
となっています。



関数概略説明
 FLOOR関数  指定された基準値の倍数のうち、最も近い値かつ 0 に近い値に数値を切り捨てます。
 引数は①数値、②基準値です。
 CEILING関数  基準値の倍数のうち、絶対値に換算して最も近い値に切り上げられた数値を返します。
 引数は①数値、②基準値です。



10進数演算での「切り捨て」「切り上げ」であれは、「ROUNDDOWN関数」「ROUNDUP関数」が使われますが、 ここでは時間数単位(15分、30分)の「切り捨て」「切り上げ」なので、10進数の「桁位置」を指定する関数は利用できません。
FLOOR関数」「CEILING関数」は「桁位置」ではなく「基準値」であって、これに15分、30分といった値が指定できます。