8/17/2020

Access。年月で集計したい。できれば一つのフィールドで年月を管理したい【Aggregate】

 Access。年月で集計したい。できれば一つのフィールドで年月を管理したい

<Access>

Excelにわざわざエクスポートしなくても、Accessでも、関数をうまく組み合わせると計算をすることができます。

今回は、次のテーブルがあります。

 

仕入高を仕入日の年月ごとに集計したい場合、どうしたらいいのでしょうか?

そして、できれば、年のフィールド・月のフィールドで管理するのではなくて、年月のフィールドで管理して集計したいとしたら、どうしたらいいのでしょうか?


年と月を別々のフィールドで管理するならば、Excel同様にYear関数で年を算出して、Month関数で月を算出することができます。

次のようなクエリを作ればいいわけですね。

 

では、データシートビューで確認してみましょう。

 

仕入日で仕入高を集計することができましたが、年月というフィールドで管理したいというリクエストですから、アイデアが必要になります。


単純に算出した年と月を結合させればいいように思いますが、うまくいきません。

 

演算フィールドの式を、

年月: Year([仕入日]) & Month([仕入日])

と結合してみます。


データシートビューに変えて確認してみましょう。

 

このようになってしまいます。


仕入高は集計されているのですが、問題は、年月の順番。

10月~12月の二桁問題が、影響しちゃうわけですね。

この問題を解決するには、1月~9月までの一桁の月を”01”のように、「0(ゼロ)」をつけて二桁に揃えてあげればいいわけです。


そこで、表示形式をつかって、月の表示を変えて文字結合をすればいいわけです。

Accessでは表示形式をコントロールする関数に、Format関数というのがあります。

ExcelはTEXT関数です。


演算フィールドを次のように修正してみます。

 

年月: Year([仕入日]) & Format(Month([仕入日]),"00")

表示形式で、”00”とすることで、ゼロ付数値にすることができます。

Excelと同じですね。


では、データシートビューで確認してみましょう。

 

このように、一桁の月には「0(ゼロ)」がついて文字結合していることで、綺麗に並んだクエリを作ることができました。


また、こんな演算式でも、大丈夫です。

 

年月: Year([仕入日]) & Right("0" & Month([仕入日]),2)

こちらは、表示形式ではなくて、とりあえず、0(ゼロ)をMonth関数で算出された月の数値に結合します。

12月だと、「012」。

その文字をRight関数で右から2文字分を抽出します。

すると「12」。

1月の場合は、「01」となって、右側から2文字でも「01」と抽出されますので、これを年と結合すれば、いいわけです。


では、データシートビューで確認してみましょう。


このように、年月で仕入高を集計することができました。


ExcelとAccess似ているところと、似ていないところがありますので、Accessを使う人は色々確認しながら作業をするといいかもしれませんね。


ところで、Accessには、DatePart関数というのがあって、この関数をつかっても、年と月は抽出することができますが、Excelには無い関数なので、なじみがある、Year関数とMonth関数を今回は使ってみました。