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.

. pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy