9/07/2024

Access。入会日から入会年数を求めるには、どのようにしたらいいのでしょうか。

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のように楽に設定はできないようです。