こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

Access VBA データ集計

http://www.ken3.org/vba/backno/vba113.html

上記、URLの
 3.スマートに出来なかったのでドロドロした方法
をVBAで記述するとどのようにすれば宜しいでしょうか?

投稿日時 - 2012-09-06 22:19:10

QNo.7684361

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

URL先よりもう少しスマートな方法

2つのテーブルを連結するユニオンクエリを作成。

SELECT ID, 項目, 単位, 入り数量, Null AS 出力数量 FROM 表1
UNION ALL
SELECT ID, 項目, 単位, Null AS 入り数量, 出力数量 FROM 表1;

このクエリを、クエリ1 と名前を付けて保存します。
このクエリから集計クエリを作成し、下記のように設定します。

フィールド 集計
--------------------
項目 グループ化
単位 グループ化
入り数量 合計
出力数量 合計
差: Sum(入り数量)-Sum(出力数量) 演算

2つのクエリでできます。
SQLで下記のように記述すれば一つのクエリでできます。

SELECT 項目, 単位,
Sum(入り数量) AS 入り合計,
Sum(出力数量) AS 出力合計,
Sum(入り数量)-Sum(出力数量) AS 差
FROM (
SELECT ID, 項目, 単位, 入り数量, Null AS 出力数量 FROM 表1
UNION ALL
SELECT ID, 項目, 単位, Null AS 入り数量, 出力数量 FROM 表1)
GROUP BY 項目, 単位;


VBAで記述すると、

Dim rs As DAO.RecordSet
Dim stSQL As String

stSQL = "SELECT 項目, 単位, " & _
"Sum(入り数量) AS 入り合計, Sum(出力数量) AS 出力合計, " & _
"Sum(入り数量)-Sum(出力数量) AS 差 " & _
"FROM ( SELECT ID, 項目, 単位, 入り数量, Null AS 出力数量 FROM 表1 " & _
"UNION ALL SELECT ID, 項目, 単位, Null AS 入り数量, 出力数量 FROM 表1) " & _
"GROUP BY 項目, 単位;"

Set rs = CurrentDB.OpenRecordset(stSQL)

With rs
Do rs.EOF
Debug.Print !項目 & " " & !単位 & " " & !入り合計 & " " & !出力合計 & " " & !差
rs.MoveNext
Loop
End with


VBAで記述したSQLをどう使うのか不明でしたので、レコードセットを開いてイミディエイトに出力する例です。

投稿日時 - 2012-09-07 01:37:40

あなたにオススメの質問