- ベストアンサー
EXCELマクロ ピボットテーブルで平均値
- EXCELマクロを使用して、可変する行数で名前別の平均値を出す方法について教えてください。
- ネット検索の結果、合計値を出すマクロはありますが、平均値を出す方法がわかりません。
- また、CreatePivotTable(TableDestination:=Range("A3"))のA3の意味についても教えていただきたいです。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>(2)で進めたいので、(2)のみで結構です。御教示お願いします。 おっとゴメンナサイね。思いつきでチョコちょこっと書き足したところが誤記だったようです。 誤: pvt.pivotfields(1).function = xlaverage 訂正: pvt.datafields(1).function = xlaverage 失礼しました。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
こちらとしてもすっきり解決さっさと終わりたいところですが、ご質問は? >試行錯誤で最初の記述になりました。 >これでよいものかどうか? いま動いてるのでしたら、それでいいですけど? 何がどのように上手く動かないのですか? 補足のご質問でいま何が聞きたいのかも、いま現在の最新の状況も、いずれも不明瞭で、もうしわけありませんが「回答」できません。
補足
御迷惑をお掛けします。 (1) ....... With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.PivotFields("合計 / 点数").Function = xlAverage pvt.PivotFields("合計 / 点数").Caption = "平均点数" End With の場合、 実行時エラー1004 PivotTableクラスのPivotFieldsプロパティを取得できません。 エラー部→ pvt.PivotFields("合計 / 点数").Caption = "平均点数" (2) ....... With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.pivotfields(1).function = xlaverage End With End Sub の場合、 実行時エラー1004 PivotFieldsクラスのFunctionプロパティを設定できません。 エラー部→ pvt.PivotFields(1).Function = xlAverage となります。 (2)で進めたいので、(2)のみで結構です。御教示お願いします。
- keithin
- ベストアンサー率66% (5278/7941)
>With pvt >.PivotFields("名前").Orientation = xlRowField >.PivotFields("点数").Orientation = xlDataField >End With この部分で、作成したピボットテーブルレポートの具体的な中身を操作しています。 ご相談のマクロでわざわざ消して掲示された範囲で他に何か違う事をしているかもしれないので、回答のマクロそのままでは動かない可能性があることに留意してください。 ケース1: ふつーピボットテーブルレポートで、点数をデータに配置すると「"合計 / 点数"」という名前が自動的に付きます。 これを(マクロで・手動で)「変更していない」場合は pvt.pivotfields("合計 / 点数").function = xlaverage pvt.pivotfields("合計 / 点数").caption = "平均点数" のように設定すればOKです。 ケース2: 作成したピボットテーブルレポートのデータ領域に「点数」だけしか配置していない場合 pvt.pivotfields(1).function = xlaverage のように指定する事もできます。 >A3の意味も教えて これは割と見た目通りです。マクロでは新しいシートを挿入し、そこに目的のピボットテーブルレポートを作成しています そのレポートをA3から配置するという意味です。 #補足 実際のピボットテーブルの作成では、レポートフィルタ(ページフィールド)がA1から配置されますが、レポート本体はA3に配置される扱いになります。 そこを無視して無理にA1から配置する事も可能は可能ですが、あまり行いません。
補足
御回答感謝致します。 ・・・・・・・ With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.PivotFields("合計 / 点数").Function = xlAverage End With End Sub で作動しましたが、教えていただいた以下で、 ・・・・・・・ With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.pivotfields("合計 / 点数").function = xlaverage pvt.pivotfields("合計 / 点数").caption = "平均点数" End With End Sub しばらく作動していたのですが、別のパソコンでは作動しなくなり、試行錯誤で最初の記述になりました。 これでよいものかどうか? 個人的には、ケース2で作動させたいのですが、上手く行きません。(以下です) ・・・・・・・ With pvt .PivotFields("名前").Orientation = xlRowField .PivotFields("点数").Orientation = xlDataField pvt.pivotfields(1).function = xlaverage End With End Sub 御教示頂けると幸いです。
お礼
ありがとうございました。 バッチリ作動しました。 本当にありがとうございました。