【EXCEL:VBA】何日後・何日前の日付を求めたい

何日後・何日前の日付を知りたい

この記事では、ExcelVBAを利用して「指定した日付の何日後や何日前の日付を求める」方法について説明しています。

 

計画やスケジュールを考えるときに、今日の100日後の日付を知りたい場面があります。

 

また、今日の100日前の日付を知りたい場面もあります。

 

そういったときに役に立つ機能を今回はご紹介します。

 

 

VBAを利用すれば、そういった何日後や何日前の日付を簡単に求めることができます。

 

例えば、以下のような日付だって簡単に求めることもできます。

 

例1)今日の1年後の2ヶ月後の3日後の日付

例2)今日の1000日後の日付

例3)今日の20ヶ月前の日付

 

求めたい日付の以下の条件を指定するだけです。

  • 基準日
  • 何年後(前)
  • 何ヶ月後(前)
  • 何日後(前)

 

また、今回作成する機能(VBA関数)は、セルから呼び出すことができます。

 

 

それでは、指定した日付の何日後・何日前の日付を求める機能を作成していきましょう。

 

困っている女性

計画書を作成するときに、半年後の日付を求めることがよくあるの。

困っている女性

そういう時に、EXCELの標準機能にある「オートフィル」を使って、求めるの。
連続した数値や日付を入力するときに使う機能のことね。基準日を入力したセルを下や横にドラッグしているんだね。

解決する男性

困っている女性

そうそう。でも、半年後だと120日分をドラッグする必要があり、結構手間なの。

困っている女性

簡単に何日後や何日前の日付を求める方法はないの!?
それなら、VBAを使えば簡単に何日後や何日前の日付を求めることができるよ。

解決する男性

しかも、何ヶ月後や何年後だって一瞬で求めることができるよ。

解決する男性

困っている女性

それそれ、早く教えてよ。

 

概要図(指定した日付の何日前・何日後の日付を求める機能)

今回説明する「指定した日付の何日前・何日後の日付を求める機能」の概要図は、以下です。

概要図(指定した日付の何日前・何日後の日付を求める機能)

概要図(指定した日付の何日前・何日後の日付を求める機能)

基準日と年・月・日を指定して、未来または過去の日付を求めることができます。

 

◆EXCEL標準関数の「DATE」を使った何日後や何日前の日付を求める方法は、以下の記事を参照してください。

 

それでは、指定した日付の何日後や何日前を求める機能の作成方法を、1つ1つ順番に説明していきます。

基準日や条件を指定する欄を準備する

まず、基準日・年・月・日を指定する欄と求めた日付を表示する欄を作成します。

「メイン」シートを作成する

メインシートを作成する

メインシートを作成する

 

  1. 「メイン」という名前のシートを作成します。(好きなシート名で構いません)
  2. 1行目に「基準日」、「年」、「月」、「日」、「何日後・何日前」のタイトル行を作成します。
  3. 2行目に「基準日」、「年」、「月」、「日」の入力する欄と求めた日付を表示する欄を作成します。
  4. A2セル(基準日)の表示形式を「日付」にします。
  5. B2セル(年)、C2セル(月)、D2セル(日)の表示形式を「標準」にします。
  6. E2セル(求めた日付)の表示形式を「日付」にします。

 

※今回作成する機能は、VBA関数さえ作成していれば、好きなシートやセルで機能を利用することができます。

 

VBAで何日後・何日前の日付を求める機能を作成する

開発タブの「Visual Basic」をクリックして、「Microsoft Visual Basic for Applications」を起動します。

Microsoft Visual Basic for Applicationsを起動する

Microsoft Visual Basic for Applicationsを起動する

 

「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。

VBAプログラムを入力する

VBAプログラムを入力する

 

標準モジュールを追加して、以下のソースを書きます。

Public Function CalcDate(ByVal baseDate As Date, _
                         ByVal year As Integer, _
                         ByVal month As Integer, _
                         ByVal day As Integer) As Date

    '①基準日の指定された年数後の日付を求める
    CalcDate = DateAdd("yyyy", year, baseDate)
    
    '②①で求めた日付の月数後の日付を求める
    CalcDate = DateAdd("m", month, CalcDate)
    
    '③②で求めた日付の日数後の日付を求める
    CalcDate = DateAdd("d", day, CalcDate)

End Function

 

最後にEXCELを「◯◯◯.xlsm」というような感じでマクロ有効ブック形式で保存します。

 

何日後・何日前の日付を求める機能の使い方

それでは、指定した日付の何日後・何日前の日付を求める方法を説明します。

何日後・何日前の日付を求める機能の使い方

何日後・何日前の日付を求める機能の使い方

 

まず、A2セル(基準日)に好きな日付を入力します。

次に、B2セル(年)、C2セル(月)、D2セル(日)に求めたい条件を入力します。

何年後、何ヶ月後、何日後を求めたい場合は、普通に数字を入力します。

何年前、何ヶ月前、何日前を求めたい場合は、マイナスの数字を入力します。

 

E2セル(求めた日付を表示する欄)には、先程VBAで作成した「CalcDate」関数を指定します。

具体的には、「=CalcDate(A2,B2,C2,D2)」と入力します。

上記の図では、基準日「2021/2/6」の1年後、2ヶ月後、3日後の日付を指定して、「2022/4/9」が表示されています。

 

VBAで作成した関数をセルから呼び出して、利用することができるのです。

驚きましたか?

 

EXCELの標準関数(SUM・INT・ROUNDなど)だけでなく、オリジナルのあなただけの関数を利用することができます。

 

 

今回の記事で本当にお伝えしたかったことは、「自作関数をセルから呼び出せる」ということです。

 

VBAで好きな機能を作成すれば、あなたは標準機能に縛られることなく、自由になれるのです。

 

 

標準関数を駆使して求める複雑な計算は、自作関数にしてしまえば、一発で呼び出せるのです。

 

そうすれば、時間も節約できますし、間違いも無くせますよ。

 

ちなみに、100日後の日付は以下のように入力すれば求めれます。

100日後の日付を求める

100日後の日付を求める

 

さらに、100日前の日付は以下のように入力すれば求めれます。

100日前の日付を求める

100日前の日付を求める

 

実は、A2・B2・C2・D2セルを入力せずとも、直接指定して機能を利用することができます。

以下のように、「CalcDate」関数に基準日(2021/2/6)や日(1日後)を指定すれば、日付を求めれます。

具体的には、E2セルに「=CalcDate(“2021/2/6”,0,0,1)」と入力しています。

直接日付や条件を入力する

直接日付や条件を入力する

また、「CalcDate」関数は、好きなセルに入力できますので、好きなセルで利用することもできます。

 

何日後・何日前の日付を求めるVBA関数(CalcDate)の説明

それでは、自作のVBA関数(CalcDate)を説明します。

セルから呼び出せるように関数宣言する

Public Function CalcDate(ByVal baseDate As Date, _
               ByVal year As Integer, _
               ByVal month As Integer, _
               ByVal day As Integer) As Date

セルから呼び出せるように「Public」のFunction関数を作成します。

引数に、日付型のbaseDate、数値型のyear、数値型のmonth、数値型のdayを指定します。

戻り値には、日付型を指定します。

 

※セルから呼び出したい自作関数は、PublicのFunction関数で作成します。

 

①基準日の指定された年数後の日付を求める

'①基準日の指定された年数後の日付を求める
CalcDate = DateAdd("yyyy", year, baseDate)

ここでは、引数「baseDate」で指定された基準日を利用しています。

引数「year」に指定された年数後(前)の日付を求めています。

 

②①で求めた日付の月数後の日付を求める

'②①で求めた日付の月数後の日付を求める
CalcDate = DateAdd("m", month, CalcDate)

ここでは、引数「month」に指定された月数後(前)の日付を求めています。

基準とする日付は、先程①で求めた日付を利用しています。

 

③②で求めた日付の日数後の日付を求める

'③②で求めた日付の日数後の日付を求める
CalcDate = DateAdd("d", day, CalcDate)

ここでは、引数「day」に指定された日数後(前)の日付を求めています。

基準とする日付は、先程①で求めた日付を利用しています。

最終的に求めた日付を戻り値として、呼び出し元に返しています。

 

それでは、この自作関数を作って、作業を効率化しましょう。

 

以上です。

 

 

最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です