人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

ExcelVBAです。

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

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

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

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



●質問者: hananeko_0
●カテゴリ:ビジネス・経営 コンピュータ
✍キーワード:00 数字 文字列
○ 状態 :終了
└ 回答数 : 1/4件

▽最新の回答へ

1 ● Mook
●60ポイント ベストアンサー

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

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


'------------------------------------------------
' 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

◎質問者からの返答

解決しました!

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ