• ベストアンサー

Excelでの日にちの関数を作成したい

今仕事で日程表を作っています。 そこで、今日から8ヵ月後の1日前の日程を日付関数を使ってしたいのですが、何かやり方はありますか。 例えばA1のセルで2005年4月15日から8ヵ月後の1日前の日にち(2005年12月14日)をB1のセルに入れたいのです。 2005年6月10日から8ヶ月後の1日前の日にちの場合は2006年2月9日となるのですが、同じような作業を手入力でやっているのがとても面倒です。 何か方法があれば教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 基本的には、 =DATE(YEAR(A1),MONTH(A1)+8,DAY(A1))-1 になります。 ただし、この数式だと、例えばA1が「2004/10/31」の場合、「2005/6/30」になります。 (8ヶ月後の6月に31日が存在しないため) これを、「2005/6/29」を返すようにしたいなら、以下のような数式にします。 =EDATE(A1,8)-1 ただし、EDATE関数は分析ツールの関数なので、メニューの[ツール]→[アドイン]→[分析ツール]にチェックを入れて下さい。 もし、分析ツールが使用出来ない場合は、 =MIN(DATE(YEAR(A1),MONTH(A1)+8,DAY(A1)),DATE(YEAR(A1),MONTH(A1)+9,0))-1 でEDATE関数の数式と同じ結果になります。

norinnonorin
質問者

お礼

早速のご回答ありがとうございました。 私の知りたい情報は「基本的には~」という関数式で 充分間に合いました。 私の頭の引き出しに入れておきます。 ありがとうございました。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

年をまたぐ可能性がありますので、ワークシート関数でやるよりも、いっそのことユーザー定義関数を作成してしまった方が早いかもしれません。ただ、すぐVBAに頼るのは安易すぎるかもしれませんが、、 VBAならば、DateAdd関数があります。ワークシート関数としては用意されていませんので、ユーザー定義関数を作成します。 以下のコードを標準モジュールに貼り付けて使用します。 <手順> 1. [Alt]+[F11]キー押下で、Visual Basic Editor が起動します。 2. メニューから[挿入]-[標準モジュール]をクリック 3. 開いたウィンドウに次のコードをコピー&ペースト Function MonthAdd(基準日 As Date, 加算月数 As Integer) As Date   MonthAdd = DateAdd("m", 加算月数, 基準日) End Function 4. Visual Basic Editor を終了 以上で、普通のワークシート関数のように、MonthAdd関数が使用可能になります。 例えば、A1セルに 2004/12/1 の8ヶ月後の前日を求めるなら、 =MonthAdd("2004/12/1",8)-1 と数式を書き込みます。ユーザー定義関数 MonthAdd は基準日に指定した月数を加えた日付を返しますので、最後に -1 とすることで、前日の日が取得できます。

norinnonorin
質問者

お礼

早速のご回答ありがとうございます。 でも私の頭ではVBAが難しいです・・・ もう少し勉強します。 ありがとうございました。

関連するQ&A