【Excel VBA】文字列を日時に変換する(CDate/DateValue/TimeValue)

はじめに

今回は、文字列を日時に変換する方法を解説します。
日付を取り扱う関数やメソッドなどの引数を渡す際、Date型でないといけない場合があります。
そういった場合に、お役に立てると思いますので、是非最後までお付き合いください。

この記事を読むメリット
  • 文字列を日時に変換する方法が分かります。
  • 日付型に変換できる文字列と、できない文字列について分かります。
  • 変換元データが「yyyyMMddhhmmss」形式など、日付形式でない場合の対処法も解説します。
  • 「日時」「日付のみ」「時刻のみ」に変換する方法も解説しています。
  • コピペで使える実践的なサンプルコードも掲載しています。

前提

日付に変換できる文字列

変換する前の文字列は、当然日時が明確に分かるようにする必要があります。
以下に、「変換できる文字列」と「変換できない文字列」の例を示します。

変換できる文字列
  • 2020/08/31 10:21:30
  • 2020-08-31 10:21:30
  • 2020年08月31日 10時21分30秒
  • 令和2年 8月31日 10時21分30秒
  • R02年 08月31日 10時21分30秒
変換できない文字列
  • 20200831102130

「変換できない文字列」の場合は、Format関数などを使用して事前に加工すると良いでしょう。
【例】
 日時データ:Format(文字列, “####-##-## ##:##:##”)
 日付データ:Format(文字列, “####-##-##”)
 時刻データ:Format(文字列, “##:##:##”)

基本情報

文字列から日時に変換する関数

文字列を日時に変換する関数は複数存在します。
それぞれ「どういった形式に変換するのか」により、用途が異なります。

#関数説明
1CDate文字列を日時に変換する
2DateValue文字列を日付に変換する(時刻は切り捨てられる)
3TimeValue文字列を時刻に変換する(日付は切り捨てられる)

CDate関数

文字列を日時に変換する場合は、CDate関数を使用します。
引数に文字列を指定すると、その文字列をDate型にし返却します。

構文

構文

CDate(文字列)

DateValue関数

文字列を日付に変換する場合は、DateValue関数を使用します。
引数に文字列を指定すると、その文字列をDate型にし返却します。
※時刻は切り捨てられます。

構文

DateValue(文字列)

変換する文字列が「時刻のみ」の場合は、エラーとならず「0」が返却されます。

TimeValue関数

文字列を時刻に変換する場合は、TimeValue関数を使用します。
引数に文字列を指定すると、その文字列をDate型にし返却します。
※日付は切り捨てられます。

構文

TimeValue(文字列)

サンプルコード

文字列を日時に変換して書き出す

サンプルコード
Public Sub convStrToDate()
    Dim str As String               ' 文字列
    Dim dateTimeVal As Date         ' 日時データ
    Dim dateVal As Date             ' 日付データ
    Dim timeVal As Date             ' 時刻データ
    Dim currentRowIndex As Integer  ' カレント行Index
    Dim endRowIdex As Integer       ' 最終行Index

    ' 最終行取得
    endRowIdex = ActiveSheet.UsedRange.Rows.Count

    For currentRowIndex = 2 To endRowIdex

        ' 文字列取得
        str = Cells(currentRowIndex, 2)

        ' 変換処理
        dateTimeVal = CDate(str)    ' 日時データ
        dateVal = DateValue(str)    ' 日付データ
        timeVal = timeValue(str)    ' 時刻データ
    
        ' 日時の書き出し
        Cells(currentRowIndex, 3).Value = dateTimeVal   ' 日時データ
        Cells(currentRowIndex, 4).Value = dateVal       ' 日付データ
        Cells(currentRowIndex, 5).Value = timeVal       ' 時刻データ
    Next currentRowIndex
End Sub

実行結果(クリックで拡大されます)

実行前
実行前
実行後
実行後

最後に

今回は、文字列から日時に変換する方法を解説しました。

本記事が皆さんのお力になれば幸いです!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

大手外資系コンサルティングファーム勤務。ExcelVBA歴は8年。金融関係のプロジェクトにて約100万レコードを処理するマクロの開発実績あり。ExcelVBAの基礎・応用情報を発信中。

コメント

コメントする

CAPTCHA