重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

 A列~O列にデータがあって、G列に名前、O列に点数が入力されています。列数は変化しませんが、行数が変化します。
 可変する行数で、名前別の平均値をマクロで出すにはどうすればよいですか?
 ネット検索の結果、以下のマクロで合計は出るのですが、平均値が出せません。
 CreatePivotTable(TableDestination:=Range("A3"))のA3の意味も教えていただけないでしょうか。
 よろしくお願いします。

 Sub Macro1()

Dim pvt As PivotTable
Dim rngData As Range

Set rngData = ActiveSheet.Range("A1").CurrentRegion
Sheets.Add
Set pvt = _
ActiveWorkbook.PivotCaches.Add( _
SourceType:=xlDatabase, _
SourceData:=rngData). _
CreatePivotTable(TableDestination:=Range("A3"))
With pvt
.PivotFields("名前").Orientation = xlRowField
.PivotFields("点数").Orientation = xlDataField

End With

 

A 回答 (3件)

>(2)で進めたいので、(2)のみで結構です。

御教示お願いします。

おっとゴメンナサイね。思いつきでチョコちょこっと書き足したところが誤記だったようです。

誤:
pvt.pivotfields(1).function = xlaverage

訂正:
pvt.datafields(1).function = xlaverage

失礼しました。
    • good
    • 0
この回答へのお礼

ありがとうございました。
バッチリ作動しました。
本当にありがとうございました。

お礼日時:2014/12/19 21:46

こちらとしてもすっきり解決さっさと終わりたいところですが、ご質問は?



>試行錯誤で最初の記述になりました。
>これでよいものかどうか?

いま動いてるのでしたら、それでいいですけど? 何がどのように上手く動かないのですか?
補足のご質問でいま何が聞きたいのかも、いま現在の最新の状況も、いずれも不明瞭で、もうしわけありませんが「回答」できません。

この回答への補足

御迷惑をお掛けします。

(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)のみで結構です。御教示お願いします。

補足日時:2014/12/18 21:43
    • good
    • 0

>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

御教示頂けると幸いです。

補足日時:2014/12/18 19:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!