- 締切済み
Access VBA データ集計
http://www.ken3.org/vba/backno/vba113.html 上記、URLの 3.スマートに出来なかったのでドロドロした方法 をVBAで記述するとどのようにすれば宜しいでしょうか?
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- hatena1989
- ベストアンサー率87% (378/433)
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をどう使うのか不明でしたので、レコードセットを開いてイミディエイトに出力する例です。