この記事では、ExcelVBAを利用して「指定した日付の何日後や何日前の日付を求める」方法について説明しています。
計画やスケジュールを考えるときに、今日の100日後の日付を知りたい場面があります。
また、今日の100日前の日付を知りたい場面もあります。
そういったときに役に立つ機能を今回はご紹介します。
VBAを利用すれば、そういった何日後や何日前の日付を簡単に求めることができます。
例えば、以下のような日付だって簡単に求めることもできます。
例1)今日の1年後の2ヶ月後の3日後の日付
例2)今日の1000日後の日付
例3)今日の20ヶ月前の日付
求めたい日付の以下の条件を指定するだけです。
- 基準日
- 何年後(前)
- 何ヶ月後(前)
- 何日後(前)
また、今回作成する機能(VBA関数)は、セルから呼び出すことができます。
それでは、指定した日付の何日後・何日前の日付を求める機能を作成していきましょう。
困っている女性
困っている女性
解決する男性
困っている女性
困っている女性
解決する男性
解決する男性
困っている女性
もくじ
概要図(指定した日付の何日前・何日後の日付を求める機能)
今回説明する「指定した日付の何日前・何日後の日付を求める機能」の概要図は、以下です。
基準日と年・月・日を指定して、未来または過去の日付を求めることができます。
◆EXCEL標準関数の「DATE」を使った何日後や何日前の日付を求める方法は、以下の記事を参照してください。
【EXCEL:DATE関数】指定日後の日付を計算したい
それでは、指定した日付の何日後や何日前を求める機能の作成方法を、1つ1つ順番に説明していきます。
基準日や条件を指定する欄を準備する
まず、基準日・年・月・日を指定する欄と求めた日付を表示する欄を作成します。
「メイン」シートを作成する
- 「メイン」という名前のシートを作成します。(好きなシート名で構いません)
- 1行目に「基準日」、「年」、「月」、「日」、「何日後・何日前」のタイトル行を作成します。
- 2行目に「基準日」、「年」、「月」、「日」の入力する欄と求めた日付を表示する欄を作成します。
- A2セル(基準日)の表示形式を「日付」にします。
- B2セル(年)、C2セル(月)、D2セル(日)の表示形式を「標準」にします。
- E2セル(求めた日付)の表示形式を「日付」にします。
※今回作成する機能は、VBA関数さえ作成していれば、好きなシートやセルで機能を利用することができます。
VBAで何日後・何日前の日付を求める機能を作成する
開発タブの「Visual Basic」をクリックして、「Microsoft Visual Basic for Applications」を起動します。
「Microsoft Visual Basic for Applications」にVBAプログラムを入力します。
標準モジュールを追加して、以下のソースを書きます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
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日前の日付は以下のように入力すれば求めれます。
実は、A2・B2・C2・D2セルを入力せずとも、直接指定して機能を利用することができます。
以下のように、「CalcDate」関数に基準日(2021/2/6)や日(1日後)を指定すれば、日付を求めれます。
具体的には、E2セルに「=CalcDate(“2021/2/6”,0,0,1)」と入力しています。
また、「CalcDate」関数は、好きなセルに入力できますので、好きなセルで利用することもできます。
何日後・何日前の日付を求めるVBA関数(CalcDate)の説明
それでは、自作のVBA関数(CalcDate)を説明します。
セルから呼び出せるように関数宣言する
1 2 3 4 |
Public Function CalcDate(ByVal baseDate As Date, _ ByVal year As Integer, _ ByVal month As Integer, _ ByVal day As Integer) As Date |
引数に、日付型のbaseDate、数値型のyear、数値型のmonth、数値型のdayを指定します。
戻り値には、日付型を指定します。
※セルから呼び出したい自作関数は、PublicのFunction関数で作成します。
①基準日の指定された年数後の日付を求める
1 2 |
'①基準日の指定された年数後の日付を求める CalcDate = DateAdd("yyyy", year, baseDate) |
引数「year」に指定された年数後(前)の日付を求めています。
②①で求めた日付の月数後の日付を求める
1 2 |
'②①で求めた日付の月数後の日付を求める CalcDate = DateAdd("m", month, CalcDate) |
基準とする日付は、先程①で求めた日付を利用しています。
③②で求めた日付の日数後の日付を求める
1 2 |
'③②で求めた日付の日数後の日付を求める CalcDate = DateAdd("d", day, CalcDate) |
基準とする日付は、先程①で求めた日付を利用しています。
最終的に求めた日付を戻り値として、呼び出し元に返しています。
それでは、この自作関数を作って、作業を効率化しましょう。
以上です。
最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。