Excel VBAで、固定長データやCSVファイルなどでよく見られる「YYYYMMDD」や「HHMMSS」形式の文字列を、正しい日付型(Date)や時刻型に変換する方法について解説します。Format関数のプレースホルダー「@」を利用することで、効率的かつ簡潔に変換処理を実装できます。
この記事でできること
8桁の年月日文字列(例: “20210623”)および6桁の時分秒文字列(例: “182754”)を、VBAのDate型へ正確に変換する自作関数を作成・実行できるようになります。
前提条件・動作環境
- Microsoft Excel 2010以降(Windows版 / Mac版VBA環境)
- VBEの標準モジュールにコードを貼り付けて実行します。
完全なコード例
以下のコードを標準モジュールに貼り付けて実行してください。
Sub Main_ConvertDateSample()
Dim strDate As String
Dim strTime As String
strDate = "20210623" ' YYYYMMDD
strTime = "182754" ' HHMMSS
' イミディエイトウインドウに出力
Debug.Print "日付変換結果: " & 日付変換(strDate)
Debug.Print "時刻変換結果: " & 時刻変換(strTime)
End Sub
' 文字列(YYYYMMDD)をDate型に変換する関数
Function 日付変換(ByVal targetStr As String) As Date
If Len(targetStr) <> 8 Then
Err.Raise 9999, , "8桁の文字列を指定してください。"
End If
' @を使って書式を適用してからCDateで日付型へ変換
日付変換 = CDate(Format(targetStr, "@@@@/@@/@@"))
End Function
' 文字列(HHMMSS)をDate型に変換する関数
Function 時刻変換(ByVal targetStr As String) As Date
If Len(targetStr) <> 6 Then
Err.Raise 9999, , "6桁の文字列を指定してください。"
End If
' @を使って書式を適用してからCDateで時刻型へ変換
時刻変換 = CDate(Format(targetStr, "@@:@@:@@"))
End Function
コードの要点と解説
Format関数の書式に指定している @ は、文字列内の指定された位置に文字を挿入するためのプレースホルダーです。
Format("20210623", "@@@@/@@/@@")と指定することで、文字列の各文字を維持したままスラッシュを挿入し、"2021/06/23"という日付として認識しやすい文字列に整形しています。- 整形した文字列を
CDate関数で囲むことで、VBA内部で正しく日付型(Date)として扱えるようになります。
実行手順と期待される結果
実行手順:
- Excelを開き、[Alt] + [F11] キーを押してVBE(Visual Basic Editor)を開きます。
- [挿入] > [標準モジュール] をクリックします。
- 上記のコードを貼り付けます。
Main_ConvertDateSampleプロシージャ内にカーソルを置き、[F5] キーを押すか、上部の再生ボタンを押して実行します。
期待されるイミディエイトウインドウの出力:
日付変換結果: 2021/06/23 時刻変換結果: 18:27:54
トラブルシューティング・注意点
文字数が異なるデータが混入する場合:
データ長が欠損している文字列(例: 7桁の数値など)が渡されると、意図しない日付に変換されたり実行時エラーが発生します。実務では IsDate 関数や文字数チェック(Len)を組み合わせてバリデーションを行ってください。
この記事の更新履歴
この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。
2026年9月12日
- 削除不要な空の段落や動作しない空のコードブロックを削除しました。
- 追加固定長データの日付・時刻変換における前提条件、実行手順、期待される出力結果を追加しました。
- 追加無効な文字列が入力された場合のエラー対策として、IsDate関数によるバリデーション処理を追加しました。

