2017-06-22 30 views
0

このマクロはsheet1をすべて使用し、そのピボットテーブルを作成します。しかし、現在のところ、その日の行数に関係なく、シート全体ではなく、作成した行の量だけを見ています。毎回ピボットテーブルのデータとしてsheet1のすべてを選択させる方法はありますか?ピボットテーブルを作成するExcel VBA

可能であれば、修正プログラムの重複を列名(IDNUMBER)に基づいて列全体に変更することもできます。

レンジ( "$ A $ 1:$ $ 2428をAM") レンジ( "$ A $ 1:$ $ 4000 AM") :事前に "PIVOT_STATE_REPORT R1C1!R1048576C39"

Sub PIVOT_STATE() 
' 
' PIVOT_STATE Macro 
' 

' 
    'ActiveSheet.Range("$A$1:$AM$2428").RemoveDuplicates Columns:=36, Header:= _ 
     'xlYes 
    Columns("AJ:AJ").Select 
    ActiveSheet.Range("$A$1:$AM$4000").RemoveDuplicates Columns:=36, Header:= _ 
     xlYes 
    Range("A2").Select 
    Sheets.Add 
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     "PIVOT_STATE_REPORT!R1C1:R1048576C39", Version:=xlPivotTableVersion15). _ 
     CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="PivotTable1" _ 
     , DefaultVersion:=xlPivotTableVersion15 
    Sheets("Sheet1").Select 
    Cells(3, 1).Select 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("State (Corrected)") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable1").PivotFields("Count"), "Sum of Count", xlSum 
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable1").PivotFields("Claim Age in CS"), _ 
     "Sum of Claim Age in CS", xlSum 
    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
     "PivotTable1").PivotFields("Days Since LHN"), _ 
     "Sum of Days Since LHN", xlSum 
    Range("B3").Select 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("Sum of Count") 
     .Caption = "Count of Count" 
     .Function = xlCount 
    End With 
    Range("C3").Select 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields(_ 
     "Sum of Claim Age in CS") 
     .Caption = "Average of Claim Age in CS" 
     .Function = xlAverage 
     .NumberFormat = "0" 
    End With 
    Range("D3").Select 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields(_ 
     "Sum of Days Since LHN") 
     .Caption = "Average of Days Since LHN" 
     .Function = xlAverage 
     .NumberFormat = "0" 
    End With 
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("State (Corrected)") 

    End With 
End Sub 

ありがとう!

答えて

0

この関数で提供されている最後の行と列の式を使用します。 ソースをこれらの変数のコンボにします。

マクロコールアウトの内部次に
Function LastRowColumn(sht As Worksheet, RowColumn As String) As Long 
'PURPOSE: Function To Return the Last Row Or Column Number In the Active 
Spreadsheet 
'INPUT: "R" or "C" to determine which direction to search 

Dim rc As Long 

Select Case LCase(Left(RowColumn, 1)) 'If they put in 'row' or column instead of 'r' or 'c'. 
    Case "c" 
LastRowColumn = sht.Cells.Find("*", LookIn:=xlFormulas, SearchOrder:=xlByColumns, _ 
SearchDirection:=xlPrevious).Column 
Case "r" 
    LastRowColumn = sht.Cells.Find("*", LookIn:=xlFormulas, SearchOrder:=xlByRows, _ 
    SearchDirection:=xlPrevious).Row 
Case Else 
    LastRowColumn = 1 
End Select 

End Function 

x = LastRowColumn(ActiveSheet, "column") 
y = LastRowColumn(ActiveSheet, "Row") 
plast = cells(x,y) 

そして、ピボットテーブルのソース

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
"PIVOT_STATE_REPORT!A1:" & plast, Version:=xlPivotTableVersion15). _ 
    CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="PivotTable1" _ 
    , DefaultVersion:=xlPivotTableVersion15 
0

のために私がやっての最も簡単な方法を考えることをオフに基づいて範囲を作りますこれはあなたのコードのこれらの行を置き換えることになります

Columns("AJ:AJ").Select 
ActiveSheet.Range("$A$1:$AM$4000").RemoveDuplicates Columns:=36, Header:=xlYes 
Range("A2").Select 
あなたがソースデータ

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    rData, Version:=xlPivotTableVersion15). _ 
    CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="PivotTable1" _ 
    , DefaultVersion:=xlPivotTableVersion15 

注これは想定していとしてRDATAの範囲を使用して、次のコードを使用してPivotCache

` 
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
      "PIVOT_STATE_REPORT!R1C1:R1048576C39", Version:=xlPivotTableVersion15). _ 
      CreatePivotTable TableDestination:="Sheet1!R3C1", TableName:="PivotTable1" _ 
      , DefaultVersion:=xlPivotTableVersion15c 
` 

を作るところ

Dim rData As Range: Set rData = ActiveSheet.Range("A1", ActiveSheet.Range("A1").End(xlDown)) 
Set rData = Range(rData, rData.End(xlToRight)) 
rData.RemoveDuplicates Columns:=36, Header:=xlYes 
ActiveWorkbook.PivotCaches.Create SourceType:=xlDatabase, SourceData:=rData 

アップデートで

このことデータの列または行にギャップがないことを確認します。 End(xlDown)は、CtrlキーとDownキーを押した場合と同じです。

+0

こんにちは エラーが発生して(タイプが一致しません)、クエリの下の行がハイライト表示されます。 ActiveWorkbook.PivotCaches.Create SourceType:= xlDatabase、SourceData:= rData –

+0

最新のコードを表示できますか?テストすると問題なく動作しますか? – maxhob17

関連する問題