大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで文字列やシリアル値を時間に変換する方法についてご紹介します。時間への変換は、CDateとTimeValueがあります。CDateは、文字列とシリアル値の両方を、時間に変換できますので、CDateを覚えておくと便利です。

はじめに

この記事では、文字列やシリアル値を、日付型の時間に変換する方法についてご紹介します。

文字列を、日付型の時間に変換するには、TimeValueとCDateの2つがあります。

CDateは、シリアル値も日付型の時間に変換できます。

2つ覚えるのが面倒という場合は、CDateだけを理解しておくといいです。

時間の比較や計算をする際には、日付型の時間に変換する方法が必要となってきますので、CDateをマスターしていきましょう。

では、解説していきます。

この記事で紹介すること

  • 文字列を時間に変換する
  • シリアル値を時間に変換する
  • 数値を時間に変換する

目次から見たい項目へ移動すると便利ですよ。

目次

ポイントとなるVBAコード

初めに、ポイントとなるVBAコードについて記載しておきます。

VBAコードだけ確認したい、という場合にご活用ください。

'文字列を時間に変換
a = "17:1:2"
b = TimeValue(a) '17:01:02
b = CDate(a) '17:01:02

'シリアル値を時間に変換
a = CDate(1 / 24) '1:00:00

'数値8桁を時間に変換
a = 170102
b = CDate(Format(a, "@@:@@:@@")) '17:01:02

では、解説していきます。

VBAでTimeValueを使って文字列を時間に変換

文字列を時間に変換するには、TimeValueを使う方法があります。

時間の比較や計算をしたい場合には、文字列ではなく日付型の時間が必要です。

TimeValueを使えば、文字列の時間を日付型の時間に変換できます。

TimeValueの使い方を、具体的なVBAコードの例を挙げて、解説していきます。

使い方(TimeValue)

まず、文字列を時間に変換するTimeValueへの引数の入力です。

次のように入力します。

『日付型の時間 = TimeValue(文字列の時間)』

では、具体的なVBAコードで解説していきます。

文字列を時間に変換

文字列の時間を、日付型の時間に変換してみます。

文字列『"17:1:2"』を日付型の時間に変換するVBAコードです。

Sub TEST1()
    
    a = "17:1:2"
    
    b = TimeValue(a) '時間に変換
    
    MsgBox b
    
End Sub

実行してみます。

文字列を時間に変換

文字列を日付型の時間に変換した結果

結果は、『17:01:02』となりました。

日付型の時間となる

文字列を日付型の時間に変換した結果、変数の型は日付型となる

変数の型は、日付型となっています。

これで、文字列の時間を、日付型の時間に変換することができます。

VBAでCDateを使って文字列を時間に変換

文字列を日付型の時間に変換する方法はもう1つあって、CDateを使う方法です。

CDateを使って、文字列を日付型の時間に変換する方法を解説します。

使い方(CDate)

まず、CDateの使い方です。

次のように入力します。

『日付型の時間 = CDate(文字列の時間)』

では、具体的なVBAコードを例として挙げて、解説します。

文字列を時間に変換

文字列の時間『"17:1:2"』を日付型の時間に変換してみます。

Sub TEST2()
    
    a = "17:1:2"
    
    b = CDate(a) '時間に変換
    
    MsgBox b
    
End Sub

実行してみます。

文字列を時間に変換

CDateを使って文字列の時間を、日付型の時間に変換した結果

結果は、『17:01:02』となりました。

日付型の時間となる

CDateを使って文字列の時間を日付型の時間に変換したときの変数の型

変数の型は、日付型となっています。

CDateを使って、文字列を時間に変換できます。

VBAでシリアル値を時間に変換

シリアル値を時間に変換する方法について解説します。

文字列だけでなく、シリアル値を日付型の時間に変換したい、という場合もありますので解説します。

まず、シリアル値とはなにかというと、時間を数値で表したものです。

例えば、

  • 1時間:1÷24=0.04166・・・
  • 1分:1÷24÷60=0.0006944・・・
  • 1秒:1÷24÷60÷60=0.0000115741・・・

というような感じです。

これは、特に覚える必要はありません。こういうものなんだぐらいでいいです。

シリアル値が出てくる場合は、時間の計算をしたときです。

ちょっとやってみます。

時間『17:00:00』と『18:00:00』の差分を計算してみます。

Sub TEST3()
    
    a = CDate("17:0:0") '時間に変換
    b = CDate("18:0:0") '時間に変換
    
    '時間の差分を計算
    c = b - a 'シリアル値になる
    
    MsgBox c
    
End Sub

実行してみます。

シリアル値で表示される

時間の差分をした場合にシリアル値となる

結果は、『4.166・・・』となりました。

これは、1時間のことです。シリアル値になっています。

シリアル値で返されてもよくわからないので、『1:00:00』がほしいですよね。

このシリアル値を、日付型の時間に変換する方法を解説します。

TimeValueでは変換できない

先に書いておくと、TimeValueでは、シリアル値を日付型の時間に変換することはできません。

やってみます。

時間『17:00:00』と『18:00:00』の差分を、TimeValueで日付型の時間に変換しようとするVBAコードです。

Sub TEST4()
    
    a = CDate("17:0:0") '時間に変換
    b = CDate("18:0:0") '時間に変換
    
    '差分を計算
    c = b - a 'シリアル値になる
    
    '時間に変換したい
    d = TimeValue(c) 'エラーになります
    
End Sub

実行してみます。

TimeValueでは時間に変換できない

時間の差分をTimeValueで日付型の時間に変換しようとした結果

結果は、エラーとなりました。

シリアル値を日付型の時間に変換したい場合は、CDateを使うとできます。

次で解説します。

CDateを使ってシリアル値を時間に変換

シリアル値を日付型の時間に変換するには、CDateを使います。

時間『17:00:00』と『18:00:00』の差分を、CDateでシリアル値から日付型の時間に変換してみます。

Sub TEST5()
    
    a = CDate("17:0:0") '時間に変換
    b = CDate("18:0:0") '時間に変換
    
    '時間の差分を計算
    c = b - a 'シリアル値になる
    
    '時間に変換
    d = CDate(c)
    
    MsgBox d
    
End Sub

実行してみます。

CDateでシリアル値を時間に変換

CDateでシリアル値を日付型の時間に変換した結果

結果は、『1:00:00』となりました。

シリアル値を日付型の時間に変換できています。

CDate、かなり優秀です。

VBAで数値を時間に変換

数値6桁を、日付型の時間に変換することもできます。

使うVBA関数は、CDateでもTimeValueでもできます。

ここでは、CDateを使う方法で解説します。

ただし、CDateだけでは、数値6桁を日付型の時間に変換できません。

CDateとFormatを組み合わせて、数値6桁を日付型の時間に変換します。

時間と認識できないと意図しない値になる

数値6桁を、CDateを使って日付型の時間に変換しようとしてみます。

数値『170102』をCDateを使って日付型の時間に変換しようとするVBAコードです。

Sub TEST6()
    
    a = 170102
    
    '時間に変換
    b = CDate(a) '意図しない値になります
    
    MsgBox b
    
End Sub

実行してみます。

数値6桁を時間に変換(できない)

CDateを使って数値6桁を、日付型の時間に変換しようとした結果

結果は、『2365/09/20』となりました。

意図していた結果と違います。

ほしいのは、『17:01:02』です。

次に説明するFormatとCDateを組み合わせると、数値6桁を日付型の時間に変換できます。

FormatとCDateを組み合わせる

数値6桁を、FormatとCDateを使って、日付型の時間に変換してみます。

手順としては、

  • ①Formatで"@@:@@:@@"を使って、数値をhh:mm:ss形式に変換
  • ②CDateで日付型の時間に変換

という流れです。

Sub TEST7()
    
    a = 170102
    
    'hh:mm:ss形式の文字列に変換
    b = Format(a, "@@:@@:@@")
    
    '時間に変換
    c = CDate(b)
    
    MsgBox c
    
End Sub

では、実行してみます。

数値6桁を時間に変換

FormatとCDateを使って、数値6桁を日付型の時間に変換した結果

結果は、『17:01:02』となりました。

日付型の時間に変換できました。

日付型に変換すると比較や計算ができる

最初に、日付型の時間に変換すると、時間の比較や計算ができると説明したので、ちょっと紹介しておきます。

日付型にして時間を比較する

文字列を日付型の時間に変換して、時間を比較してみます。

文字列『"17:0:0"』と『"17:0:1"』を日付型の時間に変換して、比較するVBAコードです。

Sub TEST8()
    
    a = CDate("17:0:0") '時間に変換
    b = CDate("17:0:1") '時間に変換
    
    '時間の比較
    If a < b Then
        MsgBox b & " の方が大きいです"
    Else
        MsgBox a & " の方が大きいです"
    End If
    
End Sub

実行してみます。

時間の比較

文字列を日付型の時間に変換して比較した結果

結果は、『17:00:01 の方が大きい』となりました。

正しく時間を比較できています。

日付型にして時間を計算する

つづいて、文字列を日付型の時間に変換して、時間を計算してみます。

文字列『"17:0:0"』と『"18:2:3"』を日付型の時間に変換して、差分を計算するVBAコードです。

Sub TEST9()
    
    a = CDate("17:0:0") '時間に変換
    b = CDate("18:2:3") '時間に変換
    
    '時間の差分を計算
    c = b - a 'シリアル値になります
    
    '時間に変換
    d = CDate(c)
    
    MsgBox d
    
End Sub

実行してみます。

時間の計算

文字列を日付型の時間に変換して、差分を計算した結果

結果は、『1:02:03』となりました。

時間の計算が正しくできています。

時間の計算をする場合は、日付型の時間に変換すると、便利です。

おわりに

この記事では、文字列やシリアル値を、日付型の時間に変換する方法についてご紹介しました。

文字列を、日付型の時間に変換するには、TimeValueとCDateの2つがあります。

CDateは、シリアル値も日付型の時間に変換できるので、CDateだけを覚えておけば十分です。

日付型の時間に変換できれば、時間の比較や計算ができますので、CDateをマスターしましょう。

参考になればと思います。最後までご覧くださいましてありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す