あなたが必要とするのは、必要なデータのクエリをコンパイルし、これをExcelにプッシュし、プログラマチックにアクセスからExcelテーブルにピボットテーブルを作成することです。
私はADOをほぼすべて使用しています。そのため、私がここにある構文はこれを反映しています。あなたがDAOならば、それを翻訳する必要があります。
sql = _
"SELECT Name, ProcessDate, HandlingTime " & _
"FROM tbl ... WHERE ..."
GenerateSimplePivot(excel_path&file_name_to_create, sql, 2)
Private Sub GenerateSimplePivot(xname As String, auditData As String, _ pivotColumns As Long)
Dim ii As Long
Dim XL As Object
Dim WB As Object
Dim WS1 As Object
Dim WS2 As Object
Dim rst As ADODB.Recordset
'create/assign xl objects
Set XL = CreateObject("Excel.Application")
XL.Visible = False
XL.DisplayAlerts = False
Set WB = XL.Workbooks.Add
Set WS1 = WB.Worksheets(1)
Set rst = New ADODB.Recordset
rst.Open auditData, CurrentProject.Connection, adOpenKeyset, adLockReadOnly
For ii = 0 To rst.Fields.Count - 1
WS1.Cells(1, ii + 1) = rst.Fields(ii).Name
Next
WS1.Range("A2").CopyFromRecordset rst
WS1.Columns.Autofit
WS1.Name = "AuditData"
For ii = 0 To rst.Fields.Count - 1
'add column formatting logic here, if required
Next
rst.Close
If WB.Worksheets.Count < 2 Then
Set WS2 = WB.Worksheets.Add(, WB.Worksheets(WB.Worksheets.Count))
Else
Set WS2 = WB.Worksheets(2)
End If
WS2.Name = "PivotTable"
DoCmd.SetWarnings False
Dim PTcache As Object
Dim pt As Object
WS1.Activate
Set PTcache = WB.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=WS1.Range("A1").CurrentRegion.Address)
Set pt = PTcache.CreatePivotTable(TableDestination:=WS2.Range("a6"), TableName:="PivotTable ")
WS2.Activate
With pt
For ii = (pivotColumns - 3) To 2 Step -1
.PivotFields(ii).Orientation = xlPageField
Next
On Error Resume Next
.PivotFields(1).Orientation = xlPageField
Err.Clear
ON Error GoTo [error handler label]
.PivotFields(pivotColumns - 2).Orientation = xlRowField
.PivotFields(pivotColumns - 1).Orientation = xlColumnField
.PivotFields(pivotColumns).Orientation = xlDataField
End With
WB.SaveAs FileName:=xname
WB.Close
Set WS1 = Nothing
Set WS2 = Nothing
Set PTcache = Nothing
Set pt = Nothing
Set WB = Nothing
XL.Quit
DoCmd.SetWarnings True
Set rst = Nothing
Set WS1 = Nothing
Set WS2 = Nothing
Set PTcache = Nothing
Set pt = Nothing
Set WB = Nothing
Set XL = Nothing
End Sub
これはあなたの後ろのものですか?
質問にあなたが試したTRANSFORMクエリを追加してください。 ---あなたはデータに何日あるのですか?(SELECT DISTINCT ProcessDate FROM yourTable'を実行し、一番下にスクロールします)? – Andre
申し訳ありません、私はGoogleからのコードを取得し、モジュールに入れて、この 'Print Transforms(" Table "、" column ")のように使用しました。私が覚えていることは、この列のすべてのフィールドをループし、それは新しい列として。そのあまりにも多くの、それはエラーを返します - それはマイクロソフトのサイトから、それを再び見つけることができません。 私はまだ代替案を探しているので、クロス集計を実際には研究していません。しかし、あなたの質問に答えるためには、その日に何人の作品を作ったかによって日々の違いがあります。たとえば、現在の生データには6月分の25k行があります。 – AdorableVB
SQL Serverがオプションでない限り、CrosstabクエリやPivotテーブル以外のものはありません(Access 2010の後には使用されなくなります)。私は6月のすべての行を与えるクエリを作成し、その上でクロス集計クエリウィザードを実行することをお勧めします。このデータはTRANSFORMに適しています。 – Andre