[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA ピボットテーブル自動更新』(山口)
ピボットテーブルの自動更新がうまくいきません。
下記コードにてテストシートのデータが変更になれば、
ピボットテーブルを自動で変更したいのですが、
どのようにすれば良いですか?
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False Worksheets("テスト").PivotTables("テスト").PivotCache.Refresh Application.EnableEvents = True
End Sub
< 使用 Excel:unknown、使用 OS:unknown >
(マナ) 2020/10/29(木) 19:51
初歩的な質問で申し訳ありません。
よろしくお願いします。
(山口) 2020/10/30(金) 06:28
また、Changeイベントがダメとは言いませんが、ピボットテーブルのあるシートがアクティブになったときに処理すれば十分だったりしませんか?
このほか、使用Excel:unknownとなっているので該当するかわかりませんが、office365でマクロの記録でExcel君にコードを作ってもらってから改造してみると、↓のような命令で更新することができることがわかります。
Worksheets("別のシート").PivotTables(1).PivotCache.Refresh
よって、まずはご自身もマクロの記録を使って、どのような命令をすればよいのか探ってみてはいかがでしょうか?
(もこな2 ) 2020/10/30(金) 07:18
データベースが増えたりしたときに、
データベースの範囲の変更などできるのでしょうか?
(山口) 2020/10/31(土) 17:29
Private Sub Worksheet_Change(ByVal Target As Range) Const データベース先頭 = "A1" '要変更 'データベースの左上隅のセル名 Const ピボット = "ピボットシート" '要変更 'ピボットテーブルのあるシート名 Dim r As Range Set r = Range(データベース先頭).CurrentRegion If Intersect(Target, r) Is Nothing Then 'データ内orデータ行削除の判定 If Intersect(Target, r.Offset(1)) Is Nothing Then Exit Sub End If Application.EnableEvents = False '自身のシートにpivotがある場合のevents防止 With Sheets(ピボット) .PivotTables(1).SourceData = r.Address(, , , True) .PivotTables(1).RefreshTable End With Application.EnableEvents = True End Sub
(kazuo) 2020/10/31(土) 23:05
> .PivotTables(1).SourceData = r.Address(, , , True) は .PivotTables(1).SourceData = r.Address(, , r1c1, True) 他にもバグありボツにして下さい。 (kazuo) 2020/11/01(日) 07:45
実験してみましたが、
ピボットテーブルのデータソースの範囲をテーブルにしておけば テーブルの行/列の追加・挿入はExcelが勝手に対応してくれるので、 マクロでやらなきゃいけないのは
Worksheets("Sheet2").PivotTables("ピボットテーブル1").PivotCache.Refresh
だけです。
大事になのは、 1) データソースのテーブルのあるシートの Changeイベントに書く 2) ピボットテーブルのあるシート名、ピボットテーブル名を間違いなく書く ことです (´・ω・`) 2020/11/01(日) 10:58
データソースの範囲をテーブルにする、とても勉強になりました。
またよろしくお願いします。
(山口) 2020/11/03(火) 22:02
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.