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関数を今回は使ってみました。