カレンダー確認作業、もうやめませんか?
こんにちは、ぐーです!
「2月は28日までかな?それとも今年はうるう年?」と、その都度カレンダーをめくって確認するのは、意外と手間がかかる作業ですよね。
手作業にはどうしても入力ミスや確認漏れがつきまといますが、プログラムを活用すれば、どんな複雑な月でも正確に処理が可能です。
今回はVBA(マクロ)を使い、わずか一行のコードで「月末の日付」を瞬時に割り出すテクニックをご紹介します。
鍵を握るのは「DateSerial関数」
今回活用するのは、日付データを作成するDateSerial(デイトシリアル)関数です。
通常はDateSerial(2025, 12, 25) のように「年、月、日」を正しく指定して使いますが、月末を求めたいときには少し特殊な書き方をします。
DateSerial(年, 月 + 1, 0)
なぜ「0日」で月末がわかるのか?
「カレンダーに0日なんてないのでは?」と疑問に思われたかもしれません。ここが最大のポイントです。
VBAの仕様では、「翌月の1日」の1日前を「0日」と指定することで、自動的に「今月の末日」として解釈してくれる仕組みになっています。
例えば「4月の末日」を知りたい場合、「5月の0日」を指定するだけで、システムが自動的に「4月30日」を導き出してくれます。これなら、月によって「30日か31日か」を意識したり、うるう年の判定を自作したりする必要は一切ありませんね。
コピペで使える!今月の末日を表示するコード
まずは、そのまま使える基本のコードをご紹介します。標準モジュールに貼り付けて実行するだけで、今月の末日がメッセージボックスに表示されます。
Sub ShowEndOfMonth()
Dim today As Date
Dim endOfMonth As Date
' 今日の日付を取得
today = Date
' 今月の「翌月」の「0日」を指定することで、自動的に月末日になる
endOfMonth = DateSerial(Year(today), Month(today) + 1, 0)
' 結果を表示
MsgBox "今月の末日は " & endOfMonth & " です!"
End Sub
応用:特定の日付から月末を求める「汎用関数」
実務では「今日」だけでなく、「セルに入力された日付」の月末を知りたい場面も多いでしょう。そんな時は、以下のような関数(Function)を作っておくと非常に便利です。
' 引数で渡した日付の月末日を返す関数
Function GetLastDay(targetDate As Date) As Date
GetLastDay = DateSerial(Year(targetDate), Month(targetDate) + 1, 0)
End Function
' 関数の動作テスト用プロシージャ
Sub TestFunction()
' 2024年2月(うるう年)の場合
MsgBox GetLastDay("2024/2/1") ' 結果:2024/02/29
End Sub
この「0日指定」のテクニックをマスターして、より正確で効率的なマクロ開発を目指しましょう!
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント