ExcelVBAです。


文字列の数字の羅列14文字を日付+時刻の表示に
一括で変換したいのですが・・・

文字列:20080101000000 ⇒ 2008/01/01 00:00:00
範囲:任意の列にある2行目から最終行まで

・日付と時刻の間に半角スペースあり
  2008/01/01 00:00:00⇒半角19文字
・表示形式は文字列
・数字は固定ではない(日付も時刻も内容はどれも異なる)

教えていただくと大変助かります。
宜しくお願い致します。

回答の条件
  • 1人3回まで
  • 登録:
  • 終了:2008/11/01 00:40:37
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Mook No.1

回答回数1314ベストアンサー獲得回数393

ポイント60pt

下記は文字列として扱う例です。

変換対象範囲を選択して、実行してください。


'------------------------------------------------
' 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とした小数)で日付、時間情報を

管理しています。

http://excel.onushi.com/function/date-time.htm

http://support.microsoft.com/kb/214094/ja

id:hananeko_0

解決しました!

たしかに時間で管理した方が後々使えそうですっ (*^_^*)

参考URLもありがとうございます!

2008/11/01 00:39:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません