【VBA】 日付関数DateAdd・DateDiff・DatePartで簡単に日数計算
目次
DateAdd関数の使い方
DateAdd関数は、指定した期間(インターバル)を日付に加算するための関数です。
書式は次の通りです。
DateAdd(interval, number, date)
各パラメータの意味は以下の通りです。
- interval : 加算する期間の種類を指定します。文字列で指定し、例えば “yyyy”(年)、”q”(四半期)、”m”(月)、”d”(日)、”h”(時)、”n”(分)、”s”(秒)などがあります。
- number : 加算する期間の数を指定します。正の数の場合は未来の日付に、負の数の場合は過去の日付になります。
- date : 基準となる日付を指定します。VBAでは日付リテラルは
#
で囲んで表記します(例:#2025/02/13#
)。
例えば、今日の日付から10日後の日付を取得する場合は、次のように書きます。
Dim newDate As Date newDate = DateAdd("d", 10, #2025/02/13#) ' 2025/02/23 を返す
また、月単位で加算する例を示すと、3か月後の日付を求めるには以下のようになります。
Dim futureDate As Date futureDate = DateAdd("m", 3, #2025/02/13#) ' 2025/05/13 を返す
この関数を使えば、時間や分、秒など、さまざまな単位で日付の加算が可能です。負の値を指定することで、過去の日付を求めることもできます。
DateDiff関数の使い方
DateDiff関数は、2つの日付の間隔(差分)を指定した単位で求めるための関数です。
書式は以下の通りです。
DateDiff(interval, date1, date2, [firstdayofweek], [firstweekofyear])
主なパラメータの説明は以下の通りです。
- interval : 差分を求める単位を示します。例えば、”yyyy”(年)、”q”(四半期)、”m”(月)、”d”(日)、”h”(時)、”n”(分)、”s”(秒)などがあります。
- date1 と date2 : 比較する2つの日付です。
※注意点として、date2からdate1を引いた値が返されるため、順序によって結果が変わります。 - firstdayofweek (省略可能) : 週の最初の日を指定します。標準では
vbSunday
などの定数が使われます。 - firstweekofyear (省略可能) : 年の最初の週の定義を指定します。
vbFirstJan1
などが利用されます。
例えば、2025年2月13日から2025年3月1日までの日数差を求める場合は、次のように書きます。
Dim diffDays As Long diffDays = DateDiff("d", #2025/02/13#, #2025/03/01#) ' 16日差が返される
また、年単位の差を求める例として、以下のように記述できます。
Dim diffYears As Long diffYears = DateDiff("yyyy", #2025/02/13#, #2030/02/13#) ' 5年差が返される
さらに、時間の差を求める例として、2つの日時の間の分単位の差を計算する場合は、以下のようになります。
Dim diffMinutes As Long diffMinutes = DateDiff("n", #2025/02/13 08:00:00#, #2025/02/13 10:30:00#) ' 150分差が返される
DatePart関数の使い方
DatePart関数は、指定した日付の一部分(年、月、日、曜日、時間など)を抽出するための関数です。
書式は次のようになります。
DatePart(interval, date, [firstdayofweek], [firstweekofyear])
パラメータの意味は以下の通りです。
- interval : 抽出する日付部分の種類を指定します。
例: “yyyy”(年)、”q”(四半期)、”m”(月)、”d”(日)、”w”(曜日)、”h”(時)、”n”(分)、”s”(秒)など。 - date : 日付または日時を指定します。
- firstdayofweek と firstweekofyear (省略可能) : 週や年の最初の定義を指定します。
例えば、2025年2月13日の「月」部分だけを取り出す場合は、以下のように記述します。
Dim monthPart As Integer monthPart = DatePart("m", #2025/02/13#) ' 結果は 2
曜日を取得する場合は “w” を使用します。なお、返される値はシステムの設定や firstdayofweek の指定に依存しますが、例えば以下のように書けます。
Dim weekdayPart As Integer weekdayPart = DatePart("w", #2025/02/13#) ' システムの設定によっては、1 が日曜日、2 が月曜日... のような値が返される
また、時間部分を取得する例として、以下のコードを参照してください。
Dim hourPart As Integer hourPart = DatePart("h", #2025/02/13 15:45:00#) ' 結果は 15(午後3時)
その他のポイントと注意点
ここでは、VBAで日付関数を使用する際のいくつかの重要なポイントと注意点をまとめます。
-
日付リテラルの形式 : VBAでは日付リテラルを
#
で囲んで表記します。例えば#2025/02/13#
のように書きます。システムのロケールに依存するため、国際環境での開発時は注意が必要です。 - interval引数の正確な指定 : 各関数で指定するintervalの値は、正確な文字列(例:”d”、”m”、”yyyy” など)を使用する必要があります。間違った値を指定するとエラーになります。
- 正の数・負の数の使い分け : DateAdd関数では、numberに正の数を指定すると未来の日付、負の数を指定すると過去の日付が返されます。DateDiff関数では、引数の順序に注意してください。通常、date2からdate1を引いた値が返されます。
-
オプションパラメータの利用 : DateDiffやDatePartでは、
firstdayofweek
やfirstweekofyear
のオプションパラメータを指定することで、週の開始日や年の最初の週の定義をカスタマイズできます。国やプロジェクトのルールに合わせて設定すると良いでしょう。 -
エラーハンドリング : 日付操作を行う際には、無効な日付や範囲外の値が指定された場合のエラーに注意してください。実際のプログラムでは、エラーハンドリング(例:
On Error
ステートメント)を適切に実装することをお勧めします。
以上の関数を組み合わせることで、VBAでの日付操作が非常に柔軟かつ強力になります。各関数の特性を理解し、実際のコードで試してみることで、より効果的に日付の計算や抽出が可能となります。