プロが教える店舗&オフィスのセキュリティ対策術

ピボットテーブルのマクロについて教えてください。

NO 場所  ランク 面積
1  東京  上   10
2  大阪  上   20
3  福岡  中   20
4  広島  中   30
5  東京  中   15
6  東京  中   25
7  大阪  下   35
8  福岡  下   45
9  大阪  下   10
10 大阪  下   10

という表があり、
場所ごとランクごとの面積集計を
ピボットテーブルのマクロを組んで実施したい
のですが(同じ作業を繰り返すので)、
マクロを記録して、内容を実行しようとすると、
「実行時エラー」が出てしまいます。

記録したマクロは以下の通りです。
( → ←のところでエラーが出ます)

Sub Macro1()
 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
  "Sheet1!C2:C4").CreatePivotTable TableDestination:="", TableName:= _
 "ピボットテーブル2", DefaultVersion:=xlPivotTableVersion10
 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
 ActiveSheet.Cells(3, 1).Select
→ With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("場所")   ←
  .Orientation = xlRowField
  .Position = 1
 End With
With ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("ランク")
   .Orientation = xlRowField
   .Position = 2
 End With
 ActiveSheet.PivotTables("ピボットテーブル2").AddDataField ActiveSheet.PivotTables( _
   "ピボットテーブル2").PivotFields("面積"), "データの個数 / 面積", xlCount
 Range("A3").Select
 ActiveSheet.PivotTables("ピボットテーブル2").PivotFields("データの個数 / 面積
").Function = _
 xlSum
End Sub


ピボットテーブルのフィールドリストがうまく挙がってこないようなのですが、
どのようにマクロを組み直せば、よいのでしょうか?


作りたい集計表は、以下のようなものです。

場所 ランク  合計
広島  中   30
 集計     30
大阪  下   55
    上   20
 集計     75
東京  上   10
    中   40
 集計     50
福岡  下   45
    中   20
 集計     65
総計     220

長々とまた見づらくてすみません。
よろしくお願いします。

A 回答 (1件)

こんにちは。


>...SourceData:= "Sheet1!C2:C4"
このC2:C4が問題ですネ。
多分 B:D の列全体を選択してマクロ記録を録られたのでしょう。
ピボットのマクロ記録の場合、アドレス参照形式はR1C1形式になります。

困った事に、これをそのまま実行しようとすると、
今度は C2:C4 をそのままA1形式のセル範囲と認識してしまいます。
ピボットを作成したい元データ範囲が変わってしまいます。

シート全範囲、列範囲を選択してのマクロ記録は気をつけたほうが良いです。

そこで、以下のようなコードに変更してみてください。
Sub sample()
  Dim r As Range

  With ActiveWorkbook
    Set r = .Sheets("Sheet1").Range("A1").CurrentRegion
    With .PivotCaches.Add(SourceType:=xlDatabase, _
               SourceData:=r.Address(external:=True) _
               ).CreatePivotTable(TableDestination:="")
      .AddFields RowFields:=Array("場所", "ランク")
      With .PivotFields("面積")
        .Orientation = xlDataField
        .Caption = "面積計"
        .Function = xlSum
      End With
    End With
  End With
  Set r = Nothing
End Sub

QNo.2926805 や QNo.2097393 も参考にしてみてください。
    • good
    • 1
この回答へのお礼

pauNedさん、こんばんわ。
さっそくの回答をいただいていたのに、
お礼が遅くなりすみませんでした。

教えていただいたマクロで
思い描いていたとおりに出来ました。

たいへん助かりました。
ありがとうございました。

お礼日時:2007/06/07 21:20

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