24時間を超えたTimeシリアル値を"hh時間mm分"にする

勤務時間の計算を行っている。 計算は、まあいいんだけど"hh:mm"って表記された時間、例えば88:20とか(元はシリアル値)を”hh時間mm分”と表示させる(例だと88時間20分)必要があって、ググりながらいろいろやってみたけどなかなか上手くいかない。 ワークシート上では、DAY関数でシリアル値を日に変えてくれると云うページを見つけた。 この例だと、3を返してくれる。 ところがVBAのDay関数は任意の日付データから日を切り出す仕様で、例のシリアル値を喰わせると2が返ってくる。 と云うわけで、さらに調べてみると、DateDiff関数と云うのがあって、単位(時とか日とか月とか)を指定して開始日時と終了日時の期間を指定した単位で返すらしい。 で、単位を日、開始を0、終了を88:20のシリアル値にすると3が返ってきた。 あとはそれを24倍して時間にして、あまりはHour関数で普通に取ってこれるので足せば時間が求まる。 分の部分もMinute関数で普通に持ってこれるので、文字列にしてつなげればおっけー。
ソースはこんな感じ

Dim strWhour As String ' 実働時間(時間) Dim strWmin As String ' 実働時間(分) Dim strTotalTime As String ' 実働時間 ' 実働時間を作る strWhour = DateDiff("d", 0, ThisWorkbook.Worksheets("Sheet1").Range("J44").Value) * 24 + _ Hour(ThisWorkbook.Worksheets("Sheet1").Range("J44").Value) strWmin = Minute(ThisWorkbook.Worksheets("Sheet1").Range("J44").Value) strTotalTime = "実働:" & strWhour & "時間" & strWmin & "分"
ネット上では、ピエール瀧の話題が結構盛り上がってるみたい。
--
のち

No comments: