- ベストアンサー
ACCESS 2007の計算式設定について
- ACCESS 2007の計算式設定について教えてください。
- ACCESS2007で損益計算書のようなDBを作成しており、特定の金額に対して計算式を設定したいです。
- エクセルと比較して、ACCESS 2007での計算式設定の効率性について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ABCのみについて集計するというイメージで、Cのみ引き算ということで宜しいでしょうか? そうであれば、ABCのみ選択した一時テーブルを作成し、Cのみについて-1を掛けてから集計する事になります。 ABCのみの抽出したテーブル作成クエリー(DBtemp作成)は、下記のとおりです。 SELECT DB.科目, DB.金額 INTO DBtemp FROM DB WHERE (((DB.科目)="A" Or (DB.科目)="B" Or (DB.科目)="C")); 次に、一時テーブルDBtempについて、Cのみについて-1を掛ける更新クエリーを実行します。 更新クエリー(DBtemp更新)は次のとおりです。 UPDATE DBtemp SET DBtemp.金額 = DBtemp!金額*-1 WHERE (((DBtemp.科目)="C")); 集計は、DBtempをデータソースとする表形式のレポートを作成し、レポートフッターに=Sum(DBtemp!金額)をデータソースとするテキストボックスを配置します。ラベルに"計"と表示させます。 集計用のフォームを作って、コマンドボタン(集計)を作成し、このクリック時イベントに Private Sub 集計_Click() DoCmd.SetWarnings False '警告表示を一時的にOFFにする。 DoCmd.OpenQuery "DBtemp作成" DoCmd.OpenQuery "DBtemp更新" DoCmd.SetWarnings True '警告表示ONに戻す。 DoCmd.OpenReport "DBtemp" End Sub のプロシージャーを設定します。レポートプレビュー画像を添付しました。 こういう考え方でよろしければ参考にして下さい。
その他の回答 (2)
- imogasi
- ベストアンサー率27% (4737/17069)
判りにくい表現の質問だ。 クエリのデザインで、新しいクエリのフィールドで、演算式を入れれば仕舞いではないのか。 A,B,Cは選択(抽出)されたレコードの順番の例なのか?結果抽出数は5つと決っているのか? その順番を頼りに計算するのか? アクセスはSQLを使う関係で、レコード間の演算は不得意だ。直後のレコード1つとの比較も、自己結合など使う例があるぐらいで、単純ではない。 VBAが出来る人はレコード処理(ADOなど)を使ってやると簡単。 エクセルはどの行のどの列のセルを用いてやるのも算術計算などなら簡単なのはご存知のとおり。
- 30246kiku
- ベストアンサー率73% (370/504)
+ - だけですよね 結果のみを求めるものになりますが、 クエリ名を「Q1」と仮定して、クエリのSQLビューに以下を記述してみます。 SELECT SUM(IIF(科目="A" OR 科目="B", 金額, IIF(科目="C", -金額, 0))) AS 結果 FROM Q1; もしくは、自己結合をして SELECT Q1.金額 + Q2.金額 - Q3.金額 AS 結果 FROM Q1, Q1 AS Q2, Q1 AS Q3 WHERE Q1.科目="A" AND Q2.科目="B" AND Q3.科目="C"; 後者の方は + - 以外も使えると思います。 または、クエリをもう一段経由させて TRANSFORM First(金額) AS 値 SELECT S FROM (SELECT 1 AS S, * FROM Q1) GROUP BY S PIVOT 科目; 上記をクエリ「Q2」とした場合、以下で SELECT [A]+[B]-[C] AS 結果 FROM Q2; クロス集計「Q2」で、科目をフィールド名に横展開して、その後で計算します。 必要なら科目のフィールドも表示できます。 SELECT [A], [B], [C], [A]+[B]-[C] AS 結果, [D], [E] FROM Q2; のような感じで、 その他として、VBAで、 クエリ「Q1」の Recordset を得て、計算するものを記述すればできると思います。 ※ 効率的なのかは、わかりません。
お礼
アドバイスありがとうございました。
お礼
質問が稚拙にもご回答いただきありがとうございました。 参考になりました。