今回はDateSerial関数を使用して月初や月末などの日付を指定する方法をご説明します。
DateSerial関数を使うことで月初や末尾が月によって変わる、月末の取得が簡単にできます。
日付の指定方法は「IsDate」「DateValue」「DateSerial」「DateAdd」「DateDiff」と色々ありますが、今回はこの「DateSerial関数」を使用した方法になります。
月末、月初の指定方法と併せて、「Format関数」と併用する方法やループで日付を指定する方法もご説明します。
その他、日付の指定方法などは下記記事をご覧ください。
- IsDate関数の使い方と日付に変換する方法
- DateValue関数、TimeValue関数の使い方と日付、時刻の変換方法
- DateAdd関数の使い方と何日(時間)後を取得する方法
- DateDiff関数の使い方と2つの日付の日数をループする
1.DateSerial関数の使い方
「DateSerial関数」の使い方です。
DateSerial関数は「年、月、日」をそれぞれ整数で指定する事で日付を指定する事ができます。
次の様に「DateSerial(Year, Month, Day)」と記述します。
DateSerial(2019, 1, 10)
図の様に日付に変換されます。
2.月初、月末の指定方法
月初は「1日」で固定ですので簡単ですが、月末となると毎月末日が変わってしまいます。
「DateSerial(Year, Month, Day)」のDayの部分を1とすると1日、0とすると前月末となります。
この「整数で指定」出来る事と、「0で1つ前の月の月末」を指定できる仕様を利用して指定したい末日を指定する事ができます。
Sub Sample1()
'当日
Debug.Print DateSerial(Year(Now), Month(Now), Day(Now))
'当月月初
Debug.Print DateSerial(Year(Now), Month(Now), 1)
'当月末
Debug.Print DateSerial(Year(Now), Month(Now) + 1, 0)
'翌月月初
Debug.Print DateSerial(Year(Now), Month(Now) + 1, 1)
'翌月末
Debug.Print DateSerial(Year(Now), Month(Now) + 2, 0)
'前月月初
Debug.Print DateSerial(Year(Now), Month(Now) - 1, 1)
'前月末
Debug.Print DateSerial(Year(Now), Month(Now), 0)
'当日の前年
Debug.Print DateSerial(Year(Now) - 1, Month(Now), Day(Now))
'当日の来年
Debug.Print DateSerial(Year(Now) + 1, Month(Now), Day(Now))
End Sub
この様に、「Year」、「Month」、「Day」に整数を加算、減算する事で各月初、月末の指定から、前年、来年まで指定可能です。
3.月や年は自動計算される
ここで、それぞれの年、月、日を加算し続けると年や月を計算してくれるのか疑問になるかと思いますが、こちらも自動で計算されます。
月と日で、年や月が計算されるか検証してみます。
次のコードは月に±12か月、日に±100日を加算してみます。
Sub Sample2()
'当日から+12か月
Debug.Print DateSerial(Year(Now), Month(Now) + 12, Day(Now))
'当日から-12か月
Debug.Print DateSerial(Year(Now), Month(Now) - 12, Day(Now))
'当日から+100日
Debug.Print DateSerial(Year(Now), Month(Now), Day(Now) + 100)
'当日から-100日
Debug.Print DateSerial(Year(Now), Month(Now), Day(Now) - 100)
End Sub
無事月や日でも年も月も計算してくれます。
4.DateSerialとFormat関数と併せて使用する
日付の表示形式を指定して出力したい場合に「Format関数」と併せて使用すると、「DateSerial」で指定した日付の表示形式を変更する事ができます。
Sub Sample3()
'標準
Debug.Print DateSerial(Year(Now), Month(Now), 1)
'変換
Debug.Print Format(DateSerial(Year(Now), Month(Now), 1), "yyyy/m/d")
'変換
Debug.Print Format(DateSerial(Year(Now), Month(Now), 1), "yyyy/m")
'変換
Debug.Print Format(DateSerial(Year(Now), Month(Now), 1), "yyyy/mm")
End Sub
5.ループで日付を指定する
ループで日付を指定するサンプルコードです。
年、月、日に変数で加算する事で各月を指定します。
次のコードは当月も含めるため「0 To 11」としていますが、来月以降の場合は「1 To 12」とすることで来月から12か月分ループします。
Sub Sample4()
Dim i As Long
For i = 0 To 11
Debug.Print DateSerial(Year(Now), Month(Now) + i, 1)
Next i
End Sub