【Excelマクロ】VBAで「時間」を扱うときの考え方

Excel VBAで「時間」を扱うシーンは、勤怠管理、残業計算、集計レポート作成など、実務の現場でも非常に多くあります。

しかし、「時間=文字列のように見えるけれど、実は数値である」というExcel独特のルールを理解しないまま扱うと、思った通りに動かないこともあります。

VBAで「時間」を扱う基本的な考え方と、実務でよく使う処理方法を紹介します。

時間は「日付の一部」として扱う

まず理解しておくべきは、Excelでは時間も数値で管理されているということです。

たとえば「12:00」は「0.5」という数値で、「6:00」は「0.25」、「18:00」は「0.75」として計算されます。

この考え方をもとに、VBAでも時間の計算ができます。

Dim t1 As Date
Dim t2 As Date
Dim diff As Double

t1 = TimeValue("09:00")
t2 = TimeValue("18:00")
diff = t2 - t1

MsgBox diff  ' 結果:0.375(=9時間)

「時間」同士の引き算は、その差分が「1日を1とした小数値」で返ってきます。

注意点

  • Date型で時間を扱う
  • TimeValue関数で文字列から時間に変換
  • 差を取ると「日数(小数)」として返ってくる

実務でよく使う処理

時間を扱う処理には、次のようなパターンがあります。

勤怠管理(遅刻・早退の判定)

Dim t As Date
t = Cells(2, 2).Value  ' 出勤時刻

If t > TimeValue("09:00") Then
    Cells(2, 3).Value = "遅刻"
End If

「9時より遅れていたら遅刻」といった単純な比較は、時間同士の比較で可能です。

所要時間の計算

Dim inTime As Date
Dim outTime As Date
Dim duration As Double

inTime = Cells(2, 1).Value
outTime = Cells(2, 2).Value
duration = outTime - inTime

Cells(2, 3).Value = Format(duration, "hh:mm")

出勤時間と退勤時間の差を取り、Format関数で「hh:mm」形式に整えると見やすくなります。

所要時間を時間単位に変換(小数)

Dim totalH As Double
totalH = (outTime - inTime) * 24

たとえば「9:00~18:00」なら 9 時間 → 0.375 * 24 = 9

小数点の誤差に注意する

VBAで時間を「数値(Double型)」として計算する際、ごくわずかな小数点の誤差が生じる場合があります。
たとえば次のようなコードで、期待通りの値にならないことがあります。

Dim inTime As Date
Dim outTime As Date
Dim totalH As Double

inTime = TimeValue("09:00")
outTime = TimeValue("18:00")
totalH = (outTime - inTime) * 24

If totalH = 9 Then
    MsgBox "9時間ぴったりです"
End If

このコードでは totalH は「9」になるはずですが、内部的に 8.99999999999999… のような数値になることがあり、条件に一致しないことがあります。

回避する方法

誤差に左右されずに処理したい場合は、次のように Round 関数や Int 関数を活用しましょう。

If Round(totalH, 2) = 9 Then
    MsgBox "9時間ぴったりです"
End If

または、範囲で比較することも有効です。

If totalH > 8.99 And totalH < 9.01 Then
    MsgBox "9時間付近です"
End If

ポイント

  • Excelの「時間」は小数なので、計算時に微細な誤差が出ることがある
  • =<> を使う場合は、そのまま比較せず、誤差を見越した処理が必要
  • Round を使って丸める、または範囲で条件を組むと実用的

時間を扱うメリットと考え方

VBAで時間をしっかり扱えるようになると、手動の確認や集計作業が自動化できるようになります。
特に以下のような業務では大きな効果を発揮します。

  • 勤怠データの集計や判定
  • 所要時間の計算と一覧表化
  • 作業時間ごとの分類(3時間未満/8時間以上など)

Excelの時間は「見た目は文字列、でも中身は数値」という特徴を持っているため、見た目に惑わされず、常に数値として扱う意識を持つことが重要です。

まとめ

VBAで時間を扱うには、Excelにおける「時間=1日の小数値」という概念をしっかり理解しておくことが基本です。

TimeValue関数やFormat関数を活用しながら、文字列や数値としての時間を自在に扱えるようになることで、業務の自動化がよりスムーズになります。

  • 時間は「日付の小数値」として管理されている
  • 差分は「時間数 ÷ 24」として扱われる
  • TimeValueFormat を活用して整形・比較が可能
  • 勤怠、所要時間、時間単位の集計などで非常に役立つ
  • 微小な誤差を考慮し、条件判定では丸め処理や範囲比較を活用する

まずは「9時より遅れたら遅刻」のような簡単な判定から始めて、徐々に実務に応用していきましょう。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール