「マクロ 変数に入っている日付型 月日のみ変更するには」
といった検索キーワードでアクセスがありました。
VBAで「変数に入っている日付型 月日のみ変更」したいのであれば、DateSerial関数を使う方法をマスターしましょう。
VBAで、拙著『いちばんやさしいExcel VBAの教本』等で多用しているローカルウィンドウを使って、変数の中身を目視確認しながらステップ実行することをおすすめします。
変数に格納されている日付データを操作するSubプロシージャ
以下のようなSubプロシージャを用意し、ステップ実行です。
Dim dtm As Date
dtm = DateSerial(2022, 12, 31)
dtm = DateSerial(Year(dtm), Month(dtm), Day(dtm) - 1)
dtm = DateSerial(Year(dtm), Month(dtm) - 1, Day(dtm))
dtm = DateSerial(Year(dtm), Month(dtm) + 1, Day(dtm) + 1)
dtm = DateSerial(Year(dtm), 9, 13)
dtm = DateSerial(Year(dtm) - 1, Month(dtm), Day(dtm))
End Sub
Date型で宣言した変数dtmに「2022年12月31日」を表す日付データを格納しておいてから、
Dim dtm As Date dtm = DateSerial(2022, 12, 31)
変数dtmに格納されているデータを変更するだけのSubプロシージャです。
ローカルウィンドウを使って日付データを操作する様子を確認しよう
まず、
dtm = DateSerial(2022, 12, 31)
まで実行すると、変数dtmには下図のとおり日付データ #2022/12/31# が格納されます。
VBAの、Year関数・Month関数・Day関数の引数に日付データを指定すると、年・月・日を表す整数値をそれぞれ取得できます。
変数dtmに「2022年12月31日」を表す日付が格納されているとき
Year(dtm)は「2022」
Month(dtm)は「12」
Day(dtm)は「31」
をそれぞれ返します。
ですから、
dtm = DateSerial(Year(dtm), Month(dtm), Day(dtm) - 1)
まで実行すると、変数dtmには、日が「- 1」された日付 #2022/12/30# が格納されます。
次の、
dtm = DateSerial(Year(dtm), Month(dtm) - 1, Day(dtm))
まで実行すると、変数dtmには、#2022/12/30# から月が「- 1」された #2022/11/30# が格納されます。
つづく、
dtm = DateSerial(Year(dtm), Month(dtm) + 1, Day(dtm) + 1)
を実行すると、#2022/11/30# の月と日がそれぞれ「+ 1」されて、#2022/12/31# になります。
ここまでは、Year関数・Month関数・Day関数を使ってきましたが、DateSerial関数の引数にはもちろん整数を直接指定できます。
dtm = DateSerial(Year(dtm), 9, 13)
を実行すると #2022/09/13# になります。
最後に、
dtm = DateSerial(Year(dtm) - 1, Month(dtm), Day(dtm))
を実行すると、#2022/09/13# から年が「- 1」された #2021/09/13# になります。
最終更新日時:2022-09-13 15:43
- Newer:段落罫線を設定するWord VBAのサンプル
- Older:Excelで最新の日付を取得する-MAX関数
Home » エクセルマクロ・Excel VBAの使い方 » VBAで変数に格納されている日付データを操作する-DateSerial関数