ある日付から満何年何か月と何日経過しているかを求める

 ある日付から満何年経過しているか(つまり満年齢)を求めるケースについては別途紹介しています(こちら)が、ここではさらに(年未満の)満経過月数、そして月未満の経過日数を求めてみることとします。 

f:id:accs2014:20161225101939p:plain:right:w400

 右のようなテーブルを例としてみます。入会日から今日(システムの日付)までで満何年何か月と何日経過が経過しているのかを求めます。


f:id:accs2014:20161225214108p:plain:right:w400

 クエリデザインです。
 次のような列を設けます。


満経過月数を求める列

満月: DateDiff("m",[入会日],Now())+(Day([入会日])>Day(Now()))


満経過年数を求める列

満年: [満月]\12

※\がスラッシュとして表示されているかもしれません。


満経過月数(年未満の月数部分)を求める列

満年未満月: [満月] Mod 12


経過日数(月未満の日数部分)を求める列

月未満日: DateDiff("d",DateAdd("m",[満月],[入会日]),Now())


 列名がちょっと雑だったかもしれません_ _)
 満経過月数(「満月」列の値)を12で割った商(整数部分)が満経過年(年齢でいえば満年齢)です。また、同じものを12で割った余りが満経過月(年未満の部分)となります。
 月未満の経過日数については、まずもとの日付に満経過月数を加えた日付を求め、その日付と今日(システムの日付)の日数の差を求めています。
 システムの日付としてNow関数を用いているのは、Date関数より1文字短くできるというだけの理由です。


f:id:accs2014:20161225214107p:plain:w400

 平成28年12月25日におけるデータシートビューです。
 「5年8か月12日」などと表示したい場合は適宜「&」でつないでください。