|
▼小僧 さん:
また時間が空いてしまってすみません・・・m(__)m
>>支店は全部ちゃんと表示されました。
>
>この段階ではまだ全支店を表示する処理をしていないので、
>今回たまたま元データに
>全支店のデータが存在していたのかもしれませんね。
集計前のデータ集計に問題があり、全データでていたみたいです
>クロス集計クエリの列見出しを固定するには
>「IN」句を使います。
>年月によって31日の処理やうるう年の処理がある為、
>こちらも可変にしてあげます。
>
>Sub MakeCrossQuery2()
>Dim strSQL As String
>Dim strIn As String
>Dim DB As DAO.Database
>Dim RS As DAO.Recordset
>Dim QD As DAO.QueryDef
>Dim MyDate As Date
>Dim i As Long
>
> MyDate = #6/21/2010#
> 'MyDate = CDate(Format(DMin("売上計上日", "売上テーブル"), "@@@@/@@/@@"))
> 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) "
>
> 'In句の作成
> '20日締めなので21日〜20日は固定
>
> Do Until Day(MyDate) = 20
> strIn = strIn & ", '" & Day(MyDate) & "'"
> MyDate = DateAdd("d", 1, MyDate)
> Loop
>
> strSQL = strSQL & "IN (" & Mid(strIn, 2) & ",20);"
>
> QD.SQL = strSQL
> QD.Close
>
> MsgBox "クロス集計クエリ作成終了"
>
>End Sub
これで走らせてみたところフィールドに2桁で表示される
10日〜31日はデータ表示されるのですが、1日〜9日は表示
されませんでした。
なので
strSQL = strSQL & " PIVOT Right([売上計上日],2) "
を
strSQL = strSQL & " PIVOT Val(Right([売上計上日],2))"
と変更してみたらうまくいきました。
>> また自分でもわからないなりにVBAを解読してみたのですが
>> どういった仕様になっているのか、よければ教えてください。
>
>解りづらい処理がありましたら
>どの箇所をご提示して頂ければ
>出来る限り回答させて頂きます。
ありがとうございます
さっそくなのですが
Do Until Day(MyDate) = 20
> strIn = strIn & ", '" & Day(MyDate) & "'"
> MyDate = DateAdd("d", 1, MyDate)
> Loop
>
この部分が今回上記の問題にもなったと思うのですが・・・
真ん中の処理がどうなっているのかぜんぜんわからなかったです
3連休ですがよろしくお願いします。
|
|