日付型ってそもそも何者?
まず一番大事なところからいきます。
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
VBA1 が日付として入力されていれば、
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# ' 日付型
VBs は「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)
VBCDate は「文字列などを日付型に変換する」関数です。
これで 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
VBDateSerial(年, 月, 日) は、
「年・月・日から日付型を作る」関数です。
セルから取る場合も同じです。
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
VBDate は「今日の日付(時刻なし)」を返します。
日付+時刻が欲しいとき:Now
Dim dt As Date
dt = Now
VBNow は「今この瞬間の“日付+時刻”」を返します。
時刻だけ欲しいとき:Time
Dim t As Date
t = Time
VBTime は「現在時刻だけ」を返します(中身は Date 型)。
これらも全部 Date 型の仲間です。
「今日から7日後」「今から2時間後」などの計算も、
Date 型として扱えばそのまま足し算・引き算で書けます。
まとめ:日付型は「日付を“数値として扱えるようにする”ための型」
日付型(Date)の本質は、
「日付や時刻を、“計算できる値”として扱うための型」
です。
押さえておきたいポイントをコンパクトにまとめると、
日付型は Date で宣言し、#2026/2/23# のように代入できる
日付型同士の足し算・引き算で「日付のずらし」「日数差」が求められる
文字列の “2026/2/23” と、日付型の #2026/2/23# は別物
文字列→日付は CDate、年・月・日→日付は DateSerial が便利
今日の日付は Date、今の日時は Now で取れる
