『VBA:ピボットの中を変更するには?』(3日前から勉強開始) [VBA利用でピボットの中を変更するには?] 超初心者です。 はじめて投稿させていただきます。 上手くいかずに行き詰っていると、同僚にこちらに質問してはどうかと教えてもらい、おお!こんな素晴らしいサイトがあったのか!と早速投稿させていただいております。 質問ですが、下記のようなものです。 「アンケートの結果をピボット機能を利用して、各質問に対して定型の表のアウトプットをそれぞれ違うSheetに出力させたいのですが、手でやってるととてつもなく面倒なのでこれをVBAでやりたいのです。 買ってきた1000ページ近い参考書を読みながら下記のものをマクロの自動記録をもとに編集してみたのですが、全く動きません。」 PivotFields()の中に変数を入れちゃいけないんでしょうか? もう2日ほど業務の暇を見つけては色々参考本を読んでいるのですが、さっぱりどうすればいいのかわかりません。 親切などなたか、どう改善すれば良いのか教えていただけませんでしょうか? Sub Macro1() Dim myPivot As Integer For myPivot = 1 To 30 Range("A5").Select ActiveSheet.PivotTables("ピボットテーブル2").PivotFields(myPivot).Orientation = _ xlHidden Range("B6").Select With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields(myPivot) .Orientation = xlRowField .Position = 1 End With Cells.Select Selection.Copy Sheets.Add Cells.Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.Columns.AutoFit Selection.Rows.AutoFit Selection.Columns.AutoFit Selection.Rows.AutoFit Range("A1").Select Sheets("pibot").Select Next myPivot End Sub ---- 回答が付かないようなので、、、 難しいことは、さっぱりわかりませんが。。。 PivotFields メソッド のヘルプより expression.''PivotFields('''Index''')'' '''expression''' 必ず指定します。''PivotTable'' オブジェクトを返すオブジェクト式を指定します。 '''Index''' 省略可能です。バリアント型 (''Variant'') の値を使用します。フィールドの名前またはインデックス番号を指定します。 と、なっているようです。 変数の設定が >Dim myPivot As Integer になっているようですが、これを変更してみては如何でしょう? (キリキ)(〃⌒o⌒)b ---- ありがとうございます。 さっそく変数の設定をVariantでやってみましたが、駄目でした、、、 超初心者なので、とんでもない基本的な見落としをしているか、文法がてんででたらめな箇所があるのだとは思いますが、悲しいかな初心者本人が必死に見てもやっぱりわかりません。 (3日前から勉強会氏) ---- こんにちは。 出力のためだけにシートを増やすのであれば、別の手を考えてもよさそう。 シートを増やすのではなく、一枚のシート上で都度集計項目を変更するのは如何? ピボットの機能に「ページ」があります。 ページに項目を設定しておけば、その項目を変更するだけで集計内容が変ります。 (代奈) ---- 代奈さん、お久しぶりっ☆ フォローありがとうございます。 To 3日前から勉強会氏?さん お役に立ちませんで、、、 でも、良かったですね〜 「ピボテの姫」が、久しぶりに登場しましたので、解決に近づけるかもしれませんよ〜♪ (キリキ)(〃⌒o⌒)b ---- うわ(>_<) キリキさんったらっ☆ でも、その後どうなったんでしょうね。。。 よく思うのだけど、ピボット+VBAの組み合わせって、なかなか見掛けないですね。 VBAの達人にはピボットの必要はないんでしょうね。 一方、ピボットには簡易マクロ的なところがあるから、それで事足りてしまったり。 例えば上記の質問で、ピボットの「ページ」を変更して記録をとり、それを変数に置き換えるとどうなるのか? そのあたり、私も知りたいところではあるんです。 自分であれやこれやと試してみてもうまくいかなくて。 まとまった時間が取れる時に、このあたり、新しくスレッドを立ててみたいと思います。 (代奈) ---- > 例えば上記の質問で、ピボットの「ページ」を変更して記録をとり、それを変数に置き換えるとどうなるのか? なんていうか、変数などとむずい事を言わず、やはりピボットの機能をそのまま使ったほうが簡単ということが判明(ーー;) ActiveSheet.PivotTables("ピボットテーブル1").ShowPages PageField:="項目名" これ一行ですべてのページが勝手に展開されます。 (代奈) 自己満足の世界で「解決しました」     p.s. "項目名"は、「ページ」に指定したアイテム名です。 ---- >よく思うのだけど、ピボット+VBAの組み合わせって、なかなか見掛けないですね。 今日は(別トピックで)それを実感しました。 すでに出来てしまったピボットテーブルを変更するよりも、 最初からマクロで好みの表に組み替えたほうが楽・・・ 2000と2003ではコードにかなり違いがあることも判明。(みやほりん)