2017-09-07 2 views
0

おはよう、Excel VBAピボットテーブルダイナミックレンジ

私はピボットテーブルを作成する範囲を取得しようとしています。列の金額は、月ごとと行ごとに異なる場合があります。私のコードは、ピボットテーブルの範囲を設定するためにマークされたセクション(太字)で動作していませんし、その後の行がピボットキャッシュを作成しないと考えています。それを行うか、このコードを修正するより良い方法はありますか?

Dim RowsCount As Long, ColCount As Long 
Dim wsStores As Worksheet 
Dim pCache As PivotCache 
Dim pTable As PivotTable 
Dim PvtRange As Range 
Dim lastRows As Long 

Set wsStores = Worksheets.Add 
RowsCount = Worksheets("Active Instances").Cells(14, 1).End(xlDown).Row 
ColCount = Worksheets("Active Instances").Cells(14, Columns.Count).End(xlToLeft).Column 
**PvtRange = Worksheets("Active Instances").Range(RowsCount, ColCount)** 
Set pCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, PvtRange) 
Set pTable = pCache.CreatePivotTable(wsStores.Range("A3")) 
このために必要
+0

PvtRangeはRangeオブジェクトです。 Set PvtRange = Worksheets( "Active Instances")。Range(RowsCount、ColCount) 'のように、" Set "という語を接頭語に付ける必要があります。しかし、このコードでも、単一のセルに範囲を設定するだけで、ピボットテーブルを単一のセルから作成することはできません。 – jeffreyweir

答えて

0

ありがとう:

Dim wsStores As Worksheet 
Dim pCache As PivotCache 
Dim pTable As PivotTable 
Dim lastRows As Long 

Set wsStores = Worksheets.Add 
Set pCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, Sheets("Active Instances").Range("A14").CurrentRegion.Address(ReferenceStyle:=xlR1C1)) 
Set pTable = pCache.CreatePivotTable(wsStores.Range("A3")) 

を私はしませんでしたピボットテーブルからListObjectに変更したいのですが(これはうまくいきましたが問題に追加されていない)、コードは既に問題なくセットアップされています。将来、私は間違いなくリストオブジェクトを使用しようとします

0

ませVBAコード:あなたは(別名ListObject)エクセル表にあなたのピボットテーブルのソースデータを有効にした場合、表ので、あなたは、どこピボットテーブルのポイントで更新するために、VBAを使用する必要はありませんダイナミックレンジです。したがって、テーブルにデータを追加すると、ピボットテーブルExcelを更新するたびに、テーブルが拡大、縮小、または同じサイズになっているかどうかにかかわらず、すべてのテーブルデータが含まれることがわかります。私は戻って次のリンクでこれについて何かいくつかの時間を書いた:私は次のコードでそれを修正するために管理 @jeffreyweir返信用

https://chandoo.org/wp/2014/03/28/tables-pivottables-and-macros-music-to-your-ears/

+0

こんにちはジェフリー、返事をありがとう。しかし、ソースデータは、VBAコードの前に自動的に作成されます。このピボットテーブルが作成され、値として貼り付けられ、他のレポートが –

+0

から生成されます。ピボットテーブルを作成し、それを静的な値に変換した後、これらの静的な値を使用して別のレポートを送りますか?通常、ピボットテーブルはレポートです。この小さなコードが含まれているプロセス全体を詳しく説明できますか?実際に何をしているのかわかりますか?なぜあなたがListObjectを使用できないのか、あなたのコメントから私には分かりません。私はVBAとピボットテーブルを実際に毎日使用しています。私は常にソースデータをListObjectに格納し、そのListObjectをポイントするピボットテーブルを作成します。それははるかにクリーンなIMHOです。 – jeffreyweir

+0

返事ありがとうJeffrey、私は私のために働いた答えを以下に掲載しました。 ListObjectを使用しなかったが将来的に試してみる –