Access。入会日から入会年数を求めるには、どのようにしたらいいのでしょうか。
<IIF+DATEDIFF関数+DATE関数+Format関数>
入会日から何年所属しているのかを確認したいわけですが、ExcelのDATEDIF関数のようなDATEDIFF関数というのがAccessにもあります。
ただ、ExcelのようにDATEDIFF関数を使うだけでは、満年齢を算出するのが難しいようです。
次のテーブルがあります。
2024/2/1までの満年齢を求めたいので、クエリをつかって、求めます。
作成タブのクエリデザインをクリックします。
入会日から年数を求めますので、演算フィールドをつくります。
年数: DateDiff("yyyy",[入会日],#2024/02/01#)
ExcelはDATEDIF関数ですが、AccessではDateDiff関数を使います。
引数は、満年齢で表示したいので「”yyyy”」。
開始日は「入会日フィールド」をつかいます。
終了日は「#2024/2/1#」までとします。
日付は「#」で囲みます。
では、クエリを実行してみましょう。
入会年数が表示されましたが、何かおかしいです。
2024/2/1 なので、2023/2/2はまだ1年経っていないハズなのに、1年と算出されています。
2023/12/31も2024/2/1からみれば、たった、32日前なのに、1年と算出されています。
2024/1/1も2024/2/1からみれば、たった、31日前ですが、こちらは、0年と算出されています。
AccessのDateDiff関数は、その期間中にある、1月1日をカウントした結果を算出している、昔の満年齢のような算出をしているので、おかしな結果が表示されていたというわけです。
そこで、演算式を修正する必要があります。
修正年数: IIf(Format([入会日],"mm/dd")>Format(#2024/02/01#,"mm/dd"),DateDiff("yyyy",[入会日],#2024/02/01#)-1,DateDiff("yyyy",[入会日],#2024/02/01#))
すごく長くなりましたが、実行してみます
これで、正しく、満年齢を求めることができました。
さて、この長い数式ですが、いったい何をしているのか、説明します。
ExcelのIF関数にあたる、AccessのIIf関数をつかって、条件分岐をしております。
入会日を「mm/dd」という表示にして、終了日の日付も「mm/dd」にします。
これで、日付で比較することができます。
仮に 3/1ならば2/1とくらべて大きいわけです。まだ入会日を迎えていないので、「-1」する仕組みです。
このような方法で、Accessでも満年齢を求めることができます。
ただ、Excelのように楽に設定はできないようです。