ある時点からある時点までの日数や時間を計算したい場面は多い。しかし、計算の目的が「日数」なのか「時間」なのかによって、データの準備の仕方は異なる。特に時間は「60進法」や「日をまたぐ処理」があるため、単純な数値の引き算では失敗しやすい。
本記事では、初心者でも迷わない計算方法を、ExcelとRのそれぞれについて解説する。
エクセルの場合
準備するデータ:エクセルの場合
Excelでは、目的に合わせて入力形式を使い分けるのが鉄則である。
- 日数の計算: 「2023/12/20」のような、日付のみのデータでよい。
- 時間の計算: 日をまたぐ可能性がある場合は、「日付 + 半角スペース + 時刻(24時間制)」を同じセルに入力する。
- 入力例:
2023/12/24 22:00
- 入力例:
日数の計算方法:エクセルの場合
単純な引き算で求められる。
- 数式:
=終了日 - 開始日 - 例:
2023/12/25 - 2023/12/20=5(日)
※結果が日付形式(1900/1/5など)になってしまった場合は、セルの書式設定を「標準」に戻す必要がある。
時間の計算方法:エクセルの場合
日をまたぐ計算を正しく行うコツは、日付と時間を24時間制でセットにして入力することである。これにより、翌日の「01:00」になっても、Excelは「翌日の1時」として正しく認識し、マイナスの計算結果になるようなミスを防げる。
- 入力: 日付と時間を24時間制で記入する(例:
2023/12/24 23:00と2023/12/25 02:00)。 - 数式:
=終了日時 - 開始日時 - 書式設定: 合計時間を正しく表示するために、セルを右クリック > [セルの書式設定] > [ユーザー定義] を選択し、種類欄に
[h]:mmと入力する。
通常の h:mm では24時間を超えると表示が「0」に戻ってしまうが、[h] とカッコで囲むことで、「30:15」のように24時間を超えた累計時間を正しく表示できる。
R の場合
R言語でも、日付のみの場合と、日時をセットで扱う場合でデータ型を使い分けるとスムーズである。
準備するデータ:R の場合
日付操作に特化した lubridate パッケージを使うのが最も確実である。
library(lubridate)
# 日付のみのデータ(Date型)
start_d <- as.Date("2023-12-20")
end_d <- as.Date("2023-12-25")
# 日付と時刻がセットのデータ(POSIXct型)
start_dt <- ymd_hm("2023-12-24 22:00")
end_dt <- ymd_hm("2023-12-26 10:30")
日数の計算方法:R の場合
日付型同士を引き算するか、difftime() 関数で単位を “days” に指定する。
# 単純な引き算
diff_days <- end_d - start_d
print(diff_days)
# 出力: Time difference of 5 days
時間の計算方法:R の場合
difftime() を使い、単位を “hours” に指定すれば、日をまたいだ合計時間が算出される。
# 時間の差を計算
diff_hours <- difftime(end_dt, start_dt, units = "hours")
print(diff_hours)
# 出力例: Time difference of 36.5 hours
まとめ
時間の計算を「一筋縄」でいかせるための鉄則は、計算したい内容に合わせてデータの持ち方を変えることである。
- Excelでは、日をまたぐ時間計算なら「日付+時刻」を24時間制でセット入力し、表示形式
[h]を活用する。 - Rでは、
as.Date(日付のみ)とymd_hm(日時セット)を適切に使い分け、difftime()で単位を指定する。
この基本を押さえておけば、深夜残業の集計や、数日間にわたるログ解析も、単純な引き算で正確に行えるようになるだろう。
おすすめ書籍
誰も教えてくれなかった 医療統計の使い分け〜迷いやすい解析手法の選び方が,Rで実感しながらわかる!




コメント