Excel VBA 逆引き集 | 日付の表示形式

Excel VBA
スポンサーリンク

日付の表示形式

「yyyy/mm/dd」「yyyy年m月d日」「時刻」「曜日つき」から、列全体への一括設定、先頭ゼロ、提出用整形まで。初心者が迷わない最短コードと安全テンプレートでまとめます。基本は Range.NumberFormat(環境非依存)か NumberFormatLocal(日本語ロケール)を使います。


基本:よく使う日付・時刻の表示形式

Sub DateFormatBasics()
    '西暦:2025/12/03
    Range("C2").NumberFormat = "yyyy/mm/dd"

    '西暦:2025-12-03(区切りをハイフン)
    Range("C3").NumberFormat = "yyyy-mm-dd"

    '年月日:2025年12月3日(日本語)
    Range("C4").NumberFormatLocal = "yyyy年m月d日"

    '時刻:21:03:00(24時間制)
    Range("D2").NumberFormat = "hh:mm:ss"

    '日時:2025/12/03 21:03
    Range("D3").NumberFormat = "yyyy/mm/dd hh:mm"
End Sub
VB
  • ポイント: NumberFormat は英語書式。日本語表記にしたいときは NumberFormatLocal を使うと楽。

曜日入り・月名入り・和暦などの表現

Sub DateFormatWithWeekday()
    '曜日(短縮):2025/12/03 (水)
    Range("E2").NumberFormatLocal = "yyyy/mm/dd (aaa)"

    '曜日(完全):2025/12/03 水曜日
    Range("E3").NumberFormatLocal = "yyyy/mm/dd aaaa"

    '和暦:令和7年12月3日
    Range("E4").NumberFormatLocal = "ggge年m月d日"

    '英語月名:Dec 03, 2025
    Range("E5").NumberFormat = "mmm dd, yyyy"

    '英語月名(フル):December 3, 2025
    Range("E6").NumberFormat = "mmmm d, yyyy"
End Sub
VB
  • ポイント: 日本語の曜日は「aaa/aaaa」。和暦は「ggge」を使います。英語月名は「mmm/mmmm」。

列全体・表全体に一括設定(動的最終行)

Sub FormatDateColumns()
    Dim last As Long
    'C列:日付列の最終行を取得
    last = Cells(Rows.Count, "C").End(xlUp).Row

    'C列を西暦 yyyy/mm/dd に
    Range("C3:C" & last).NumberFormat = "yyyy/mm/dd"

    'D列が日時なら yyyy/mm/dd hh:mm に
    last = Cells(Rows.Count, "D").End(xlUp).Row
    Range("D3:D" & last).NumberFormat = "yyyy/mm/dd hh:mm"
End Sub
VB
  • ポイント: 最終行は基準列から取得して、意図した範囲だけに適用する。

文字列を日付として扱うときの安全手順

Sub ParseStringToDateAndFormat()
    '文字列を日付に変換してから表示形式を設定
    Dim r As Range
    For Each r In Range("B3:B10")
        If IsDate(r.Value) Then
            r.Value = CDate(r.Value)
        End If
    Next
    Range("B3:B10").NumberFormat = "yyyy/mm/dd"
End Sub
VB
  • ポイント: 文字列のままでは書式が効かないことがあるため、CDate などで日付型に変換してから書式指定。

入力前に書式を決めておく(崩れ防止)

Sub PrepareDateColumnBeforeInput()
    '先に書式を設定 → 値を書き込み
    With Range("C3:C20")
        .NumberFormat = "yyyy/mm/dd"
        .Value = WorksheetFunction.Transpose(Array(#2025/12/01#, #2025/12/02#, #2025/12/03#, #2025/12/04#, #2025/12/05#, #2025/12/06#, #2025/12/07#, #2025/12/08#, #2025/12/09#, #2025/12/10#, #2025/12/11#, #2025/12/12#, #2025/12/13#, #2025/12/14#, #2025/12/15#, #2025/12/16#, #2025/12/17#, #2025/12/18#, #2025/12/19#, #2025/12/20#))
    End With
End Sub
VB
  • ポイント: 表示形式→値の順にすると安定。日付リテラルは #yyyy/mm/dd# で正しく入る。

ユーザー入力に応じて書式を切り替える

Sub ToggleDateFormat()
    Dim rng As Range: Set rng = Range("C3:C100")
    Dim useJapanese As Boolean
    useJapanese = (MsgBox("日本語表記(yyyy年m月d日)にしますか?", vbYesNo) = vbYes)

    If useJapanese Then
        rng.NumberFormatLocal = "yyyy年m月d日"
    Else
        rng.NumberFormat = "yyyy/mm/dd"
    End If
End Sub
VB
  • ポイント: 共有相手の環境に合わせて切替できると運用が楽。

日付+時刻を見やすく整える(提出用)

Sub SubmissionFriendlyDateTime()
    Dim last As Long
    last = Cells(Rows.Count, "B").End(xlUp).Row

    '日時列(B):yyyy/mm/dd hh:mm、中央揃え、幅調整
    With Range("B3:B" & last)
        .NumberFormat = "yyyy/mm/dd hh:mm"
        .HorizontalAlignment = xlCenter
    End With

    '日付列(C):yyyy年m月d日、週報ヘッダーは強調
    With Range("C3:C" & last)
        .NumberFormatLocal = "yyyy年m月d日"
    End With
    With Range("B2:C2")
        .Font.Bold = True
        .Interior.Color = RGB(221, 235, 247)
        .HorizontalAlignment = xlCenter
    End With

    Columns("B:C").AutoFit
End Sub
VB
  • ポイント: 表示形式と装飾(中央揃え・太字・背景色)は分けて設定すると読みやすい。

例題で練習

例題1:日付列を「yyyy/mm/dd」、時刻列を「hh:mm」に一括設定

Sub Example_FormatDateTimeColumns()
    Dim lastDate As Long, lastTime As Long
    lastDate = Cells(Rows.Count, "C").End(xlUp).Row
    lastTime = Cells(Rows.Count, "D").End(xlUp).Row
    Range("C3:C" & lastDate).NumberFormat = "yyyy/mm/dd"
    Range("D3:D" & lastTime).NumberFormat = "hh:mm"
End Sub
VB

例題2:曜日つき日本語表記に

Sub Example_JapaneseWeekday()
    Dim last As Long
    last = Cells(Rows.Count, "E").End(xlUp).Row
    Range("E3:E" & last).NumberFormatLocal = "yyyy年m月d日 (aaa)"
End Sub
VB

例題3:和暦で提出(令和表記)

Sub Example_JapaneseEra()
    Dim last As Long
    last = Cells(Rows.Count, "F").End(xlUp).Row
    Range("F3:F" & last).NumberFormatLocal = "ggge年m月d日"
End Sub
VB

実務の落とし穴と対策

  • 文字列扱いで書式が効かない: CDate や DateValue で日付型に変換してから書式を設定する。
  • 環境差で見え方がズレる: 共有相手が英語環境なら NumberFormat、国内運用なら NumberFormatLocal が楽。
  • 日付と時刻が混在: 「yyyy/mm/dd hh:mm」など統一の日時書式に寄せる。
  • 大量範囲で遅い: Application.ScreenUpdating=False を併用し、必要範囲だけに絞って適用。
  • 先に値を貼っても崩れる: できれば表示形式→値の順。外部データの文字列日付は変換してから書式。
タイトルとURLをコピーしました