VBAで日付を扱うとき、次のようなことはありませんか?
- 年・月・日を指定して日付を作りたい
- 月末日を取得したい
- 日付計算を柔軟に行いたい
このような場合は、DateSerial関数を使うことで簡単に解決できます。
年・月・日を指定して日付を生成できるため、日付計算の基本となる重要な関数です。
この記事では、DateSerialの基本から実務で使える応用までを初心者向けに分かりやすく解説します。
この記事でできること
- 年・月・日から日付を作成できる
- 月末日を取得できる
- 日付の計算が簡単にできる
- 実務で使えるパターンが分かる
基本:DateSerial関数の使い方
基本構文はこちらです。
DateSerial(年, 月, 日)
例:
MsgBox DateSerial(2024, 1, 1)
→ 2024/01/01 が表示されます。
DateSerialのポイント
- 日付型(Date型)として返される
- 年・月・日を個別に指定できる
- 範囲外の値も自動調整される(重要)
変数を使った例
Dim y As Long
Dim m As Long
Dim d As Long
y = 2024
m = 5
d = 10
MsgBox DateSerial(y, m, d)
セルの値から日付を作成する
Dim dt As Date
dt = DateSerial(Range("A1").Value, Range("B1").Value, Range("C1").Value)
MsgBox dt
A1=年、B1=月、C1=日として日付を作成できます。
月末日を取得する方法(超重要)
DateSerialは「翌月の0日」を指定することで月末日を取得できます。
Dim lastDay As Date
lastDay = DateSerial(2024, 2 + 1, 0)
MsgBox lastDay
→ 2024/02/29(うるう年)
ポイント:
- 月 + 1 → 翌月
- 日 = 0 → 前月の最終日
日付の加算・減算
DateSerialは日付計算にも便利です。
1ヶ月後
DateSerial(Year(Date), Month(Date) + 1, Day(Date))
1日前
DateSerial(Year(Date), Month(Date), Day(Date) - 1)
範囲外の値が使える仕組み
DateSerialは、範囲外の値も自動調整されます。
DateSerial(2024, 13, 1)
→ 2025/01/01
DateSerial(2024, 1, 0)
→ 2023/12/31
この仕様を利用すると、日付計算が簡単になります。
実務でよく使うパターン
① 月初日を取得
DateSerial(Year(Date), Month(Date), 1)
② 月末日を取得
DateSerial(Year(Date), Month(Date) + 1, 0)
③ 指定月の開始日・終了日
Dim startDate As Date
Dim endDate As Date
startDate = DateSerial(2024, 5, 1)
endDate = DateSerial(2024, 5 + 1, 0)
Formatと組み合わせる
Format(DateSerial(2024, 1, 1), "yyyymmdd")
→ 20240101
よくあるエラーと対処法
① 型が一致しません
年・月・日は数値で指定してください。
② 意図しない日付になる
範囲外の値が自動補正されている可能性があります。
③ コードは正しいのにエラーになる
コピー時に全角文字や特殊文字が混ざることがあります。
その場合は該当行を手入力し直すと解決することがあります。
まとめ
- DateSerialで日付を作成できる
- 年・月・日を個別に指定可能
- 月末取得や日付計算で大活躍
- 範囲外補正を理解すると強力
DateSerialを使いこなせるようになると、日付処理の自由度が大きく向上します。
特に月末計算は実務で頻出なので、ぜひ覚えておきましょう。


コメント