【ExcelVBA・マクロ】8桁の数字を日付に変換する方法|YYYYMMDDを日付型にするコード【コピペOK】

8桁の数字を日付に変換する方法 ExcelVBA

Excelでデータを扱っていると、次のような形式を見たことはありませんか?

  • 20240101 のような8桁の数字
  • 日付なのに文字列や数値として扱われている
  • 日付として計算できない

このような場合は、VBAで8桁の数字を日付に変換することで解決できます。
YYYYMMDD形式のデータを正しく日付として扱えるようになるため、集計や比較がしやすくなります。

この記事では、8桁の数字を日付に変換するVBAコードを初心者向けに分かりやすく解説します。


スポンサーリンク
スポンサーリンク

この記事でできること

  • 8桁の数値を日付に変換できる
  • 文字列・数値どちらにも対応できる
  • 複数セルを一括変換できる
  • エラーにならない安全な書き方が分かる

基本:8桁の数字を日付に変換するコード

まずは基本コードです。
A1セルの「20240101」を日付に変換します。

Option Explicit

Sub ConvertToDate()

    Dim val As String
    Dim resultDate As Date

    val = Range("A1").Value

    resultDate = DateSerial( _
        Left(val, 4), _
        Mid(val, 5, 2), _
        Right(val, 2))

    Range("A1").Value = resultDate

End Sub

コードのポイント解説

① Left / Mid / Rightで分解

Left(val, 4)   ' 年
Mid(val, 5, 2) ' 月
Right(val, 2)  ' 日

8桁の数字を「年・月・日」に分解しています。

② DateSerialで日付に変換

DateSerial(年, 月, 日)

これで正しい日付型に変換されます。


複数セルを一括変換する方法

A列のデータをまとめて変換する場合はこちらです。

Option Explicit

Sub ConvertColumnToDate()

    Dim i As Long
    Dim lastRow As Long
    Dim val As String

    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    For i = 1 To lastRow

        val = Cells(i, 1).Value

        If Len(val) = 8 And IsNumeric(val) Then
            Cells(i, 1).Value = DateSerial( _
                Left(val, 4), _
                Mid(val, 5, 2), _
                Right(val, 2))
        End If

    Next i

    MsgBox "日付変換が完了しました。", vbInformation

End Sub

条件チェックを入れることで、安全に処理できます。


文字列として扱われている場合の対処

「20240101」が文字列でも問題なく変換できます。
ただし、前後にスペースがある場合はTrimを使うと安全です。

val = Trim(Cells(i, 1).Value)

日付表示形式を整える

変換後に表示形式を整える場合はこちらです。

Cells(i, 1).NumberFormat = "yyyy/mm/dd"

見やすい日付表示になります。


実務でよくある活用例

  • CSVデータの取り込み後の変換
  • 基幹システムの出力データ整形
  • 日付での並び替え・集計
  • 期間計算(差分日数など)

8桁日付はシステム連携で非常によく使われる形式です。


よくあるエラーと対処法

① 8桁以外でエラーになる

次の条件チェックを必ず入れてください。

If Len(val) = 8 And IsNumeric(val) Then

② 日付がおかしくなる

「20241301」など存在しない日付はエラーになります。
データの正当性も確認してください。

③ コードは正しいのにエラーになる

コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。


さらに安全な書き方(エラー回避)

エラーを出さずに処理する場合はこちらです。

On Error Resume Next

Cells(i, 1).Value = DateSerial( _
    Left(val, 4), _
    Mid(val, 5, 2), _
    Right(val, 2))

On Error GoTo 0

まとめ

  • 8桁日付は分解してDateSerialで変換する
  • Left / Mid / Rightが基本
  • 複数セルはループで処理
  • 条件チェックでエラー防止

8桁の数字を日付に変換できるようになると、データ処理の幅が大きく広がります。
特にCSVやシステムデータを扱う方には必須のテクニックなので、ぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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