- ベストアンサー
ACCESSレポート グループフッターの計算結果をレポートフッターで使う
いつもお世話になっております。 「部署」「商品」「金額」の3フィールドからなるテーブルを元に、下記のようなレポートで消費税を計算させようとしています。(実際はもっと項目は多いです。) =============『詳細』 部署_商品_金額 =============『部署グループフッター』 ="部署計"__部署合計 ←=Sum([金額]) ="消費税"__部署消費税 ←=[部署合計]*0.05 ="請求額"__部署請求額 ←=[部署合計]+[部署消費税] =============『レポートフッター』 ="全体計"__全体合計 ←=Sum([金額]) ="消費税"__全体消費税 ←=Sum([部署消費税]) ="請求額"__全体請求額 ←=Sum([部署請求額]) レポートフッターの =Sum([部署消費税]) =Sum([部署請求額]) この2箇所がエラーになってしまいます。ヘルプを見るとそういうSumの使い方は出来ないようなことが書かれていました。 やりたいことは分かっていただけたでしょうか。 要するに部署ごとに消費税を出し、全体では各部署の消費税を加算したいのです。 今は仕方がないので部署ごとの消費税を出した別テーブルを用意しておいて、部署をキーにDsumで求めていますが、このやり方は気に入りません。 レポートの中だけでうまいやり方はないでしょうか。 ACCESS2000です。 よろしくお願いします。
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
> 誤差が出るのでダメなんですよ・・・ すべて切り捨て計算すればいいかと。 詳細セクション =Int([金額]*0.05) グループフッターセクション =Sum(Int([金額]*0.05)) レポートフッターセクション #グループフッターセクションと同じ。 もしくは、コントロール(テキストボックス)の集計機能を使うとかでも できそうですね。 テキストボックスを、詳細セクションに配置して、 可視プロパティ:いいえ コントロールソース:=Int([金額]*0.05) 集計実行:グループ全体 (全体) 上記のコントロールを、グループフッター等から参照するようにしても 求めることができると思います。
その他の回答 (6)
- Gin_F
- ベストアンサー率63% (286/453)
> 、「集計実行プロパティ=全体」にすることで、複数の部署の部署消費税の合計がレポートフッターになるんでしょうか。出来ないような・・・ 参照(Or 代入)する必要はありますね。 ただ、そこでVBAが必要になってくるとは思いますが。。
お礼
回答ありがとうございます。 今になって、ようやく、なんとな~く分かった気がします。 部署消費税とは別に部署消費税累計テキストを非表示で置いておいて、地区フッターから参照するのですね! 少し違うかもしれませんが、とても参考になりました。 また何かありましたら教えてください。
- Gin_F
- ベストアンサー率63% (286/453)
> テキストボックスを、詳細セクションに配置して、 > 可視プロパティ:いいえ > コントロールソース:=Int([金額]*0.05) > 集計実行:グループ全体 > (全体) この機能を使って、 グループフッターセクションに =Int(Sum([金額]) * 0.05) 上記式を、コントロールソースとし、集計実行プロパティを全体に すれば、お望みの値になりませんか? やっていることの考え方は、mach999 さんと同じですが。
お礼
回答ありがとうございます。 部署グループフッター内の部署消費税テキストボックス =Int(Sum([金額]) * 0.05) ↑この意味は理解できました。 しかし、「集計実行プロパティ=全体」にすることで、複数の部署の部署消費税の合計がレポートフッターになるんでしょうか。出来ないような・・・
- mach999
- ベストアンサー率75% (36/48)
なるほど。 それならば、VBAを使って実現できます。 (マクロはレポートのモジュール内に記述) Dim Tmp As Currency Private Sub グループフッター_Format(・・・) Tmp = Tmp + Me.部署消費税 Me.全体消費税 = Tmp End Sub こんな感じでどうでしょう?
お礼
回答ありがとうございます。 それは、 部署グループフッターが生成されるたびに Tmp レポートフッター内の全体消費税に加算していく ということをやるわけですね? なるほど、そういう方法があるのですか・・・ 明日職場で試してみますね。
補足
やってみました。試しに一箇所だけ。できました! 質問では簡略化しましたが、実は商品が7種類あり、商品ごとの消費税も出します。 グループも、部署の上に地区、顧客とありまして。ですから、 「顧客・地区・部署・商品」の単位で合計した金額に5%をかけて円未満切り捨てた「部署・商品」消費税を、地区小計し、顧客で中計し、最後に全顧客合計を出します。 変数のクリアタイミング等も自分なりに組み込んだ形でなんとかできそうです。 ただ、質問でも書いたように、別クエリからDsumで持ってくる方法ではすでにできてるので、このレポートについては(時間が無いので)もうこのままで行くことにしました。 せっかく教えていただいたのに申し訳ありません。 でも、すぐに次のレポート作成に入るので、そちらで実践してみます。
- mach999
- ベストアンサー率75% (36/48)
レポートフッター内で各テキストボックスのコントロールソースを =DSum("金額","テーブル名") =DSum("金額","テーブル名")*0.05 =[全体計].Value+[全体消費税].Value というようにすればsnoopy64さんの望むことが実現できるのではないかと思いますがどうでしょうか?
お礼
回答ありがとうございます。 消費税は円未満切り捨てですので、 「金額×5%の切り捨て」を合算した消費税と 「金額の合計×5%の切り捨て」の消費税では、 誤差が出るのでダメなんですよ・・・
- Gin_F
- ベストアンサー率63% (286/453)
> ヘルプを見るとそういうSumの使い方は出来ないようなことが書かれていました。 ですね。レコードソースとなっている項目(フィールド)しか指定できなかったと 思います。 =Sum(Sum([金額])*0.05) だと、部署ごとにできないので、ダメってことですよね? > 要するに部署ごとに消費税を出し、全体では各部署の消費税を加算したいのです。 部署ごとに集計するクエリを作成し、サブレポートを使った方が簡単だと 思いますけど。。
お礼
回答ありがとうございます。 サブレポートは使ったことがないのでいまいちピンとこないんですが、 「詳細部分を出すサブレポートには現行のレコードソース(詳細データ)を使い、 部署合計を出すメインレポートには、詳細データを部署で合計したデータを使う」 という感じでしょうか。 だとすると、今やってる方法と大差なさそうですね・・・ でもサブレポートを使う方法は参考になりました。
- O_cyan
- ベストアンサー率59% (745/1260)
レポートのレコードソースにSQLスタートメントを使いその中で演算させて[部署消費税]のフィールドを作りレポート内で合計させれば良いと思います。 そうすればエラーもくわないしレポートの中だけですみます。
お礼
回答ありがとうございます。 レコードソースは詳細データのクエリとなっています。 「詳細の金額×5%」の部署合計が部署消費税ではなく、 「詳細の金額の部署合計×5%」が部署消費税なので、 おっしゃる方法では部署消費税は算出できないと思うのですが・・・
補足
すみません、お礼に書いたのは正反対でした。 正しくは 「詳細の金額の部署合計×5%」が部署消費税ではなく、 「詳細の金額×5%」の部署合計が部署消費税なので、 でした(>_<)
お礼
回答ありがとうございます。 詳細金額_____詳細消費税 99円_____4円 99円_____4円 金額合計_____消費税合計 198円____8円(←4+4) ↑おっしゃる方法ですと、こうなりますよね? しかし、詳細の消費税は意味がないのです。 部署単位に請求しますので、部署合計金額に5%をかけて消費税を求めたいのです。 すなわち、↓このようにしたいわけです。 詳細金額 99円 99円 金額合計_____消費税 198円____9円(←198の5%の切り捨て)