VBAとピボットテーブルに関する質問です。

国、年齢別人口、年齢別体重、年齢別慎重に関するピボットがあり、これを国毎にグラフを作成したい意と考えています。データが多いので、国毎にピボットを作成するのが面倒なのでVBAで解決しようとしましたが、手が出ません。

今回はマクロ記録を有効して、ピボットテーブル、グラフをコピーし、それを同じシートにペースト。国別の切り口を日本からアメリカに変更して、グラフも連動させて変更しようとしましたが、できませんでした。

その際に作成したのが下記です。PivotItems で、実行エラー '1004'が出力されます。

Dim pivF As PivotField, pivI As PivotItem
Set pivF = ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("NO.")

For i = 1 To 50
Rows("1:28").Select
Selection.Copy
j = i * 40
Range("A" & j).Select
ActiveSheet.Paste
For Each pivI In pivF.PivotItems
Select Case pivI.Caption
Case i
pivI.Visible = True
Case Else
pivI.Visible = False
End Select
Next

Next i

End Sub

そもそもの手順が悪いのですが、VBAの修正方法、若しくは別のやり方などがあれば教えてください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/02/16 15:50:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント250pt

エラー発生箇所のFORループを
 For Each pivI In pivF("NO.").PivotItems
または
 For Each pivI In ActiveSheet.PivotTables("ピボットテーブル3").PivotFields("NO.").PivotItems
と変更してみてください。

id:windofjuly No.2

回答回数2625ベストアンサー獲得回数1149

ポイント250pt

for eachで回している最中に「全て表示しない」という状況になってしまうため、
「PivotItemクラスのVisibleプロパティを設定できません」と言われてしまうのでしょう

対策例
ループに入る前に Visible = True にしておく

pivF.PivotItems(i).Visible = True
For Each pivI In pivF.PivotItems
    If pivI.Caption <> i Then pivI.Visible = False
Next

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません