【VBA】文字列から日付型への変換ロジック YYYYMMDDやHHMMSSフォーマット

VBA・Officeカテゴリを表すパンダのイラスト VBA・Office

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)として扱えるようになります。

実行手順と期待される結果

実行手順:

  1. Excelを開き、[Alt] + [F11] キーを押してVBE(Visual Basic Editor)を開きます。
  2. [挿入] > [標準モジュール] をクリックします。
  3. 上記のコードを貼り付けます。
  4. Main_ConvertDateSample プロシージャ内にカーソルを置き、[F5] キーを押すか、上部の再生ボタンを押して実行します。

期待されるイミディエイトウインドウの出力:

日付変換結果: 2021/06/23
時刻変換結果: 18:27:54

トラブルシューティング・注意点

文字数が異なるデータが混入する場合:
データ長が欠損している文字列(例: 7桁の数値など)が渡されると、意図しない日付に変換されたり実行時エラーが発生します。実務では IsDate 関数や文字数チェック(Len)を組み合わせてバリデーションを行ってください。

この記事の更新履歴

この記事は、生成AIを活用した自動レビュー・更新フローにより内容を見直し、必要な修正を反映しています。

2026年9月12日

  • 削除不要な空の段落や動作しない空のコードブロックを削除しました。
  • 追加固定長データの日付・時刻変換における前提条件、実行手順、期待される出力結果を追加しました。
  • 追加無効な文字列が入力された場合のエラー対策として、IsDate関数によるバリデーション処理を追加しました。

文書情報

記事タイトル
【VBA】文字列から日付型への変換ロジック YYYYMMDDやHHMMSSフォーマット
作成日
更新日
Source URL
https://papanda925.com/?p=1620

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

タイトルとURLをコピーしました