エクセルで60進法を扱う方法をお探しですね。
広告
エクセル 時間計算の落とし穴!60進法と10進法の変換方法と時間の足し算・引き算
エクセルで勤怠管理や給与計算をしていて、「あれ?時間の合計が合わない…」「時給をかけたら、とんでもない金額になっちゃった!」なんて経験、ありませんか?実はこれ、私たちが普段使っている「時間(60進法)」と、エクセルが内部で扱っている「数値(10進法)」のズレが原因なんです。
見た目は正しく表示されていても、セルの裏側にある「シリアル値」という仕組みを知らないと、正確な計算ができないんですね。
この記事では、エクセルの時間計算でつまずきやすい60進法と10進法の変換ルールや、正しい足し算・引き算の方法を、初心者の方にも分かりやすく説明していきます。
エクセルの「時間」の正体って?60進法とシリアル値の仕組み
まず知っておきたいのが、エクセルが「時間」をどう認識しているかということ。
私たちが普段使っている「1時間」や「30分」は、60分で繰り上がる「60進法」ですよね。
でも、エクセルはすべてのデータを「シリアル値」という「10進法」の数値で管理しているんです。
エクセルでは「1日(24時間)」が数値の「1」として扱われます。
ということは、「12時間」は1日の半分だから「0.5」、「6時間」なら「0.25」という小数で、セルの裏側に保存されているわけです。
この仕組みを知らずに計算すると、思わぬ失敗をしてしまいます。
例えば、セルに「8:00(8時間)」と入力されている場合、画面では8時間に見えますが、エクセル内部では「0.3333…」という数値になっています。
時間同士の足し算や引き算ならエクセルが自動で調整してくれますが、時給などの金額(整数)をかけようとすると、予想と全然違う結果になってしまうんです。
まずは「画面に表示されている時刻(60進法)」と「内部のシリアル値(10進法)」は別物だと理解することが、正確な時間計算の第一歩です。
時給計算で必須!60進法から10進法への変換テクニック
給与計算で「働いた時間 × 時給」を計算するとき、一番やりがちなミスが「時間のセルにそのまま金額をかけてしまう」こと。
例えば、「8:30(8時間30分)」働いた人に時給1,000円を払う場合、普通に考えれば「8,500円」になるはずですよね。
でも、エクセルで「8:30」のセルに1,000をかけると、「354円」とか「8:30:00」とか、意味不明な結果になってしまいます。
これは、エクセルが「8:30」を「1日(24時間)のうちの約0.354」というシリアル値として処理しているからなんです。
**この問題を解決する方法は簡単。
時間のシリアル値に「24」をかけるだけです。
**
シリアル値は「24時間を1とする単位」なので、24をかければ「1時間を1とする単位」に変換できます。
具体的には、「8:30(シリアル値:約0.354)」に24をかけると、「8.5」という数値になります。
これで初めて、「8.5(時間)× 1,000(円)= 8,500円」という正しい計算ができるようになるんです。
計算結果のセルの表示形式を「標準」や「数値」に変更するのも忘れずに!
時間の足し算と引き算で起こる「24時間の壁」と「マイナス表示」
時間の合計を出す足し算や、勤務時間を計算する引き算でも、エクセル特有の落とし穴があります。
よくあるのが、「合計時間が24時間を超えると、また0に戻ってしまう」という現象。
例えば、残業時間の合計が「26時間」になった場合、エクセルでは「2:00」と表示されてしまいます。
これはエクセルが「1日と2時間」と解釈して、時刻部分だけを表示しているから。
**これを解決するには、セルの書式設定を開いて、ユーザー定義で「[h]:mm」と入力します。
**「h」を角括弧で囲むことで、24時間を超えても繰り上がらず、そのままの時間数を表示できるようになります。
また、引き算では「マイナスの時間がエラー表示(######)になる」という問題もよく起こります。
終了時刻から開始時刻を引くとき、入力ミスなどで計算結果がマイナスになると、エクセルは標準状態では時間を表示できません。
これを回避するには、IF関数を使って「マイナスの場合は文字列として表示する」といった工夫をするか、エクセルのオプション設定で「1904年から計算する」にチェックを入れる方法があります。
ただし、「1904年から計算する」設定を変更すると、シート内のすべての日付が4年分ずれてしまうので、すでに日付データが入っているファイルでは注意が必要です。
計算ミスを防ぐための端数処理と計算の工夫
エクセルで時間計算をするとき、もう一つ気をつけたいのが「演算誤差」です。
エクセルは内部的に2進数を使って計算しているため、割り切れない小数を扱うときに、わずかな誤差が出ることがあります。
例えば、時間を積み上げて計算した結果、本来は「0」になるはずの引き算の結果が、限りなく0に近い小さな数値として残ってしまうことがあります。
これがIF関数の判定で「0ではない」と誤判定されると、大量のデータを処理する実務では大きなミスにつながりかねません。
**こうした誤差を防ぐ方法として、「一度最小単位の整数に変換して計算する」という手があります。
**
例えば、分単位で管理したい場合は、すべての時間を「分」に換算(時間 × 1440)して、ROUND関数で小数点以下を四捨五入して整数にします。
整数の状態で足し算や引き算を行って、最後にまた60進法の時間表示に戻すか、そのまま10進法の数値として使います。
特に、15分単位での切り上げ・切り捨てといった処理をするときは、シリアル値のままFLOOR関数などを使うと思わぬ誤差が出ることがあるので、一度整数に変換してから処理する方が確実です。
正確さが求められる給与計算などでは、このひと手間を惜しまないことが大切ですよ。
広告