1/30/2019

Access。25日締めなので、それ以降を翌月支払月として計上したい【Closing date】

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と基本的に考え方は変わらないようですね。