請求書作成や勤怠管理など、毎月の業務で「月初日」と「月末日」を入力する作業は地味に手間がかかります。しかも、月によって末日が変わるため、毎回カレンダーで確認しながら入力する方も多いのではないでしょうか。
このような作業は、Excel VBAを使えば自動化できます。一度組んでおけば、ボタンひとつで月初日・月末日を自動入力できるようになります。
月初日と月末日を取得するコード
次のコードでは、アクティブなシートのA1セルに月初日、B1セルに月末日を入力します。
Sub setFirstAndLastDate()
Dim base As Date
base = Date ' 今日の日付を基準にする
' 月初日をA1に入力
Range("A1").Value = DateSerial(Year(base), Month(base), 1)
' 月末日をB1に入力
Range("B1").Value = DateSerial(Year(base), Month(base) + 1, 0)
End Sub
このコードのポイントは、DateSerial関数を使って「○月1日」や「○月0日(=前月の末日)」を簡単に取得していることです。
たとえば、2025年7月15日を基準にすると次のようになります。
DateSerial(2025, 7, 1)→ 2025/7/1DateSerial(2025, 8, 0)→ 2025/7/31
月が変わるたびに自動で対応できるため、2月やうるう年でも正しく月末を取得できます。
実装するメリット
このマクロを使うメリットは、単なる時短にとどまりません。
- 日付の入力ミスを防げる:カレンダーを見ながら入力する必要がなくなる
- 処理の一貫性を保てる:どのブックでも同じロジックで日付が入る
- 応用しやすい構造:基準日を変えれば、他の月も対応可能
- 他のマクロと連携可能:請求書や勤怠表の自動生成と組み合わせやすい
特に毎月発生する帳票業務では、「まず月初と月末を入力する」工程が必ず出てくるため、業務の最初の面倒をなくすという意味で非常に効果的です。
基準日を変更する応用パターン
業務によっては「特定の月の月初・月末がほしい」こともあります。その場合は、次のように基準日を任意で指定すれば対応できます。
Sub setTargetMonth()
Dim base As Date
base = DateValue("2025/10/10") ' 任意の日付を指定
Range("A1").Value = DateSerial(Year(base), Month(base), 1)
Range("B1").Value = DateSerial(Year(base), Month(base) + 1, 0)
End Sub
たとえば、「翌月分の帳票を先に作っておく」など、月をまたいだ作業でも同じロジックで使えます。
また、次のように入力セルを変えたり、書式を整えたりすることも可能です。
Range("A1:B1").NumberFormatLocal = "yyyy/m/d"
これで、表示形式も統一され、資料としても見やすくなります。
まとめ
月初日と月末日を自動で取得するマクロは、単純なようでいて日常業務のミスやムダを確実に減らしてくれます。
DateSerial関数を使うことで、うるう年や2月末も正しく処理できる- 今日の日付を基準にすれば、いつでもその月の情報を取得できる
- 日付計算のミスや確認作業が減り、業務全体がスムーズになる
毎月のルーティン業務に組み込むことで、最初のひと手間を自動化し、全体の作業効率を底上げできます。シンプルながら効果の大きいマクロとして、ぜひ取り入れてみてください。


