#743 消費税額を税率ごとに集計する方法 フォーム

Accessでは、”すべて”のレコード(あるいは条件抽出されたレコードの”すべて”)について合計値や平均値、最大値/最小値などの縦方向の集計を行い、クエリあるいはフォームフッター等でその集計結果を表示させるのは得意です。集計クエリを使ったり、Sum関数やAvg関数をコントロールソースとするテキストボックスを配置したりすれば簡単にできます。

一方、”すべて”のレコードではなく、レコードごとの条件に応じて”それぞれ”の合計値などを求めるにはちょっとした工夫が要ります。たとえば、売上データにおいて消費税率が「8%」のものと「10%」のものがある場合に、『8%のレコードだけの消費税額の合計』と『10%のレコードだけの消費税額の合計』を別のテキストボックスに分けて表示したいといったときです。

そのようなときには、次のようにして各テキストボックスの「コントロールソース」プロパティを設定することで対処できます。
なおここでは、本来はクエリで集計させたしまった方がよいと思いますが、「単価×数量」で各レコードの「金額」もいっしょに計算しています。また参考としてすべてのレコードの消費税額も記載します。

  • 8%のレコードだけの消費税額の合計:
          =Sum([単価]*[数量]*IIf([消費税率]=0.08,[消費税率],0))

  • 10%のレコードだけの消費税額の合計:
          =Sum([単価]*[数量]*IIf([消費税率]=0.1,[消費税率],0))

  • すべてのレコードの消費税額の合計:
          =Sum([単価]*[数量]*[消費税率])


ここでのポイントは「IIf」関数を使うことです。8%の場合であれば、『もし消費税率が8%なら金額にその消費税率を掛け、そうでないときはゼロを掛ける(つまり8%としての消費税額はゼロ)』、10%の場合であれば『もし消費税率が10%なら金額にその消費税率を掛け、そうでないときはゼロを掛ける(つまり10%としての消費税額はゼロ)』というように分岐して計算させています。その結果、それぞれの消費税率ごとの消費税額を求めることができます。
ちなみに、すべてのレコードの消費税額はそのような条件分岐なしで計算できます。あるいは8%と10%のテキストボックスの値を単純に足し算する式でもかまいません。

フォームデザイン例:


実行例:



【補足】
上記ではフォームフッター上のコントロールで計算していますが、クエリであらかじめ分岐処理しておくこともできます。

■クエリのデザイン


■クエリのSQL
   SELECT商品コード,数量,単価,[単価]*[数量]AS金額,
   [金額]*IIf([消費税率]=0.08,[消費税率],0)AS[消費税額8%],
   [金額]*IIf([消費税率]=0.1,[消費税率],0)AS[消費税額10%]
   FROM売上明細;


この場合、クエリ側で各種演算がすでに済んでいますので、フォームフッターのコントロールソースは下記のようにシンプルになります。
  • 8%のレコードだけの消費税額の合計:
          =Sum([消費税額8%])
  • 10%のレコードだけの消費税額の合計:
          =Sum([消費税額10%])
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved