• ベストアンサー

日付の加算

日付Aと日付Bとの差を算出する方法についてはDateDifというのがあるそうですが、 逆に日付AからX年Y月Z日後の日付を算出する関数またはカンタンな処理式があれば教えて下さい。 なお、Excelは97を使用しています。

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

  • ベストアンサー
回答No.2

X年Y月Z日後を何日後か変換するのはちょっと難しいような気がします。 うるう年を含むとか、30日や31日があるので(その辺を踏まえて計算すれば別ですけど) A2セルに日付 C2セルに年後(Xのみの数字) D2セルに月後(Yのみの数字) E2セルに日後(Zのみの数字) が入っているとして(X年Y月Z日で入っていると分解するのが面倒なので) =DATE(YEAR(A2)+C2,MONTH(A2)+D2,DAY(A2)+E2) でどうですか? 単純に年にX、月にY、日にZを足して日付型に変換しています。 年、月の繰り上がりは勝手にしてくれるので大丈夫だと思います。 分解が必要だと、かなり長い式になってしまうような・・・

meu350
質問者

お礼

ちょっとセル数を食うのが難ですけど,この方法が一番楽でした. 一度設定を組んでしまえば,修正や変更もOKですし.

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • comv
  • ベストアンサー率52% (322/612)
回答No.6

こんばんは >2001/の後が?なんですけど… 出したい結果が?だと式の立てようがないと思うのですが 例えば 単純に計算すると 1999/1/30 の 2年1月1日後は? では  2年後 2002年  1ヶ月 2月  1日  31日 となってしまいますが 2002/2/31 は存在しないので 2月末からの3日後の 2002/3/3 とするのか あくまでも月末基準で 2002/2/28 とするのかが 2002/1/29 や 2002/1/28 の 2年1月1日後 も 同様にどのような結果を望まれているのかが 「1999/2/27 の 2年1月1日後は?」の場合は 単純に足すと 2001/3/28 ですが 2月の1日後は月末なので 2001/3/31 と元日を基準に かえすのかが 1999/2/28(月末) も同様で 2002/3/29 なのか 2001/3/31 なのかが 1999/4/30 の 2年1月1日後 も同様で4月の月末に 対し 2002/5/31とするのか 2002/5/31(月末)+1日 の2002/6/1 を返すのかが決まっていないと正しく計算 されません

全文を見る
すると、全ての回答が全文表示されます。
  • ka3
  • ベストアンサー率18% (36/194)
回答No.5

 恐らく、『X年Y月Z日後』と入力されても、200X年と変換される為にお困りなんだと推測します。  そこで、単純に、2000年を減算する式では如何でしょうか ?  =[A]+([X年Y月Z日]-[1999/12/31])

meu350
質問者

補足

試しに,回答4&5の方法でやってみました. セルAに日付A,セルBに日付B,セルCに1999/12/31(又は2000/1/1)を入れ, =A+B-C(又はA+B-C+1)としたのですが, 回答2とは違う結果が出てしまいました(回答4&5の結果は同じ). コレって何故なんでしょう?

全文を見る
すると、全ての回答が全文表示されます。
  • ka3
  • ベストアンサー率18% (36/194)
回答No.4

 恐らく、『X年Y月Z日後』と入力されても、200X年と変換される為にお困りなんだと推測します。  そこで、単純に、2000年を減算する「([2000/1/1]+1)」式では如何でしょうか ?  =[A]+([X年Y月Z日]-([2000/1/1]+1))

全文を見る
すると、全ての回答が全文表示されます。
  • comv
  • ベストアンサー率52% (322/612)
回答No.3

こんにちは 経過期日の考え方には、特定のケースでの規則性を補足 して頂く必要があると思います 1999/1/30 の 2年1月1日後は? → 2001/ 1999/1/29 の 2年1月1日後は? → 2001/ 1999/1/28 の 2年1月1日後は? → 2001/ 1999/2/27 の 2年1月1日後は? → 2001/ 1999/2/28 の 2年1月1日後は? → 2001/ 1999/4/30 の 2年1月1日後は? → 2001/

meu350
質問者

補足

2001/の後が?なんですけど…

全文を見る
すると、全ての回答が全文表示されます。
  • KODAMAR
  • ベストアンサー率26% (267/1006)
回答No.1

X年Y月Z日後、というよりZ日後とすれば簡単じゃないでしょうか? 日付Aに足せばいいわけですから =日付A+Z とすればOKですよ。

meu350
質問者

補足

説明不足で申し訳ありません。 特許満了日の計算をするとき、 『昭和55年6月6日から22年4ヶ月17日後』とか『平成11年8月2日から4年7ヶ月6日後』とかいう細かい計算になってしまうので、 単純に『?日後』で加算できないんです。 『X年Y月Z日後』=『?日後』の変換が容易になれば、教えてくださった方法でも充分なのですけど、知識不足でその辺の方法を知らないんです…。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 2つの日付の中間の日付 エクセル 関数

    日付Aと日付Bの中間の日付を算出する関数を教えてください。 例:2013/01/01、2013/12/31の中間=2013/07/02 一度にたくさん計算できるようにエクセルに関数を組んでやりたいです。 よろしくお願いいたします。

  • EXCEL DATEDIF関数について

    質問があります。 EXCELのDATEDIF関数で日付の期間内の年数、月数、日数、時間を2つのデーターから算出したいのですが、うまくできません。 そもそもDATEDIF関数では時間に対しては対応できないのでしょうか? また算出できる方法が有れば教えて頂けないでしょうか? データー基(例) A,14/04/30 00:01 B,14/05/02 05:03 宜しくお願い致します。

  • EXCEL-セル範囲の自動取得する。

    EXCELにて、セル範囲を自動で求めて計算に使用したいのですが 今セルA1に日付けデータが B1にデータが入っています。 Y2で日付06/05におけるデータの最小値を求めたいのですが、セルAには06/05は2つとは限りません。Y1の06/05の日付けと一致するAのセルからデータ範囲B1-B?までを自動的に算出し、MIN関数の範囲としてセルに入れたいのですが、可能でしょうか?あるいはVBAで作成可能でしょうか? Y1のセル計算式    =MIN(B1:B?)  B1:B?を自動的に求めたい。    A(日付) B(データ)    X    Y  Z 1 06/05   6.5      日付  6/5 6/5 2 06/05   5.0      最小値    ←B1~B?の最小 3 06/05    ・ 4  ・    ・ よろしくお願いします。

  • VBAでの年齢計算がうまくいきません。

    失礼いたします。  VBAで年齢の計算を行いたいのですがなかなかうまくいきません。 =sub Dim 開始日付 As String Dim 終了日付 As String Dim 年齢 As String 開始日付 = "S54/4/1" 終了日付 = "H22/4/1" 年齢 = "=DATEDIF(開始日付,終了日付,""Y"")" =endsub としても、DATEDIF関数は引数をうまく処理してくれないのです。 エクセル関数を使わずに、年齢を算出するか。 エクセル関数内に引数を代入する方法があれば教えていただけないでしょうか?

  • 3点を通る二次関数のグラフの求め方

    3点を通る二次関数の式を求めたいです。 条件は以下の通りです。 ・(3,3)を通る ・軸は(0,y) ・(a,b)を通る ただし(-3≧a≧3)(b≧0) 取得された(a,b)の座標を代入すればグラフ表示されるようにしたいです。 どのような式になりますか? 以下試しましたがうまくいきませんでした。 頂点(0,z),点(3,3)を通る二次関数 y=ax^(2)+z a=-1/9z+1/3 よって y=(-1/9z+1/3)x^(2)+z ”y=(-1/9z+1/3)x^(2)+z”この式に (1.5,1.5)を通る放物線を求めようと代入してzを求め、 z=-1 としてY=4/9x^(2)-1をだしましたが(3,3)を通りませんでした。 よろしくお願いいたします。

  • エクセルで年月の合計の関数を教えてください。

    エクセルで2つの日付から年月数を求める関数(=TEXT(DATEDIF(A1,BI,"Y"),"0年;;")&TEXT(DATEDIF(A1,B1,"YM"),"0ヶ月;;")で出た期間の合計を出す関数を教えてください。(たとえば,2年6ヶ月と1年3ヶ月を足し,3年9ヶ月となるように) よろしくお願いします。

  • 年齢算出関数教えて下さい

    年齢算出関数で今まで =DATEDIF(A1,B1,"Y")A1は1937/2/27 B1は2004/3/22 と入れてで計算されましたが、今M20.15.20という様に出てきます。 なぜでしょうか。

  • ラグランジュの未定乗数法

    いつも有り難く利用させていただいております。 今回は、ラグランジュの未定乗数法について少々お聞きしたいのですが、 http://www004.upp.so-net.ne.jp/s_honma/derivative/lagrange.htm のラグランジュの未定乗数法の説明のところで、("A_x"でAをxで偏微分することを意味している) 制約条件をG( x , y , z )=0 、( a , b , c )で、極致を求めたい関数をF(x , y , z )としておくと、  このとき、G( x , y , z )=0 から、z が x , y の関数になっているとすると、関数F は x , y の関数になるので、( a , b , c )において、       F_x+F_z・z_x=0 、 F_y+F_z・z_y=0 が成り立つ。  ここで、z_x 、z_y は、次の式により与えられる。       G_x+G_z・z_x=0 、 G_y+G_z・z_y=0 そこで、( a , b , c )における -F_z/G_z の値を、λ とおくと、 F_z+λG_z=0 が成り立ち、 さらに、F_x+λG_x=0 、 F_y+λG_y=0 が成り立つ。  したがって、4つの式 G=0 、F_x+λG_x=0 、F_y+λG_y=0 、F_z+λG_z=0 を解くことにより、極値を与える候補の点( a , b , c )が求められる。 と、記載されているのですが、 G( x , y , z )=0 から、z が x , y の関数になっているとすると、関数F はx , y の関数になるので、( a , b , c )において、       F_x+F_z・z_x=0 、 F_y+F_z・z_y=0 が成り立つ。  ここで、z_x 、z_y は、次の式により与えられる。       G_x+G_z・z_x=0 、 G_y+G_z・z_y=0 の部分の、 F_x+F_z・z_x=0 、 F_y+F_z・z_y=0 と、 G_x+G_z・z_x=0 、 G_y+G_z・z_y=0 の式はどのようにして出てきているのでしょうか?

  • DATEIF関数で算出した結果の件

    (1)DATEIF関数を使用する際に満の経過日数を算出したい場合どのような作業を行えばよろしいでしょうか? 例)  開始日……2000/01/01     終了日……2000/01/01     経過日数…0年1ヶ月 というふうに同じ日付でも1カ月と算出するにはどのような関数を入力すればよろしいのでしょうか? =DATEDIF(A1,B1,"Y")&"年"&DATEDIF(A1,B1,"YM")&"ヶ月" 上記の関数を入力すると、結果が0年0ヶ月となってしまいます。 (2)DATEIF関数で算出した経過日数の平均を出したいのですが、 文字列扱いになっているのか、AVRAGE関数が使用できません。 どのような関数を使用すれば、またはどのような作業を行えば良いのでしょうか? 試行錯誤していますが、本当に分からなく質問致しました。 よろしくお願い致します。

  • SQL Sever での日付の差の求め方(月単位小数付き)

    Oracle で日付の差を求める関数に「months_between」 というものがあり、日付A(yyyy-mm-dd)と 日付B(yyyy-mm-dd)の差(A<B の場合)を算出する時は、 select months_between(B ,A) from dual; で算出できます。 しかも、日付差が何ヶ月で返ってきて、月の端数は 小数点以下として返ります。 これを、SQL Server で実現しようとした場合、 どのようにすればよいでしょうか? SQL Server には「datediff」という関数があり、 時間単位を'm'に設定すれば日付差が月で返って きますが、小数点以下が確か切り捨てられたように 記憶しています。 何とかして、小数点以下も算出できる方法を ご存知の方がいらっしゃいましたら、 お教えください。 宜しくお願い致します。 以上

専門家に質問してみよう