Access。25日締めなので、それ以降を翌月支払月として計上したい
<Access>
月末締めならば、わかりやすいのですが、例えば、10日締めとか25日締めとか仕入の支払いついてありますが、例えば25日締めの場合は、26日~31日までを翌月の支払いに回す必要がありますよね。それを、Accessのクエリを使って算出してみましょう。
次のT仕入日一覧というテーブルがあります。
仕入日フィールドを使って、最終的に次のような集計一覧表を作りたいわけです。
【25日以降かどうかで判断させる】
仕入日が25日以降かどうかを判断して、25日より大きければ、翌月。そうでなければ、当月と判断できればいいわけですね。この動きは、ExcelのIF関数と同じ考え方ですね。
Accessでは、IF関数ではなくて、IIf関数を使うと大丈夫そうですね。
それでは、クエリを作っていくわけですが、このIIf関数を使った演算フィールドが少し厄介というか、長くなってしまいます。
まずは、市販のテキストなどに掲載している演算フィールドで作ってみることにします。
作成タブの「クエリデザイン」をクリックして、T仕入日一覧を選択します。
次のようにフィールドを設定していきます。
NOと商品名と仕入日はそのままで、演算フィールドは、支払月として作成します。
支払月: IIf(Format([仕入日],"dd")>25,Format(DateAdd("d",7,[仕入日]),"yyyy/mm"),Format([仕入日],"yyyy/mm"))
説明しないとわけがわかりませんが、単純にExcelのIF関数と同じです。
Format([仕入日],"dd")>25
ここは、論理式で、仕入日フィールドから”日”を抽出して、その数値が25より大きいかを判断させています。
そのためにFormat関数を使っています。
Format関数はAccessでは定番の関数で、指定した書式に合わせて値の表示形式を変更する関数です。
真の場合が
Format(DateAdd("d",7,[仕入日]),"yyyy/mm")
DateAddは、仕入日フィールドのデータの”d”。
すなわち日に、”7”を足す。
26日でも7を足せば、翌月になりますよね。だから7。
そして、支払月がわかるようにしたいので、Format関数をつかって、表示形式を年月である、”yyyy/mm”で設定しております。
偽の場合が、
Format([仕入日],"yyyy/mm")
該当外なので、表示形式を年月にしております。
では、実行してみましょう。
6件目の1月27日は、翌月の2月になっていますよね。
このように25日締めならば、翌月にすることができました。
しかし、演算フィールドが長い!
DataAdd関数とか紹介したいから長くなってしまったように思えます。
なので、もっとシンプルに、仕入日が25より大きいかという判断でOK真ならば+7した日付にするようにすればいいので、次のような演算フィールドでもOKです。
支払月2: IIf(Day([仕入日])>25,Format([仕入日]+7,"yyyy/mm"),Format([仕入日],"yyyy/mm"))
では、実行してみましょう。
先程の演算フィールドと同じ結果になっているのがわかります。あとは仕入高のフィールドも追加しておきます。
【クエリから集計クエリをつくる】
あとは、作成した「Q支払月一覧」クエリから集計用クエリをつくります。クエリツールのデザインタブにある、「集計」ボタンをクリックして、集計行を表示しましょう。
支払月ごとにまとめますので、「グループ化」にして、仕入高は合計金額を算出したいので、「合計」と設定します。
あとは、実行して確認してみましょう。
このように、年月ごとに仕入高を集計することができましたね。
AccessもExcelと基本的に考え方は変わらないようですね。