文字列の数字の羅列14文字を日付+時刻の表示に
一括で変換したいのですが・・・
文字列:20080101000000 ⇒ 2008/01/01 00:00:00
範囲:任意の列にある2行目から最終行まで
・日付と時刻の間に半角スペースあり
2008/01/01 00:00:00⇒半角19文字
・表示形式は文字列
・数字は固定ではない(日付も時刻も内容はどれも異なる)
教えていただくと大変助かります。
宜しくお願い致します。
下記は文字列として扱う例です。
変換対象範囲を選択して、実行してください。
'------------------------------------------------ ' 14桁の文字列を日付形式の文字列として変換 '------------------------------------------------ Sub TimeConvAsStr() '------------------------------------------------ Dim dt As Double Dim r As Range For Each r In Selection If Len(r.Value) = 14 Then dt = DateSerial(CInt(Left(r.Value, 4)), CInt(Mid(r.Value, 5, 2)), CInt(Mid(r.Value, 7, 2))) _ + TimeValue(Mid(r.Value, 9, 2) & ":" & Mid(r.Value, 11, 2) & ":" & Mid(r.Value, 13, 2)) r.Value = Format(dt, "yyyy/mm/dd hh:mm:ss") End If Next End Sub
ただ、せっかくの時間情報ですが文字列として扱いたいのでしょうか。
下記は時間情報として変換し、セルの書式で対応した例です。
'------------------------------------------------ ' 14桁の文字列を日付時間型として保存 ' 表示はデータの書式で設定 '------------------------------------------------ Sub TimeConvAsDateTime() '------------------------------------------------ Dim dt As Double Dim r As Range For Each r In Selection If Len(r.Value) = 14 Then dt = DateSerial(CInt(Left(r.Value, 4)), CInt(Mid(r.Value, 5, 2)), CInt(Mid(r.Value, 7, 2))) _ + TimeValue(Mid(r.Value, 9, 2) & ":" & Mid(r.Value, 11, 2) & ":" & Mid(r.Value, 13, 2)) r.NumberFormatLocal = "yyyy/mm/dd hh:mm:ss" r.Value = dt End If Next End Sub
後者であれば時間として扱えますので、時間ごとに差を取ったり、日にちごとに集計したりといったことが可能です。
文字列で扱いたいというケースもあると思いますが、利用方法を含めてデータ型を使い分けると良いかと思います。
EXCEL は整数部分を日にち(1990/1/1からの通算日数)、小数部分を時間(24時間を1とした小数)で日付、時間情報を
管理しています。
解決しました!
たしかに時間で管理した方が後々使えそうですっ (*^_^*)
参考URLもありがとうございます!