Excel VBA | 超初心者(Excel操作+マクロ体験):基本文法 - 日付型

Excel VBA VBA
スポンサーリンク

日付型ってそもそも何者?

まず一番大事なところからいきます。
VBAの「日付型(Date)」は、「見た目は日付や時刻だけど、中身は“日付・時刻として計算できる数値”」です。

セルに「2026/02/23」と表示されていても、
文字列として扱うのか、日付として扱うのかで、できることがまったく変わります。

文字列としての “2026/02/23” は、
「ただの文字の並び」なので、足したり引いたりしても日付計算にはなりません。

日付型の #2026/02/23# は、
「2026年2月23日という“日付情報”」として扱われるので、
「1日足す」「7日引く」「2つの日付の差を求める」といった計算ができます。

ここを理解しているかどうかで、日付処理の難易度が一気に変わります。


日付型の宣言と代入の基本

変数宣言の形

日付型の変数は、こう宣言します。

Dim d As Date
VB

「Date」という型名を使います。
この d の中には、「日付」も「時刻」も入れられます。

日付リテラル(# で囲む書き方)

VBAでは、日付や時刻を直接書くとき、
# で囲むという独特のルールがあります。

Dim d As Date

d = #2026/2/23#
VB

これで d には「2026年2月23日」という日付が入ります。
時刻も含めることができます。

d = #2026/2/23 14:30#
VB

この書き方を「日付リテラル」と呼びます。
文字列の “2026/2/23” と混同しないように、
「#で囲まれていたら“日付としての値”」と覚えておくといいです。

セルの値をそのまま Date に入れる

セルに日付が入っている場合は、
そのまま Date 型の変数に代入できます。

Dim d As Date

d = Range("A1").Value
VB

A1 が日付として入力されていれば、
d は日付型として扱えるようになります。


日付型の一番おいしいところ:足し算・引き算ができる

「1日後」「7日前」を簡単に求められる

日付型は、「日付+数値」=「その日付から数値日だけずらした日付」
というルールで計算できます。

Sub SampleDateAdd()

    Dim d As Date

    d = #2026/2/23#

    MsgBox d              ' 2026/2/23
    MsgBox d + 1          ' 2026/2/24(1日後)
    MsgBox d - 7          ' 2026/2/16(7日前)

End Sub
VB

ここでのポイントは、

「日付型に対して +1 すると“1日後”、-1 すると“1日前”になる」

ということです。
文字列では絶対にできない動きです。

2つの日付の差は「日数」になる

日付型同士の引き算は、「日数の差」になります。

Sub SampleDateDiff()

    Dim d1 As Date
    Dim d2 As Date
    Dim diff As Long

    d1 = #2026/2/23#
    d2 = #2026/3/5#

    diff = d2 - d1   ' 日数差

    MsgBox diff      ' → 10(10日差)

End Sub
VB

「締め日から何日経ったか」「締切まであと何日か」
といった計算が、日付型ならそのまま引き算で書けます。


日付型と文字列型の違いをはっきり意識する

見た目が同じでも「型」が違うと別物

例えば、次の2つは見た目は似ていますが、中身は別物です。

Dim s As String
Dim d As Date

s = "2026/2/23"   ' 文字列
d = #2026/2/23#   ' 日付型
VB

s は「2」「0」「2」「6」「/」…という文字の並び。
d は「2026年2月23日という日付情報」。

s に +1 しても、文字列としての結合になったりエラーになったりしますが、
d に +1 すると「1日後」になります。

文字列から日付型に変換する(CDate)

セルに入っている値が「文字列としての日付」の場合、
日付型として扱いたければ、CDate で変換します。

Dim s As String
Dim d As Date

s = "2026/2/23"
d = CDate(s)
VB

CDate は「文字列などを日付型に変換する」関数です。
これで d は日付として計算できるようになります。

逆に、日付型を文字列として表示したいときは、
Format 関数を使います(ここでは軽く触れるだけにします)。

Dim txt As String
txt = Format(d, "yyyy/mm/dd")
VB

「日付として計算したいのか」「文字として見せたいだけなのか」
ここを意識して、Date と String を行き来できるようになると、一気に楽になります。


DateSerial / DateValue で「年・月・日」から日付を作る

年・月・日をバラで持っているとき

例えば、年・月・日を別々の変数やセルで持っている場合、
それらを組み合わせて1つの日付型にしたいことがあります。

Sub SampleDateSerial()

    Dim y As Long
    Dim m As Long
    Dim d As Long
    Dim dt As Date

    y = 2026
    m = 2
    d = 23

    dt = DateSerial(y, m, d)

    MsgBox dt   ' → 2026/2/23

End Sub
VB

DateSerial(年, 月, 日) は、
「年・月・日から日付型を作る」関数です。

セルから取る場合も同じです。

dt = DateSerial(Range("A1").Value, Range("B1").Value, Range("C1").Value)
VB

文字列から日付を作る DateValue

CDate と似ていますが、
「日付部分だけを取りたい」ときに DateValue を使うこともあります。

Dim dt As Date
dt = DateValue("2026/2/23")
VB

超初心者の段階では、
「文字列→日付は CDate」「年・月・日→日付は DateSerial」
くらいを押さえておけば十分です。


今日の日付・現在時刻を扱う Date / Now / Time

今日の日付だけ欲しいとき:Date

Dim today As Date
today = Date
VB

Date は「今日の日付(時刻なし)」を返します。

日付+時刻が欲しいとき:Now

Dim dt As Date
dt = Now
VB

Now は「今この瞬間の“日付+時刻”」を返します。

時刻だけ欲しいとき:Time

Dim t As Date
t = Time
VB

Time は「現在時刻だけ」を返します(中身は Date 型)。

これらも全部 Date 型の仲間です。
「今日から7日後」「今から2時間後」などの計算も、
Date 型として扱えばそのまま足し算・引き算で書けます。


まとめ:日付型は「日付を“数値として扱えるようにする”ための型」

日付型(Date)の本質は、

「日付や時刻を、“計算できる値”として扱うための型」

です。

押さえておきたいポイントをコンパクトにまとめると、

日付型は Date で宣言し、#2026/2/23# のように代入できる
日付型同士の足し算・引き算で「日付のずらし」「日数差」が求められる
文字列の “2026/2/23” と、日付型の #2026/2/23# は別物
文字列→日付は CDate、年・月・日→日付は DateSerial が便利
今日の日付は Date、今の日時は Now で取れる

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