[ExcelVBA] 指定月の最初日と最終日の日付を取得する関数
![[ExcelVBA] 指定月の最初日と最終日の日付を取得する関数](https://ateitexe.com/wp-content/uploads/2021/04/210423eye.jpg)
何か処理をするときに何日から何日までって日付で挟むことないですか? それが、「この月」っていう範囲なことないですか? スタートの1日はともかく、最終日は30か31か、はたまた28か29か、その都度取得しなきゃいけないのが微妙に面倒で、頻繁じゃないけどたま~に書くので、そろそろ面倒になってきて関数化しました。多分ググればいっぱい出てくるけど。
オレオレ関数専用functionsモジュールへ
私は自分用にいくつか汎用的なモジュールを持っていて、新しく何か作るときにインポートして使ってるんですが、そのなかに「functions」という名前の標準モジュールがあります。
これはその名のとおり関数を書いてあるモジュールで、たまに使う微妙にめんどくさいやつ(特定の名前のシートの存在有無を調べるとか、シートの最終端を取得するとか、アルファベットに対応する数値を取得するとか)を関数化してストックしてるので、今回そこに追記したオレオレ関数です。
月の最初日を取得する関数
Public Function getFirstDay(tgtDay As Date) As Date '## 指定月の1日を日付型で取得 getFirstDay = Year(tgtDay) & "/" & Month(tgtDay) & "/1" '1日を返す End Function
最初日はどの月も1日なので別に関数化するほどのものでもなく、これはお好みです。ただ単にセットで作りたかっただけ。
月の最終日を取得する関数
Public Function getLastDay(tgtDay As Date) As Date '## 指定月の最終日を日付型で取得 Dim tmpDay As Date tmpDay = Year(tgtDay) & "/" & Month(tgtDay) & "/1" '1日 tmpDay = DateAdd("m", 1, tmpDay) '+1月して翌月の1日にする tmpDay = DateAdd("d", -1, tmpDay) '翌月の1日から-1日で最終日にする getLastDay = tmpDay '最終日を返す End Function
こっちが欲しかったほう。翌月の1日にしてから-1日することで、30か31かはたまた28か29か悩むことがありません。
使う側の記述
Dim firstDay As Date firstDay = getFirstDay(Date) '今月の最初日を日付型で取得 Dim lastDay As Date lastDay = getLastDay(Date) '今月の最終日を日付型で取得
例では本日の日付を関数に渡してるので「今月」を取得することになりますが、渡す日付を変えれば違う月を取得できます。関数を用意しておくと記述がスッキリしていいですよね。
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問にお応えする企画を行っています。プログラミングなどでお困りのことがあれば、お問い合わせページからお気軽にご相談をお寄せください。