- ベストアンサー
最新受診日から次の受診日を表示する関数(再度)
- 質問者は、最新の受診日から次の受診日を計算する関数について質問しています。
- 質問者は、受診日と年齢によって次の受診日を計算する方法を知りたいと述べています。
- 前回の回答には問題があり、受診期限が正しく計算されないと質問者が指摘しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A4セルには、次の数式を入力されると良いと思います。 =IF(AND(ISNUMBER(A$2),ISNUMBER(A$3),A$3>=A$2),IF(AND(DATEDIF(A$2,A$3,"Y")>62,DATEDIF(A$2,A$3,"Y")<65),DATE(YEAR(A$2)+66,MONTH(A$2),DAY(A$2)),IF(AND(DATEDIF(A$2,A$3,"Y")>72,DATEDIF(A$2,A$3,"Y")<75),DATE(YEAR(A$2)+76,MONTH(A$2),DAY(A$2)),DATE(YEAR(A$3)+IF(DATEDIF(A$2,A$3,"Y")<75,3,1),MONTH(A$3),DAY(A$3)))),"") この数式で結果を表示するのに必要なデータは、A3セルとA4セルのみです。 尚、その他のセルの数式に関しては変更はありません。
その他の回答 (3)
- KURUMITO
- ベストアンサー率42% (1835/4283)
前回に答えを示したものです。なぜ同じご質問の中で疑問点を解決しないのでしょう。今後はそのようにすることを希望します。 A6セルやA7セルのデータを使わなくても良い方法です。 A4セルには次の式を入力します。 =IF(DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))<=DATE(YEAR(A2)+66,MONTH(A2),DAY(A2)),DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))-1,IF(DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))<=DATE(YEAR(A2)+68,MONTH(A2),DAY(A2)),DATE(YEAR(A2)+66,MONTH(A2),DAY(A2))-1,IF(DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))<=DATE(YEAR(A2)+76,MONTH(A2),DAY(A2)),DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))-1,IF(DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))<=DATE(YEAR(A2)+78,MONTH(A2),DAY(A2)),DATE(YEAR(A2)+76,MONTH(A2),DAY(A2))-1,DATE(YEAR(A3)+1,MONTH(A3),DAY(A3))-1))))
- tom04
- ベストアンサー率49% (2537/5117)
こんばんは! 外しているかもしれませんが・・・ 全て数式で処理しようとするとかなり長いものになってしまうと思いますので、 ↓の画像のように二つの表を作ってみました。 問題になるのは、前回の受診日の3年後が誕生日より前か?後か?によって変わってくると思います。 その年齢の境目が63・64歳と73・74歳ではないかと思います。 そこで、この年齢の場合のみ上側の表を使い、それ以外は下側の表を使うようにしています。 A6セルには =IF(A1<=65,EDATE(A2,12*65),"") A7セルには =IF(A1>65,EDATE(A2,12*75),"") という数式を入れています。 そして、E2セルに =IF($A$1=D2,EDATE($A$3,36)-1,"") という数式を入れ、E5セルまでオートフィルでコピー F2セルは =IF($A$1=D2,EDATE($A$6,12)-1,"") として下のF3セルまでコピー F4セルは =IF($A$1=D4,EDATE($A$7,12)-1,"") として下のF5セルまでコピーしています。 最後にA4セルに =IF(COUNTIF(D2:D5,A1),MIN(E2:F5),EDATE(A3,VLOOKUP(A1,D8:F9,3,1))-1) という数式を入れています。 尚、EDATE関数を使用するに当たり、当方使用のExcel2003以前のバージョンでは メニュー → ツール → アドイン → 「分析ツール」にチェックを入れておく必要があります。 以上、参考になれば良いのですが 的外れならごめんなさいね。m(__)m
- imogasi
- ベストアンサー率27% (4737/17069)
こんなのは何度も質問する内容ではなかろう。回答をどれが良いか判断できないか、回答の本当の意味が良く理解できない状態ではないですか。 ーー 年齢で次回受信日が決るのでしょう。 (1)年令は=DATEDIF(生年月日、今回受診日,"Y")で判る。 (2)受診日現在の年齢により、次回受診間での間隔年(期間)が判る。 3年か1年の2種だが、関数的にはVLOOKUPのTRUE型を使えば、何通りあろうとも対処できる。 (3)その求めた年数Xを、今回の受診日に(年を)足す。 日数の足し算と違って、年への足し算はYEAR関数で年部分を取り出し、そこへ+Xする。 == こういう理解で間違ってますか。捨石になりますから、違っていたら後の回答者のために、補足して置いてください。 === >65歳までは受診した日から3年ごとに受診 判る >65歳に到達した日から1年以内に受診、受診日より75歳に到達するまでは3年ごとに受診。 この意味は? >75歳に到達した日から1年以内に受診、受診日より1年ごとに受診。 「受診、」の後に何が来るのかな? === 質問のいみが明確でないので間違っているかも知れないが 検索表 G列 H列 0 3 65 3 75 1 ーーーー 誕生日 受診日 年令 年後 次回受診日 1965/11/23 2010/12/1 45 3 2013/12/1 1945/11/4 2010/12/1 65 3 2013/12/1 1940/11/3 2010/12/1 70 3 2013/12/1 1935/11/3 2010/12/1 75 1 2011/12/1 C2の式 =DATEDIF(A2,B2,"Y") D2の式 =VLOOKUP(C2,$G$1:$H$3,2,TRUE) E2の式 =DATE(YEAR(B2)+D2,MONTH(B2),DAY(B2)) わざとD列に中間結果を出していますが、D列は用いない式にする方法はわかりますね。 E列の式のD2のところにD2の式と置き換えればよい。
補足
質問が的確でなくて失礼いたしました。 65歳までは受診した日から3年後までにに受診する。 65歳に到達した日から1年以内に受診しなければならないが、 65歳以前に受診した日より3年後が、65歳に到達した日から1年後より以前の日であればその日を優先する。 その後は75歳に到達するまでは3年ごとに受診する。 75歳に到達した日から1年以内に受診しなければならないが、 75歳以前に受診した日より3年後が、75歳に到達した日から1年後より以前の日であればその日を優先する。 その後は1年ごとに受診する。 上記の条件で、次回受診しなければならない期限を表示する。 ということですが理解できますでしょうか? 努力しましたが、私の理解力が乏しく解決できませんでした。
お礼
丁寧な解説、感謝いたします。ありがとうございます。