|
▼きくちゃん さん:
こんにちは。
>>>
>>>「="小"&DATEDIF(B1,DATE(YEAR(TODAY()),4,1),"y")-5」
>>>こんな数式で出来ませんか(B1にシリアル値の生年月日)?
>>考え方は、↑でいいと思いますが、Today()を使用すると、月が1〜3のとき、
>>学年が変わってしまい(方法はあるけれど)、数式が複雑になるので
>>どこかのセルにたとえば、セルE1に年度を入力しておきます(2004等)。
>>
>>「="小"&DATEDIF(B1,DATE(E1,4,1),"y")-5」
>>
>>とした方がよいでしょうか?
>
>>名簿には、幼児から大学生まで含まれておりますので、
>>「=DATEDIF(B1,DATE(YEAR(TODAY()),4,1),"y")」で実行してみました。
>>本日の段階では、学齢は全て問題なく数値化されました。
>>月が1〜3のとき、
>>学年が変わってしまい(方法はあるけれど)、数式が複雑になる
>>というのは、2005年の1〜3月に実行した場合の事でしょうか?
そういうことです。
それに今日の時点で来年の学齢を求めたいと思っても出来ませんよね?
私は、↑これが引っかかっていたので年度指定が良いと思ったのですが・・・。
(この辺は、用途にもよるので一概には言えませんが)
今、学齢に一括変換できればそれでよいのであれば、どっちでも良いですね!!
取り合えず、Today()関数を使用する方法で行きましょうか?
学齢変換するシートは、
以下のようなレイアウトだとしましょうか
A列(氏名)、B列(生年月日、シリアル値で)、C列(学齢)いずれも1行目は、項目名とします(仮にSheet1をシート名とします)。
A B C
1 氏名 生年月日 学齢
2 a 93/04/02
3 b 00/05/01
4 c 90/08/24
5 d 86/08/25
別のシートに対応表を作りましょう。
ここでは、シート名は、Sheet2します。
A列には4/1時点の満年齢 B列は、学齢、いずれも1行目は、項目名とします。
A B
1 4/1時点での満年齢 学齢
2 0 幼児
3 6 小1
4 7 小2
5 8 小3
6 9 小4
7 10 小5
8 11 小6
9 12 中1
10 13 中2
11 14 中3
12 15 高1
13 16 高2
14 17 高3
15 18 大学
16 22 (未入力ではなく、空白を入れておきます)
セルC16は、空白にして下さい(そうしないと、22歳以上は、0になってしまいますから)。
こんな対応表を作成した場合、Sheet1の学齢セル(例えば、C2)には、
「=VLOOKUP(DATEDIF(B2,DATE(IF(MONTH(TODAY())>3,YEAR(TODAY()),YEAR(TODAY())-1),4,1),"y"),Sheet2!$A$2:$B$16,2,TRUE)」
こんな数式で「小5」と表示されます。
後は、オートフィル操作でよいと思いますが、VBAでするなら
標準モジュールに
'==========================================================
Sub main()
With Range("b2", Cells(Rows.Count, 2).End(xlUp))
If .Row > 1 Then
.Offset(0, 1).Formula = _
"=VLOOKUP(DATEDIF(B2,DATE(IF(MONTH(TODAY())>3,YEAR(TODAY()),YEAR(TODAY())-1),4,1)" & _
",""y""),Sheet2!$A$2:$B$16,2,TRUE)"
End If
End With
End Sub
Sheet1をアクティブにした状態で実行して下さい。
尚、B列の生年月日が入力してある行を基準にセル範囲を取得しています。
|
|