Excelで日付データを扱っていると、次のようなことはありませんか?
- 2024/01/01 を 20240101 にしたい
- 日付をシステム用の8桁形式に変換したい
- CSV出力や連携用に数値形式にしたい
このような場合は、VBAで日付を8桁の数字(YYYYMMDD)に変換することで簡単に対応できます。
日付型のままだと扱いにくい場面でも、8桁形式にすることで処理しやすくなります。
この記事では、日付データを8桁の数値に変換する方法を初心者向けに分かりやすく解説します。
この記事でできること
- 日付をYYYYMMDD形式に変換できる
- 数値・文字列として扱えるようになる
- 複数セルを一括変換できる
- 実務で使える安全なコードが分かる
基本:日付を8桁の数字に変換するコード
まずは基本コードです。
A1セルの日付を「YYYYMMDD」に変換します。
Option Explicit
Sub ConvertDateTo8Digit()
Dim dt As Date
dt = Range("A1").Value
Range("A1").Value = Format(dt, "yyyymmdd")
End Sub
コードのポイント解説
① Format関数を使う
Format(日付, "yyyymmdd")
日付を指定した形式の文字列に変換できます。
② yyyymmddとは?
- yyyy → 年(4桁)
- mm → 月(2桁)
- dd → 日(2桁)
これで「20240101」のような形式になります。
数値として扱いたい場合
Format関数は文字列を返すため、数値として扱いたい場合は変換します。
Range("A1").Value = CLng(Format(dt, "yyyymmdd"))
これで「20240101」が数値として扱えます。
複数セルを一括変換する方法
A列のデータをまとめて変換する場合はこちらです。
Option Explicit
Sub ConvertColumnTo8Digit()
Dim i As Long
Dim lastRow As Long
lastRow = Cells(Rows.Count, 1).End(xlUp).Row
For i = 1 To lastRow
If IsDate(Cells(i, 1).Value) Then
Cells(i, 1).Value = Format(Cells(i, 1).Value, "yyyymmdd")
End If
Next i
MsgBox "変換が完了しました。", vbInformation
End Sub
IsDateでチェックすることで安全に処理できます。
表示形式だけ変更する方法(元の値はそのまま)
値を変えずに表示だけ変更したい場合はこちらです。
Range("A1").NumberFormat = "yyyymmdd"
この方法なら、日付の内部データはそのままで表示だけ変更できます。
実務でよくある使い方
- CSV出力用データの整形
- システム連携用のデータ作成
- 日付をキーとして比較・検索
- ファイル名に日付を付ける
特に、システム連携では8桁形式がよく使われます。
ファイル名に使う例(実務でよく使う)
Option Explicit
Sub CreateFileName()
Dim fileName As String
fileName = "レポート_" & Format(Date, "yyyymmdd") & ".xlsx"
MsgBox fileName
End Sub
「レポート_20240101.xlsx」のように作れます。
よくあるエラーと対処法
① 日付ではないデータが混ざっている
必ず IsDate でチェックしてください。
② 文字列になってしまう
数値として扱いたい場合は CLng を使いましょう。
③ コードは正しいのにエラーになる
コピー時に全角記号や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- 日付→8桁変換は
Format("yyyymmdd")を使う - 数値にするなら
CLng - 複数セルはループ処理
- IsDateで安全に処理する
日付を8桁の数字に変換できるようになると、データ連携や管理が一気に楽になります。
特に実務では使用頻度が高いので、ぜひ活用してみてください。

コメント