日付時刻がYYYYMMDDhhmmss形式で表された文字列を日付型のデータ(YYYY/MM/DD HH:MM:SS)に変換するVBAのサンプルプログラムを覚書。
例えば、20150731090000を日付型の2015/7/31 9:00:00に変換するとういう感じ。
応用としてYYYYMMDDをYYYY/MM/DDの日付型に変換するサンプルプログラムも紹介します。
紹介するサンプルプログラムは、VBA共通で使えるのでExcelでもAccessでも使用できます。
YYYYMMDDhhmmss形式の日付時刻を表す文字列を日付型のデータに変換する処理の概要
YYYYMMDDhhmmss形式の日付時刻を表す文字列を日付型のデータに変換する処理の考え方としてはすごく単純です。
YYYYMMDDhhmmss形式の文字列をYYYY、MM、DD、hh、mm、ssにバラバラにしてそれを用意した各変数に一旦代入しておき、各変数(年、月、日、時、分、秒)を通常の日付を表す形式(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のクエリーの式に指定して使うこともできます。
もう少しかっこいいやり方がないかなと思いましたが、これくらいしか思い浮かびませんでした。
コメント