VBA共通:VBAでYYYYMMDDhhmmss形式の日付時刻を表す文字列を日付型のデータに変換するサンプルプログラム(ユーザー定義関数)

日付時刻がYYYYMMDDhhmmss形式で表された文字列を日付型のデータ(YYYY/MM/DD HH:MM:SS)に変換するVBAのサンプルプログラムを覚書。
例えば、20150731090000を日付型の2015/7/31 9:00:00に変換するとういう感じ。

応用としてYYYYMMDDをYYYY/MM/DDの日付型に変換するサンプルプログラムも紹介します。

紹介するサンプルプログラムは、VBA共通で使えるのでExcelでもAccessでも使用できます。
スポンサードリンク


YYYYMMDDhhmmss形式の日付時刻を表す文字列を日付型のデータに変換する処理の概要


各変数(年、月、日、時、分、秒)を通常の日付を表す形式(YYYY/MM/DD hh:mm:ss)に作り直して、あとはCDate 関数を使って文字列を日付型に変換するだけ。

YYYYMMDDhhmmss形式の日付時刻を表す文字列を日付型のデータに変換するVBAサンプルプログラム1

何度も使われる場合を考えてユーザー定義関数として作成しています。
Function StringToDate(strDate As String) As Date
Dim strYear As String, strMonth As String
Dim strDay As String, strHour As String, strMinute As String
Dim strSec As String

'引数として受け取った日付時刻文字列(YYYYMMDDhhmmss)を
'年、月、日、時、分、秒にバラして各変数に代入
strYear = Left(strDate, 4)
strMonth = Mid(strDate, 5, 2)
strDay = Mid(strDate, 7, 2)
strHour = Mid(strDate, 9, 2)
strMinute = Mid(strDate, 11, 2)
strSec = Mid(strDate, 13, 2)

'分解したものをYYYY/MM/DD HH:MM:SSに作り変えて日付型に変換して返す
StringToDate = CDate(strYear & "/" & strMonth & "/" & strDay _
                & " " & strHour & ":" & strMinute & ":" & strSec)

End Function

作成したユーザー定義関数の使用例

以下はVBAのプログラムの中でサンプルプログラム1のユーザー定義関数を呼び出して使用する例です。
Sub CallStringToDate()
Dim temp As Date

temp = StringToDate("20150731144000")

MsgBox temp

End Sub

YYYYMMDD形式の日付文字列を日付型に変換するVBAのサンプルプログラム

VBAサンプルプログラム1の応用として時、分、秒まではいらなくて年月日までを表すYYYYMMDD形式の文字列を日付型に変換する場合は不要な部分を削除すればいいだけ。
Function StringToDate(strDate As String) As Date
Dim strYear As String, strMonth As String
Dim strDay As String

'引数として受け取った日付時刻文字列(YYYYMMDD)を
'年、月、日、時、分、秒にバラして各変数に代入
strYear = Left(strDate, 4)
strMonth = Mid(strDate, 5, 2)
strDay = Mid(strDate, 7, 2)

'分解したものをYYYY/MM/DDに作り変えて日付型に変換して返す
StringToDate = CDate(strYear & "/" & strMonth & "/" & strDay)

End Function

使い方はVBAサンプルプログラム1と同じなので割愛。

まとめ

日付を表す文字列をばらして作りなおして型変換という単純な方法です。

Excelであればワークシート関数としても使えます。
もちろんAccessのクエリーの式に指定して使うこともできます。

もう少しかっこいいやり方がないかなと思いましたが、これくらいしか思い浮かびませんでした。

スポンサードリンク

  

関連記事