[ExcelVBA] 指定月の最初日と最終日の日付を取得する関数

[ExcelVBA] 指定月の最初日と最終日の日付を取得する関数

何か処理をするときに何日から何日までって日付で挟むことないですか? それが、「この月」っていう範囲なことないですか? スタートの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) '今月の最終日を日付型で取得

例では本日の日付を関数に渡してるので「今月」を取得することになりますが、渡す日付を変えれば違う月を取得できます。関数を用意しておくと記述がスッキリしていいですよね。

公開日:2021/04/23

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)