Access学習メモ 3-12.「3回目の誕生日」

Access学習メモ 3-12.「3回目の誕生日」

コンテンツ
学び
運転免許証(初回グリーン)のように、登録開始日にかかわらず本人の誕生日を基準として(※)、以後の期限満了日を算定するケースがある
「登録してから3回目に訪れる誕生日」を基準とする制度
(3年後≠3回目)

※実際には、運転免許の有効期限は誕生当日でなく誕生日の1か月後
 ややこしい部分は割愛

この場合、登録日が誕生日の前日以前のケースに注意する必要がある
たとえば、ゴジ図書館の一期における利用期間の上限を3年とします

7月25日誕生日の人が7月11日に登録開始した場合
登録3年後の誕生日を算出しただけの下記式では
有効期限が3年後の2029年7月25日となり
実際の利用可能期間が3年を超過してしまう

せっかく計算式を設定しても、ちょっと残念な仕上がり
=DateSerial(Year([登録日])+ 3,Month([誕生日]),Day([誕生日]))

その年の誕生日が到来する前に登録を開始するケースへの対策として
利用期間は3年を上限とするよう制定する必要がある
=DateSerial(Year([登録日]) + IIf(Format([登録日],"mmdd") > Format([誕生日],"mmdd"), 3, 2), Month([誕生日]), Day([誕生日]))

※削除された部分
+ 3,
※追加された部分
+ IIf(Format([登録日],"mmdd") > Format([誕生日],"mmdd"), 3, 2), 

丸3年の利用権を得ることができるのは、誕生日当日に登録開始した人のみ
①誕生日より前に登録した人は登録2年後の誕生日が有効期限
②誕生日より後に登録した人は登録3年後の誕生日が有効期限
①②いずれも2年プラス端数日数が計算結果となる

補足:(Null)対策
登録日や誕生日が未入力のレコードが存在する可能性への備え
=IIf(IsNull([登録日]) Or IsNull([誕生日]), Null, DateSerial(Year([登録日]) + IIf(Format([登録日],"mmdd") > Format([誕生日],"mmdd"), 3, 2), Month([誕生日]), Day([誕生日])))


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す