Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで前月の1日を取得する

VBAで前月の1日を取得する

対象:Excel2010, Excel2013, Windows版Excel2016

「vba 前月 1日 取得」
という検索キーワードに気づきました。

VBAに限らない、日付計算の定番的な疑問です。

[スポンサードリンク]

前月の1日を取得するサンプルマクロ

以下のSubプロシージャを実行すると、前月1日の日付が、メッセージボックスに表示されます。
Sub 前月の1日を取得する()
 MsgBox _
   DateSerial(Year(Now), Month(Now) - 1, 1)
End Sub

年・月・日をバラバラにして計算して再度日付データにする

こういった日付計算は、年・月・日をバラバラにしてから計算を行い、再度日付データにするのが基本です。

Excelのワークシート上で、前月の1日の日付データが必要な場合、
  =DATE(YEAR(TODAY()), MONTH(TODAY())-1, 1)
といった数式をセルに入力します。

VBAでの考え方も同じです。

VBAの関数と、ワークシート関数とで別の関数が使われていますが、考え方はまったく同じです。

年・月・日を表す数値から日付データを取得する、ワークシート関数のDATE関数に似ているのが、

VBAで前月の1日を取得する

VBA関数のDateSerial関数です。

VBAで前月の1日を取得する

なお、Year関数やMonth関数は、たまたまVBA関数とワークシート関数とが、同じ綴りで、同じように日付データから年・月を表す数値を返しますが、もちろん別モノです。
ワークシート上で使われるYEAR・MONTHはワークシート関数で、VBAのYear・MonthはあくまでもVBAの関数です。

DateSerial関数より単なる引き算

前月を求めるために月を「- 1」している部分は、
   DateSerial(Year(Now), Month(Now) - 1, 1)
VBAのDateAdd関数を使った例も見かけますが、DateAdd関数が頻出するようなモジュールなどでなければ、上記プロシージャのように演算子で引き算するほうが、可読性が高いと感じます。

Date関数よりNow関数

Year関数・Month関数の引数には、Now関数ではなく、VBAで今日の日付を返すDate関数を使って、
   DateSerial(Year(Date), Month(Date) - 1, 1)
としてもOKですけれど、Now関数のほうが意味がよりわかりやすく、可読性が高いと感じます。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » VBA関数 » VBAで前月の1日を取得する

「VBA関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.