|
▼さつき さん:
こんにちは。
かなり強引な処理になりますが、
SQLを多用して表の作成までのコードを作成してみました。
ACEESS側の [T_累計]の [週] フィールドは「S1」「S2」とテキスト型の
データが入っているフィールドと仮定して以下のコードを作りました。
Sub 集計2()
Dim CreCode As String
Dim DelCode As String
Dim In1Code As String
Dim In2Code As String
Dim SelCode As String
Dim DrpCode As String
Dim cnn As New ADODB.Connection
Dim rst As New ADODB.Recordset
Dim dbName As String
Dim Kiten As Range
Dim Cnt As Long
Dim FLG As Boolean
Dim F As Variant
dbName = "C:\週報.mdb"
Call SQL作成(CreCode, DelCode, In1Code, _
In2Code, SelCode, DrpCode)
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _
& "Data Source=" & dbName
cnn.Open
Call 削除処理(cnn, DelCode, CreCode)
cnn.Execute In1Code
cnn.Execute In2Code
rst.Open SelCode, cnn
For Cnt = 0 To rst.Fields.Count - 1
Range("A1").Offset(0, Cnt) = rst(Cnt).Name
Next
Range("A2").CopyFromRecordset rst
rst.Close
'-------------------------------------------------
'
' H列に商品を並べる処理
'
'-------------------------------------------------
cnn.Execute DrpCode
Set rst = Nothing
cnn.Close
Set cnn = Nothing
End Sub
Function SQL作成(Cre As String, Del As String, In1 As String, _
In2 As String, Sel As String, Drp As String)
Cre = "CREATE TABLE T_Temp(店名 text(50), 契約者名 text(50), " _
& "担当者名 text(50), 週 text(50),品名のカウント int)"
Del = "DELETE * FROM T_Temp;"
In1 = "INSERT INTO T_Temp ( 店名, 担当者名, 契約者名, " _
& "週, 品名のカウント ) " _
& "SELECT 累計.店名, 累計.担当者名, 累計.契約者名, 累計.週, " _
& "Count(累計.品名) AS 品名のカウント " _
& "FROM 累計 " _
& "GROUP BY 累計.店名, 累計.担当者名, 累計.契約者名, 累計.週;"
In2 = "INSERT INTO T_Temp ( 店名, 週, 担当者名, 契約者名, " _
& "品名のカウント ) " _
& "SELECT 累計.店名 & 'の合計' AS 店名, 累計.週, '' AS 担当者名, " _
& "'' AS 契約者名, Count(累計.品名) AS 品名のカウント " _
& "FROM 累計 " _
& "GROUP BY 累計.店名 & 'の合計', 累計.週, '', '';"
Sel = "TRANSFORM Sum(T_Temp.品名のカウント) AS 品名の合計 " _
& "SELECT T_Temp.店名, T_Temp.担当者名, T_Temp.契約者名 " _
& "FROM T_Temp " _
& "GROUP BY T_Temp.店名, T_Temp.担当者名, T_Temp.契約者名 " _
& "PIVOT T_Temp.週;"
Drp = "DROP TABLE T_temp"
End Function
Function 削除処理(cnn As Object, DelCode As String, CreCode)
On Error Resume Next
cnn.Execute DelCode
If Err.Number <> 0 Then
cnn.Execute CreCode
End If
On Error GoTo 0
End Function
ACCESS側にワークテーブルを作って店ごとの合計件数をそのまま
一気にエクセルに貼り付けるコードです。
さつきさんがこちらのコードで宜しいようでしたら、
引き続き商品を並べる処理を作ろうと思うのですがいかがでしょうか?
|
|