
No.4ベストアンサー
- 回答日時:
#01です。
すこし簡単に考えすぎましたね。#03さんのご指摘のように契約日がずっと昔で、複数年契約の自動更新のパターンが考慮できていませんでした。理屈は#03さんと一緒ですが、こんな式でもできます。#01でも書きましたが「ツール」→「アドイン」で「分析ツール」にチェックが必要です。
=EDATE(A1,CEILING(YEARFRAC(A1,TODAY(),1),B1)*12)-1
No.5
- 回答日時:
今現在で1年先1日前、満了日をだすのは
=IF(TODAY()>A1,DATE(YEAR(A1)+1,MONTH(A1),DAY(A1)-1),A1)
のような式でできるかなと思う。
しかし満了日は次ぎの年になれば、今の満了日の列に、計算した満了日を入れたいだろうと思う。次々列を増やせないから。
関数では、計算に使ったデータのセルの値を、計算後の値で置き換えることができない。
ーー
それで契約日(A列)を元にするほうが良い
A列契約日を元に計算すると計算がややこしい。
=DATE(YEAR(A1)+DATEDIF(A1,TODAY(),"y")+1,MONTH(A1),DAY(A1)-1)
ーー
満了日(B列)を元にやるとすると
VBAでやらざるを得ないようにおもう。
WorkbookのOpenイベントにでも
Sub test01()
d = Range("a65536").End(xlUp).Row
For i = 1 To d
If Date > Cells(i, "B") Then
dd = Cells(i, "B")
Cells(i, "B") = DateSerial(Year(dd) + 1, Month(dd), Day(dd) - 1)
Else
End If
Next i
End Sub
No.3
- 回答日時:
http://oshiete1.goo.ne.jp/qa3433656.htmlでも書いたんですが、
=datedif(起算日,today(),"Y")+datedif(起算日,today(),"YD")/365
とすると経過年数の小数表示ができます。これをふまえて、
期間が1年の場合、経過年数が1年以下だったら1年後,2年以下だっ
たら2年後を返せばいいので、切り上げでいいような気がします。で
も期間が5年だったら…念のため=ceiling(経過年数,期間)というこ
とにしましょう。それなら期間が5年で経過年数が1.2年とかの場合
に5年後になりそうです。
zap35さんのedateを流用させてもらうと、
=edate(A1,ceiling(datedif(A1,today(),"y")+datedif(A1,today(),"yd")/365,B1)*12)-1
という感じですね。
=datedif(起算日,today(),"Y")+datedif(起算日,today(),"YD")/365
とすると経過年数の小数表示ができます。これをふまえて、
期間が1年の場合、経過年数が1年以下だったら1年後,2年以下だっ
たら2年後を返せばいいので、切り上げでいいような気がします。で
も期間が5年だったら…念のため=ceiling(経過年数,期間)というこ
とにしましょう。それなら期間が5年で経過年数が1.2年とかの場合
に5年後になりそうです。
zap35さんのedateを流用させてもらうと、
=edate(A1,ceiling(datedif(A1,today(),"y")+datedif(A1,today(),"yd")/365,B1)*12)-1
という感じですね。
この回答へのお礼
お礼日時:2007/10/18 09:25
ありがとうございます。
試したところ、契約日がtodayより後の場合にはエラーになってしましました・・・
そういったケースも割りとあるので、できれば未来の契約日に関しても満了日が反映するようにさせたいのです。
申し訳ありません。
No.2
- 回答日時:
長い数式になりますが、次の方法は如何でしょうか。
=IF(TODAY()<=DATE(YEAR(A1)+1,MONTH(A1),DAY(A1))-1,DATE(YEAR(A1)+1,MONTH(A1),DAY(A1)-1),DATE(YEAR(A1)+2,MONTH(A1),DAY(A1)-1))
No.1
- 回答日時:
A1に「2006/11/1」の日付が、B1に「1」の数字があるとき、
=EDATE(A1,B1*12)
で1年後の日付である「2007/11/1」を求められます。満了日はその1日前ですから
=EDATE(A1,B1*12)-1
になります。(関数の2番目の引数は月数なので12を掛けています。またセルの書式は「日付」にしてください)
またEDATE関数は「ツール」→「アドイン」で「分析ツール」にチェックを入れないと使用できませんのでご注意ください
質問では「本日」が満了日を過ぎていたら次の満了日を表示したいとのことですので
=IF(EDATE(A1,B1*12)-1<TODAY(),EDATE(A1,B1*24)-1,EDATE(A1,B1*12)-1)
で良いと思います
なおB列は計算に使用していますので「数値」を入力してください。表示に「年」をつけたいならセルの書式で「0"年"」とすれば、「1」と入力したとき「1年」と表示されます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのVBAで集計をしたい
-
【マクロ】変数に入れるコード...
-
【マクロ】実行時エラー '424':...
-
エクセルのリストについて
-
エクセルの関数について
-
【マクロ】元データと同じお客...
-
【マクロ】左のブックと右のブ...
-
【マクロ】数式を入力したい。...
-
【マクロ】【相談】Excelブック...
-
【画像あり】オートフィルター...
-
【マクロ】【配列】3つのシー...
-
他のシートの検索
-
Office2021のエクセルで米国株...
-
vba テキストボックスとリフト...
-
エクセルの複雑なシフト表から...
-
【関数】3つのセルの中で最新...
-
LibreOffice Clalc(またはエク...
-
【マクロ】excelファイルを開く...
-
エクセルシートの見出しの文字...
-
【関数】=EXACT(a1,b1) a1とb1...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
おすすめ情報