[[20230327215629]] 『生年月日または年齢からです。』(さき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『生年月日または年齢からです。』(さき)

教えてください。
下のような社員名簿があるとします。
1行目の日付の日に年齢が59歳1か月〜59歳11か月になる人にはD列に◎が入る方法はありますか?
1 日付

 A      B     C    D
2名前 生年月日  年齢
3名前 生年月日  年齢
4名前 生年月日  年齢
となっておりC列は1行目の日付とB列から求める関数がいれてあります。

< 使用 Excel:unknown、使用 OS:Windows10 >


こういうレイアウトだとして、
 D2 =IF(AND(DATEDIF(B2,$A$1,"Y")=59,DATEDIF(B2,$A$1,"YM")>0,DATEDIF(B2,$A$1,"YM")<12),"◎","")

    |[A]      |[B]     |[C]  |[D]
 [1]|2023/3/27|        |     |   
 [2]|名前     |1960/1/1|63歳 |   
 [3]|名前     |1964/1/2|59歳 |◎ 
 [4]|名前     |1967/1/3|56歳 |   

しっかり検証していないので合ってるかわかりません。
もっとスマートな式があると思いますので、識者の方をお待ちください。
(フォーキー) 2023/03/27(月) 22:37:56


 フォーキーさんのレイアウトで

 D2 =LOOKUP(DATEDIF(B2,$A$1,"m"),{0,709,720},{"","◎",""})

 ところで、Excelのバージョンは?
(笑) 2023/03/27(月) 23:12:58

 >C列は1行目の日付とB列から求める関数がいれてあります。

 その式を提示してください。

 以上、確認だけ
(笑) 2023/03/27(月) 23:17:51

 先に言っておくと
 C列の式が =DATEDIF(B2,$A$1,"y") だったら

 D2 =IF(C2<>59,"",IF(DATEDIF(B2,$A$1,"ym")>0,"◎",""))

 参考まで
(笑) 2023/03/27(月) 23:24:05

おはようございます。
みなさまありがとうございます。
わかりずらくてすみません。

私が今作っていて困っているものそのまま掲載します。

B2 名前
C2 生年月日
D2 年齢 =DATEDIF(C2,$J$2,"y")&"."&DATEDIF(C2,$J$2,"ym")

J1 今日の日付(検索日)
L1 59.00(歳)
N1 59.11(歳)
 
E2 =IF(AND(D2>=$L$1,D2<=$N$1),"1",FALSE)

E2に該当する人を探して、該当者は1、該当しないものは無表示にしようと考えてました。
年齢までは表示されているのですが、E2欄はうまく振り分けできませんでした。

E2の公式がわかればうまくいくのかもしれません。
または、他が違っているかもしれませんが。
(さき ) 2023/03/28(火) 09:02:20


当初の質問について数式が提示されていますけど試されたんですか。
それで何か問題でもあったのですか。
それを答えずにいきなりレイアウトを変更しての質問はいかがなと思う。
(あと) 2023/03/28(火) 09:18:00

 数値&数値の結果は文字列です
 文字列と数値の比較は常に文字列>数値です
 DATEDIF(C2,$J$2,"ym")
 ↑が10未満だと二桁の文字列にして
 59.02等にする必要が有ります
(どん) 2023/03/28(火) 09:56:28

 >D2 年齢 =DATEDIF(C2,$J$2,"y")&"."&DATEDIF(C2,$J$2,"ym")
 >L1 59.00(歳)
 >N1 59.11(歳)

 1.D2は文字列です。分かっていますね?

   あと、月数が1桁になる場合、59.01にはなりません。
    =DATEDIF(C2,$J$2,"y")&"."&TEXT(DATEDIF(C2,$J$2,"ym"),"00")
     とすべきでしょう。

 2.L1とN1は、数値なんですか、それとも文字列なんですか?
   それによって、◎判定式が変わります。

 ※年齢計算は「巷で言う満年齢」と「法律上の満年齢(誕生日前日で満)」は1日異なることがあります。
  気にする必要もない処理ならいいですけども、念の為。

(半平太) 2023/03/28(火) 10:03:31


 当初の対象者
>59歳1か月〜59歳11か月

  ↓ だったら 
>L1 59.00(歳)
>N1 59.11(歳)
>E2=IF(AND(D2>=$L$1,D2<=$N$1),"1",FALSE)

 希望通りにならないとしても、考え方としては
 59歳0か月〜59歳11か月、つまり59歳全員

 どっちが正しいんですか?

 59歳0か月〜59歳11か月が正しいのなら
>D2 年齢 =DATEDIF(C2,$J$2,"y")&"."&DATEDIF(C2,$J$2,"ym")
 だとして

 E2 =IF(INT(D2)=59,1,"")

 参考まで
(笑) 2023/03/28(火) 10:12:33

 一応、確認

 L1とN1の値は固定ではなく可変?

 だとして、必ず○歳0か月〜○歳11か月なのか
 それとも 0か月、11か月の部分も可変なのか、どっちですか?

 以上
(笑) 2023/03/28(火) 10:39:26

みなさまありがとうございます。

すみません。文字列というのを知りませんでした。
ごめんなさい。

L1、N1を文字列して試してみます

(さき ) 2023/03/28(火) 11:16:01


みなさまありがとうございます。

今回は(笑)さまの

=DATEDIF(C2,$J$2,"y")&"."&DATEDIF(C2,$J$2,"ym")

 E2 =IF(INT(D2)=59,1,"")

で試したところ出来ました。
ありがとうございます。

一つだけ教えてください。

もし、これが半年区切り
59.0〜59.6
59.7〜59.11
としたい場合はどうすればできますか?

IF(INT(D2)=59,1,"")
1を0.6としてみたところできませんでした(涙)

(さき ) 2023/03/28(火) 11:49:35


 >59.0〜59.6
 >59.7〜59.11
 対象は 59歳だけ?

 だとしたら

 D列の式が ↓ だとして
>=DATEDIF(C2,$J$2,"y")&"."&DATEDIF(C2,$J$2,"ym")
  
 59.0〜59.6
 E2 =IF(AND(INT(D2)=59,DATEDIF(C2,$J$2,"ym")<7),1,"")

 59.7〜59.11
 E2 =IF(AND(INT(D2)=59,DATEDIF(C2,$J$2,"ym")>6),1,"")

 ■D列の式を ↓ にできるのなら
 D2 =IF(C2="","",DATEDIF(C2,$J$2,"y")&"."&TEXT(DATEDIF(C2,$J$2,"ym"),"00"))

 59.0〜59.6
 E2 =IF(AND(D2>="59.00",D2<="59.06"),1,"")

 59.7〜59.11
 E2 =IF(AND(D2>="59.07",D2<="59.11"),1,"")

 D列は文字列なので、"59.00" のように数字を "" で囲む

 以上
(笑) 2023/03/28(火) 13:20:47

 半年区切りだったら
 59.0〜59.5
 59.6〜59.11
 では?

 ついでに・・・
 59.0〜59.5 → 1
 59.6〜59.11 → 2
 にしたいんだったら

 D列の式が ↓ だとして
>=DATEDIF(C2,$J$2,"y")&"."&DATEDIF(C2,$J$2,"ym")

 E2 =IF(INT(D2)<>59,"",IF(DATEDIF(C2,$J$2,"ym")<6,1,2))

 参考まで
(笑) 2023/03/28(火) 13:49:58

みなさま ありがとうございました。
みなさまの関数を使って何とか表示させることができました。

本当に助かりました。
明日、報告してきます(笑)

ありがとうございました

また助けてください
よろしくお願いいたします
(さき ) 2023/03/28(火) 21:16:15


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.