VBA_24時間以上の時間表記をしてみた

vbaの日付や時間操作はとても難しいことが多い。
その中で、24時間以上の時間をセルに表示することに苦労したので、最終的にうまくいったコードと解説をしていきます。

これをすることで、下記のような計算したいときに便利

・残業時間計算で、日付またぎの時刻の計算が可能

※ 本来は日付またいで仕事しないように・・・

では、見ていきましょう!

24時間以上の作り方_VBAコードの解説

今回の定義

  • 現在時刻から24時間以上経過した場合の表記をする
  • 固定で1日超えた場合にしています。変数にすることで2日以上も可能
    • 1時20分33秒の場合 ⇒ 25時20分33秒と表記

出来上がりVBAコード

まずは出来上がりのコードを見てみましょう。このまま利用していってもらっても大丈夫です。
今回の例は、現在時刻から1日超えた場合の指定しています。
変数のoverDayを、固定値ではなく日数を自動計算して取得できるように作れば、
何日後の表記(例: 3日後の50:10:08表記など)もできるので、ここは使う用途によって変更してみましょう。

24時間以上の時刻を取得 例:25:10:45
' 変数宣言
Dim nowTime As Date
Dim hourTime As Integer
Dim overDay As Integer
Dim overTimeTwentyFourHour As String

' 現在時刻の取得
nowTime = Now

' 24時間以上が何日分かの日数を取得
overDay = 1

' 何時間(h)かを計算。何日分(日数×24時間)を超えているかをプラスしている
hourTime = (overDay * 24) + Hour(nowTime)

' 24時間表記Hour : nn(分表記(時刻をフォーマット指定しない場合):ss(秒))
overTimeTwentyFourHour = hourTime & Format(nowTime, ":nn:ss")

' セルA1に24時間以上の時刻表記
Cell(1, 1).Value = overTimeTwentyFourHour 

それぞれ、解説していこうかと思います。

現在時刻の取得

' 現在時刻の取得
nowTime = Now

こちらの”Now”を指定すると、現在時刻のyyyy/mm/dd hh:mm:ssのDate型で取得することが可能です。

何日分かの取得

' 24時間以上が何日分かの日数を取得
overDay = 1

24時間以上の計算として、日数×24時間を時間(h)に足していきます。
そのための、日数を宣言しておきます。
今回は固定値で1日としました。
ここを計算式で自動計算する仕様に変更することで、数日後の表記もとれるように設定しておきましょう。

24時間以上の時間(h)を取得

' 何時間(h)かを計算。何日分(日数×24時間)を超えているかをプラスしている
hourTime = (overDay * 24) + Hour(nowTime)

24時間超えた(h)の数値を取得しておきます。
例えば、25時間なら”25”、31時間なら”31″と数値型で取得しておきましょう。

24時間以上の文字列を取得

' 24時間表記Hour : nn(分表記(時刻をフォーマット指定しない場合):ss(秒))
overTimeTwentyFourHour = hourTime & Format(nowTime, ":nn:ss")

Format関数では、Date型を指定の表示方法でString型にすることが可能。
これを用いて、hourTime(24時間以上の(h)の数値) + “:nn:ss”の分・秒表記を後ろにくっつけるで24時間以上の表記が可能となります。
※変数名がだいぶ長くなりました(汗)・・・ご自身でわかりやすいような短めにしてもらってよいかと。

もし、DateAdd関数を利用してnowTimeを25:10:00などにしておいても、
Format関数の通常の利用方法であるFormat(nowTime, “hh:nn:ss”)では、hhの表記が24時間表記に代わり、
1:10:00となってしまう。これを防止するために、hhは数値型で別途で保持しておくことが必要であった。

◆Format型の補足

Format(Date型, “表記方法”)Date型の値を表記方法の通りにする。
String型で返す。
◆表記方法の例
・ “yyyy/mm/dd” ⇒ 2023/10/09 ※日付の表記(区切りは”/”)
・ “yyyy-mm-dd” ⇒ 2023-10-09 ※日付の表記(区切りは”-“)
・ “hh:nn:ss” ⇒ 10:33:01 ※時刻の表記(区切りは”:”)
(Month(月)で”mm”となり、Minute(分)は”nn”となる)

セルへ出力

' セルA1に24時間以上の時刻表記
Cell(1, 1).Value = overTimeTwentyFourHour 

今回はA1セルに出力しました。
結果:現在時刻が1:20:33 ⇒ 25:20:33と表記されます。

◆補足
出力セルの中身を見ると”1900/1/1 1:20:33″のように、“1900/1/1″が埋め込まれています
これはExcelの仕様らしく、25時間以上は、1900/1/1と24時間以内表記になるらしいです。

セル書式設定の表示形式を変更しておく

セルの書式設定⇒表示形式⇒ユーザー定義にて、
“h:mm:ss”と指定してしまうと、24時間以内表記になってしまいます。
24時間以上を表示する場合には、
ユーザー定義にて”[h]:mm:ss”とhを[]で囲んでおくことで表記ができますので設定しておきましょう

ユーザー定義: “[h]:mm:ss”と指定する
ユーザー定義

24時間以上のセル引き算などに利用

下記のように、例えば終了時間の欄を今回説明した24時間以上の現在時刻を入れることをうまく活用すれば、
終了時間が日付をまたいでも、時間差分をうまく表記することが可能になります。

まとめ

今回はFormat関数の時間(h)部分を数値で計算しておいて、後ろにFormat関数で”:nn:ss”をくっつけることでうまく24時間以上表記が可能になりました。
VBAは日付や時刻の方法がなかなか難しく、参考になっていれば幸いです。
以上になります。読んで頂いた方、ありがとうございました。

コメントする

CAPTCHA