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やシステムデータを扱う方には必須のテクニックなので、ぜひ活用してみてください。


コメント