2016-08-05 17 views
1

私は、次のVBAスクリプトを使用して構築しているピボットテーブルのソースであるデータをいくつか持っています。ソースデータ(Excel VBA)と同じワークシートにピボットテーブルを作成

コードは新しいシートを作成してそこにピボットテーブルを生成していますが、ソースデータがあるシートと同じシートにピボットテーブルを配置します。

また、既存のデータがどこにあるかをチェックし、空のセルを選択する必要があります。

Sub ApplyPivot() 

ActiveWorkbook.Sheets("NOIDA").Select 
Range("A1").Select 
Set objTable = Sheet1.PivotTableWizard 

Set objField = objTable.PivotFields("sector") 
objField.Orientation = xlRowField 

Set objField = objTable.PivotFields("number") 
objField.Orientation = xlColumnField 

Set objField = objTable.PivotFields("quantity") 
objField.Orientation = xlDataField 
objField.Function = xlCount 
objField.NumberFormat = " ######" 

End Sub 
+0

これはあなたのコード全体ですか?上記のコードは新しいシートを作成しません。あなたは完全なコードを共有できますか? – Siva

答えて

1

ここでは、ソースデータのRangeに基づいてコードでピボットテーブルを作成する方法の非常に基本的な例だ - それだけで余分な行のカップルのではなく、あなたの質問にコードごとにウィザードを使用します。

ソースデータからテーブルを削除するには、ソースデータの列数を確認してから、2つの列を追加します。つまり、ソースデータとピボットテーブルの間に空の列が1つあります。

Option Explicit 

Sub ApplyPivotOnSameSheet() 

    Dim wsTarget As Worksheet 
    Dim rngData As Range 
    Dim rngPivotTarget As Range 
    Dim objCache As PivotCache 
    Dim objTable As PivotTable 
    Dim objField As PivotField 

    'create pivot table in code (no wizard) on same sheet 
    Set wsTarget = ThisWorkbook.Sheets("NOIDA") 
    'set range to build table from 
    Set rngData = wsTarget.Range("A1").CurrentRegion 
    'set range for left-hand corner of pivot clear of source data by 1 column 
    Set rngPivotTarget = wsTarget.Cells(1, rngData.Columns.Count + 2) 
    'create cache from data 
    Set objCache = ThisWorkbook.PivotCaches.Create(xlDatabase, rngData) 
    'create table from cache 
    Set objTable = objCache.CreatePivotTable(rngPivotTarget) 

    'your original code 
    Set objField = objTable.PivotFields("sector") 
    objField.Orientation = xlRowField 

    Set objField = objTable.PivotFields("number") 
    objField.Orientation = xlColumnField 

    Set objField = objTable.PivotFields("quantity") 
    objField.Orientation = xlDataField 
    objField.Function = xlCount 
    objField.NumberFormat = " ######" 

End Sub 
+0

**ありがとうございましたRobin Mackenzie **あなたの回答が助けになりました。これはまさに私が探していたものでした。再度、感謝します !!! – techNikunj

+0

問題なし - 私の喜び –

関連する問題