dポイントプレゼントキャンペーン実施中!

前回回答をいただきましたが、また問題があったので質問します。

【次のの条件で次回受診期限日を表示する関数を、どなたか教えていただけますか?

65歳までは受診した日から3年ごとに受診。
65歳に到達した日から1年以内に受診、受診日より75歳に到達するまでは3年ごとに受診。
75歳に到達した日から1年以内に受診、受診日より1年ごとに受診。

受診日(A3)は最新受診日を常に打ち込んで更新するものとします。
年齢(A1)は関数で生年月日より、リアルタイムで表示。

以下のセルの並びで考えていますが、効率のよい方法もあれば教えてください。

タイプ1) 年齢(A1) 生年月日(A2) 受診日(A3) 次回受診期限日(A4)

または
 
タイプ2) 年齢(A1) 生年月日(A2) 受診日(A3) 次回受診期限日(A4) 65歳到達日(A6) 75歳到達日(A7)】

という質問をしました。

前回、の回答で

回答1

タイプ2で対応するのがA3に入力する式を省略できる点でベターでしょう。
A1セルには次の式を入力します。

=DATEDIF(A2,TODAY(),"Y")

A4セルには次の式を入力します。

=IF(DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))<=A6,DATE(YEAR(A3)+3,MONTH(A3),DAY(A3)),IF(A3<=A6,DATE(YEAR(A6)+1,MONTH(A6),DAY(A6)),IF(DATE(YEAR(A3)+3,MONTH(A3),DAY(A3))<=A7,DATE(YEAR(A3)+3,MONTH(A3),DAY(A3)),IF(A3<=A7,DATE(YEAR(A7)+1,MONTH(A7),DAY(A7)),DATE(YEAR(A3)+1,MONTH(A3),DAY(A3))))))-1

A6セルには次の式を入力します。

=DATE(YEAR(A2)+65,MONTH(A2),DAY(A2))

A1セルを除いてセルの表示形式は日付にします。

A7セルには次の式を入力します。

=DATE(YEAR(A2)+75,MONTH(A2),DAY(A2))

という回答と

回答2

タイプ1
A1=DATEDIF(A2,TODAY(),"y")
A2=生年月日
A3=直近の受信日
A4=(LOOKUP(A1,{0,63,64,65,74},{3,2,1,3,1})+YEAR(A3)&"/"&TEXT(A3,"MM/DD"))-1

タイプ2
A1=DATEDIF(A2,TODAY(),"y")
A2=生年月日
A3=直近の受信日
A4=(LOOKUP(A1,{0,63,64,65,74},{3,2,1,3,1})+YEAR(A3)&"/"&TEXT(A3,"MM/DD"))-1
A6=DATE(YEAR(A2)+65,MONTH(A2),DAY(A2))
A7=DATE(YEAR(A2)+75,MONTH(A2),DAY(A2))

という回答をいただきましたが、よくみると

生年月日がS21.9.23だとし、近受診日がH21.7.4の場合
回答1 だと 受診期限がH22.7.3 となり
回答2 だと 受診期限がH24.9.22 になります。

実際は、受診して3年後がH24.7.3であり、65歳に到達するのがH23.9.23である為、
H24.9.22が受診期限だと65歳到達から1年以内だが、3年を過ぎてしまいます。
受診期限がH24.7.3となればよいのですが・・・・・

複雑なので難しいのでしょうか?

A 回答 (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セルのみです。
 尚、その他のセルの数式に関しては変更はありません。
    • good
    • 0

前回に答えを示したものです。

なぜ同じご質問の中で疑問点を解決しないのでしょう。今後はそのようにすることを希望します。
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))))
    • good
    • 0

こんばんは!


外しているかもしれませんが・・・
全て数式で処理しようとするとかなり長いものになってしまうと思いますので、
↓の画像のように二つの表を作ってみました。

問題になるのは、前回の受診日の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
「最新受診日から次の受診日を表示する関数(」の回答画像2
    • good
    • 0
この回答へのお礼

丁寧な解説、感謝いたします。ありがとうございます。

お礼日時:2010/12/02 23:42

こんなのは何度も質問する内容ではなかろう。

回答をどれが良いか判断できないか、回答の本当の意味が良く理解できない状態ではないですか。
ーー
年齢で次回受信日が決るのでしょう。
(1)年令は=DATEDIF(生年月日、今回受診日,"Y")で判る。
(2)受診日現在の年齢により、次回受診間での間隔年(期間)が判る。
3年か1年の2種だが、関数的にはVLOOKUPのTRUE型を使えば、何通りあろうとも対処できる。
(3)その求めた年数Xを、今回の受診日に(年を)足す。
日数の足し算と違って、年への足し算はYEAR関数で年部分を取り出し、そこへ+Xする。
==
こういう理解で間違ってますか。捨石になりますから、違っていたら後の回答者のために、補足して置いてください。
===
>65歳までは受診した日から3年ごとに受診  判る
>65歳に到達した日から1年以内に受診、受診日より75歳に到達するまでは3年ごとに受診。
この意味は?
>75歳に到達した日から1年以内に受診、受診日より1年ごとに受診。
「受診、」の後に何が来るのかな?
===
質問のいみが明確でないので間違っているかも知れないが
検索表 
G列  H列
03
653
751
ーーーー
誕生日受診日年令   年後    次回受診日
1965/11/23 2010/12/14532013/12/1
1945/11/4 2010/12/16532013/12/1
1940/11/3 2010/12/17032013/12/1
1935/11/3 2010/12/17512011/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年ごとに受診する。

上記の条件で、次回受診しなければならない期限を表示する。

ということですが理解できますでしょうか?

努力しましたが、私の理解力が乏しく解決できませんでした。

補足日時:2010/12/02 00:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A