|
▼MIT48 さん:
こんにちは。
> フォームで作ることを考えて
という事ですので、VBAを使って回答させて頂きますね。
まずは準備としてテーブルの仕様固めからです。
先にご提示頂いた売上テーブルについてなのですが、
一番上のレコード
> 107 |********|20100620
は
> (20日締めなので21日〜20日)
という事なので存在してはいけないという事で大丈夫でしょうか?
今後の作業で 右2桁を持って日付とする様な操作が出て来るので
20100620 と 20100720 が同時に存在していると
同じ「20」という日付で集計されてしまいます。
次に
> 支店テーブル
が存在するという事ですので、
支店コード 支店名
101 A支店
102 B支店
103 C支店
の様なデータの持たせ方をして
売上テーブルは「支店コード」で管理してみましょう。
支店コード|伝票番号|売上計上日
--------------------------------
105 |********|20100621
103 |********|20100623
テーブルの準備が整いましたら VBA の出番です。
Sub MakeCrossQuery()
Dim strSQL As String
Dim DB As DAO.Database
Dim RS As DAO.Recordset
Dim QD As DAO.QueryDef
Set DB = CurrentDb
'クエリ Q_Cross の存在チェック
'なかった場合には作成
'あった場合には使いまわし
strSQL = " SELECT * FROM MsysObjects WHERE NAME ='Q_Cross'"
Set RS = DB.OpenRecordset(strSQL, dbOpenSnapshot)
If RS.EOF Then
Set QD = DB.CreateQueryDef("Q_Cross")
Else
Set QD = DB.QueryDefs("Q_Cross")
End If
RS.Close
'クロス集計クエリの作成
strSQL = ""
strSQL = strSQL & " TRANSFORM Count(売上テーブル.伝票番号) AS 伝票番号のカウント "
strSQL = strSQL & " SELECT 売上テーブル.支店コード "
strSQL = strSQL & " FROM 売上テーブル "
strSQL = strSQL & " GROUP BY 売上テーブル.支店コード "
strSQL = strSQL & " PIVOT Right([売上計上日],2);"
QD.SQL = strSQL
QD.Close
MsgBox "クロス集計クエリ作成終了"
End Sub
上記をコピーし、標準モジュールに貼り付け実行させた後
クエリ「Q_Cross」が出来る事を確認してみて下さい。
ここまで出来ましたら段々と
> 伝票のなかった支店
>毎月ごとに自動で31があったりなかったりにできる仕様
に対応して行こうと思います。
|
|