[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロ ピボットテーブル更新 ファイル名変更』(admin)
お世話になってます。
マクロ初心者です。
マクロでピボットテーブル更新を組んだブック名を変更したら、
デバッグが出ました。
やりたい事
ファイル名「A」で保存。
ファイル名「B」に変更し、マクロを実行したい。
以下コードです
Sub 更新()
Dim dataS As Worksheet
Dim Pcache As PivotCache
Dim pvt As PivotTable
Dim alWs As Worksheet
Set dataS = ThisWorkbook.Worksheets("実績")
Set Pcache = ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _ SourceData:=dataS.Range("D3").CurrentRegion)
For Each alWs In Application.ActiveWorkbook.Worksheets
For Each pvt In alWs.PivotTables pvt.RefreshTable ←ここでデバッグが起こります。 Next Next
End Sub
ご教示お願い致します。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
こんなのが簡単ではないでしょうか。
pvt.SourceData = dataS.Range("D3").CurrentRegion.Address(, , xlR1C1, True)
(マナ) 2019/06/08(土) 20:23
1 シート「実績」にあるテーブルデータにデータを追加
(別シートでテーブルデータから複数のピボットテーブルが既に作成されています)
2 ファイル名「A」を「B」に変えて保存
3 ファイル「B」を開いてデータを更新して上書き
エクセルバージョン365では問題なく動きますが、2016では止まります。
(admin) 2019/06/08(土) 22:46
Sub 更新() Dim r As Range Dim ws As Worksheet Dim pvt As PivotTable
Set r = Worksheets("実績").Range("D3").CurrentRegion
For Each ws In Worksheets For Each pvt In ws.PivotTables pvt.SourceData = r.Address(, , xlR1C1, True) Next Next
' ここで名前をつけて保存
End Sub
(マナ) 2019/06/08(土) 23:21
実行したところ、
pvt.SourceData = r.Address(, , xlR1C1, True)でエラーが起こりました。
実行時エラー 1004
そのピボットテーブルのフィールド名は正しくありません。
ピボットテーブルレポートを作成するには、ラベルの付いた列でリストとして編成されたデータを
使用する必要があります。ピボットテーブルのフィールド名を変更する場合は、
フィールドの新しい名前を入力する必要があります。
と出ます。
(admin) 2019/06/09(日) 10:56
(マナ) 2019/06/09(日) 11:09
Set r = Worksheets("実績").Range("D3").CurrentRegion ↓ Set r = Worksheets("実績").Range("D3").ListObject.Range
(マナ) 2019/06/09(日) 11:18
1 D3からAI3まで店舗cdなどの項目があります
2 D列からN列までO列からAI列を参照した数式が入っています。
3 これをテーブル化しています。
アドバイス頂いたとおりに
Set r = Worksheets("実績").Range("D3").ListObject.Range
に変更したろころ問題なく動きました。
何度もありがとうございました。
1週間もネットで調べていたことがこんなにも早く解決していただいて感激です。
もう一つご教示お願いします。
>pvt.SourceData = r.Address(, , xlR1C1, True)
これは、ピボットテーブルの基データはシート実績のセルD3のリストという意味でよろしいでしょうか?
(admin) 2019/06/09(日) 12:20
Sub 更新() Dim テーブル範囲 As String Dim ws As Worksheet Dim pvt As PivotTable
テーブル範囲 = Worksheets("実績").Range("D3").ListObject.Range.Address(, , xlR1C1, True)
For Each ws In Worksheets For Each pvt In ws.PivotTables pvt.SourceData = テーブル範囲 Next Next
End Sub
(マナ) 2019/06/09(日) 12:43
なるほど、よりわかりやすくなりました。
またわからないことがありましたらお願いします。
(admin) 2019/06/09(日) 13:14
(マナ) 2019/06/09(日) 13:22
しかし、データ件数が50万行を超えるため、実務で使用する際に
一度テーブルのシートを削除して使用しているのです。
また、ピボットテーブルが12個あるため一度に更新するマクロが必要でした。
(admin) 2019/06/09(日) 17:45
その必要があるのかわかりませんが、それなら仕方ないです。
でも60万行以上って、何をするにしても時間かかりそうですね。
>また、ピボットテーブルが12個あるため一度に更新するマクロが必要でした。
手作業でも、「すべて更新」できませんか。
(マナ) 2019/06/09(日) 19:29
(マナ) 2019/06/11(火) 19:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.