2017-10-20 13 views
0

私はVBAを初めて使用しており、作業プロジェクトに出てきて、ナットを運転しているものを飛行機で習得しようとしています。テーブルからピボットテーブルを作成するためのExcel VBA

私は自分のデータを整理してテーブルに入れるマクロを持っています。マクロを使ってそのテーブルを取り出し、ピボットテーブル/チャートに変換します。最初のマクロは、スプレッドシート "DailyData"にTable1を作成します。参考のため、ここにある:

私のピボットは、理想的には、行フィールドとして「部品番号」、次に「セットアップ時間」「間接労働」「労働時間」「標準労働時間を」 "持ってしようとしている
Sub Format_Table() 
Dim target As Worksheet 
Set target = ThisWorkbook.Worksheets(1) 
target.Name = "DailyData" 
Worksheets("DailyData").Range("AB:AB,O:P,C:K,A:A").EntireColumn.Delete 
Worksheets("DailyData").UsedRange 
Worksheets("DailyData").UsedRange.Select 
Dim tbl As ListObject 
Set tbl = ActiveSheet.ListObjects.Add(xlSrcRange, Selection, , xlYes) 
tbl.TableStyle = "TableStyleMedium15" 
tbl.HeaderRowRange.Cells(1, 1).Value = "Date" 
tbl.HeaderRowRange.Cells(1, 3).Value = "Machine" 
Worksheets("DailyData").Cells.EntireColumn.AutoFit 
End Sub 

値フィールドとしての労働効率。次のように

は、これまでのところ、私もValueフィールドの一つが右おろか、すべての5を表示するために取得することができていないので、権利を表示するために最初の値のフィールドを取得するために私の現在の試みは、次のとおりです。

Sub sbCreatePivot() 
Dim ws As Worksheet 
Dim pc As PivotCache 
Dim pt As PivotTable 
Set ws = Worksheets.Add 
Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, "DailyData!Table1") 
Set pt = pc.CreatePivotTable(ws.Range("B3")) 
With pt 
    With .PivotFields("Part Number") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    With .PivotFields("Labour Hours") 
     .Orientation = xlColumnField 
     .Position = 1 
    End With 
    .AddDataField .PivotFields("Labour Hours"), "Labour Hours", xlSum 
End With 

End Sub 

私はこのすべてに非常に新しいと私はここでベストを尽くしているように私は本当に助けに感謝しますが、私はちょうどエラー後に打撃を続け、Googleにそれを実行する方法を実行していません。

おかげで、 タイラー

+0

マクロを記録してみましたが、好きなだけ機能するように修正しましたか? – Maldred

+0

私はそれを記録しましたが、別のワークシート、つまり翌日のデータで試してみると、マクロによって取り込まれて編集されますが、失敗します。 –

答えて

0

以下のコードは、私が良くExcelのVBAのcapabiltiesを利用する両方の機能に変更を行った試しがこの

​​
0

.AddDataField .PivotFields("Labour Hours"), "Labour Hours", xlSum 

を交換してみてください。

Sub Format_Table() 

Dim targetSht As Worksheet 
Dim tbl As ListObject 

Set targetSht = ThisWorkbook.Worksheets(1) 
targetSht.Name = "DailyData" 

With targetSht 
    .Range("AB:AB,O:P,C:K,A:A").EntireColumn.Delete 

    Set tbl = .ListObjects.Add(SourceType:=xlSrcRange, Source:=.UsedRange, XlListObjectHasHEaders:=xlYes) 
End With 

With tbl 
    .TableStyle = "TableStyleMedium15" 
    .HeaderRowRange.Cells(1, 1).Value = "Date" 
    .HeaderRowRange.Cells(1, 3).Value = "Machine" 
End With 

targetSht.Cells.EntireColumn.AutoFit 

End Sub 

Sub sbCreatePivot() 

Dim ws As Worksheet 
Dim pc As PivotCache 
Dim pt As PivotTable 
Dim targetSht As Worksheet 
Dim tbl As ListObject 

' set the target sheet 
Set targetSht = ThisWorkbook.Worksheets("DailyData") 
' set the Table (listObject) 
Set tbl = targetSht.ListObjects("Table1") 

Set ws = Worksheets.Add 
' Modified line to set the Pivot Cache 
Set pc = ActiveWorkbook.PivotCaches.Create(xlDatabase, tbl.Range.Address(False, False, xlA1, xlExternal)) 
Set pt = pc.CreatePivotTable(ws.Range("B3")) 

With pt 
    With .PivotFields("Part Number") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    With .PivotFields("Labour Hours") 
     .Orientation = xlColumnField 
     .Position = 1 
    End With 

    ' Modified line 
    .AddDataField .PivotFields("Labour Hours"), "Sum of Labour Hours", xlSum 
End With 

End Sub 
関連する問題