Excel VBA TimeSerial関数で時、分、秒を数値で指定して時刻に変換する

VBA関数

VBA関数のTimeSerial関数を使用して、時、分、秒を数値で指定して、時刻に変換する方法をご説明します。

「”2019/09/01″」のようにまとまった値を日付型の時刻に変換するのではなく、時、分、秒をそれぞれ数値で指定した結果を時刻に変換します。

それぞれに指定する数値は計算結果の数値でも時刻へ変換可能ですので、計算結果を変数に格納して、時分秒を組み合わせて時刻を生成する時になどに使用すると非常に便利です。

同様に日付を年、月、日を数値で指定する関数は「DateSerial関数の使い方と月初、月末の指定」をご覧ください。

1.TimeSerial関数の使い方

TimeSerial関数は時、分、秒を数値で指定して時刻に変換します。

次のように記述します。

TimeSerial(時,分,秒)

時、分、秒には数値や数式や数値型の変数を指定します。

時刻に変換する関数ですが、それぞれ時間に有効なの数値以外にも指定する事が可能です。

時間は24以上で翌日以降の日付+時刻を返し、-1などのマイナス値を指定すると前日の24時以前を返します。

分は60以上を指定すると、次の時間と端数を分として変換し、-1などのマイナス値を指定すると、1時間前の端数を分として返します。

秒も分と同じ挙動をします。

注意点としては、24時間以上を指定した場合は日付が自動的に付与され、日付型の初期値「1899/12/30」が付与されます。

たとえば、時間に「25」を指定すると「1899/12/31 1:00:00」の様に翌日+1時間後を返します。

2.サンプルコード

シンプルに数値を指定した結果のサンプルコードです。

マイナスや24時以上やマイナス値を指定した場合もあります。

Sub Sample1()

Debug.Print TimeSerial(1, 2, 3) ' 1:02:03

'分が-1
Debug.Print TimeSerial(1, -1, 3) ' 0:59:03

'分が60
Debug.Print TimeSerial(1, 60, 3) ' 2:00:03

'秒が-1
Debug.Print TimeSerial(1, 2, -1) ' 1:01:59

'秒が60
Debug.Print TimeSerial(1, 2, 60) ' 1:03:00

'時が24
Debug.Print TimeSerial(24, 2, 3)  ' 1899/12/31 0:02:03

'時が25
Debug.Print TimeSerial(25, 2, 3)  ' 1899/12/31 1:02:03

End Sub

数式の結果を指定したサンプルコードです。

Sub Sample2()

Dim i As Integer
Dim n As Integer

i = 3
n = 60

'3×60の結果を秒に指定します。
Debug.Print TimeSerial(1, 2, i * n) ' 1:02:03

'3×60の結果を分に指定します。
Debug.Print TimeSerial(1, i * n, 3) ' 1:02:03

n = 24

'3×24の結果を時に指定します。
Debug.Print TimeSerial(i * n, 2, 3) ' 1:02:03

End Sub
タイトルとURLをコピーしました