• 締切済み

ピボットテーブルをマクロで行なうには

以下3行目が項目でデータレコードが4~588行目迄入っています。(行数は毎回変わります) これをピボットテーブルで 縦列に"分類" 横行に"月" フィールドに"受注額(合計)" としたく以下マクロ記録しましたが次に実行しようとするとうまくいきません。 参考書読むとActiveSheetとEnd(xlUp)を使うのかなと思えたのですが 具体的にどのようしたら良いのか宜しく御願いします。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'Aシート'!R3C1:R588C12").CreatePivotTable _ TableDestination:="", TableName:="ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1") .DisplayNullString = False .RowGrand = False .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="分類", _ ColumnFields:="月" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("受注額(合計)") .Orientation = xlDataField .NumberFormat = "#,##0_ ;[赤]-#,##0 " End With End Sub

みんなの回答

  • end-u
  • ベストアンサー率79% (496/625)
回答No.5

>構文のわからない所を「」に書かせていただきます... 「」全部という事ですか? 『?』で結んでいる所ですか? >何でL3なんでしょうか? 別に意味ありません、好きにしてください。 よくわからないけど応用できないという事ですか? >ソ-スはエクセルデータベースで場所は外部に有ります? いいえ。ソ-スはエクセルデータベースで場所はr.Address(external:=True)です。 >空白です?新規に作成するという事でしょうか? はい。 >方向性はエクセルデータフィールド? はい。 教えてもらうだけでなく、自分で調べようという気はありますか? リンク先見ましたか? >>(2)ピボットの範囲はドコに記入されているのですか?? >ピボットテーブルを作成する先。という意味ですよね。 >答えは...『省略しています』 > >.CreatePivotTable(TableDestination:="") >この TableDestination で指定するのですが、上記のように省略すると >ピボットウィザード3/3で[新規ワークシート]にピボットを作成するのと同じ事になります。 マクロ記録できるものは、『試行錯誤』すればたいていのものはできます。 やるかやらないかです。 ヘルプ使ってますか? 調べたい語句にマウスカーソルあてて[F1]キーです。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

できたという事なので良かったです。 Withステートメントを使ってまとめてみると以下。 Sub macro()   Dim r As Range 'ソースデータ範囲   With ActiveSheet     Set r = .Range("L3", .Cells(.Rows.Count, 1).End(xlUp))   End With   With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _                     SourceData:=r.Address(external:=True))     With .CreatePivotTable(TableDestination:="")       .DisplayNullString = False       .RowGrand = False       .AddFields RowFields:="分類", _             ColumnFields:="月"       With .PivotFields("受注額(合計)")         .Orientation = xlDataField         .NumberFormat = "#,##0_ ;[red]-#,##0 "       End With     End With   End With   Set r = Nothing End Sub [Withステートメント]については、前述リンク先を参照してもらうとなんとなくわかるかもしれません。

qq4w2299
質問者

お礼

回答有難う御座いました。 構文のわからない所を「」に書かせていただきますので教えていただけないでしょうか。宜しく御願いします。 Sub macro()   Dim r As Range 'ソースデータ範囲   With ActiveSheet     Set r = .Range("L3", .Cells(.Rows.Count, 1).End(xlUp))     「L3からデータの入っている最終行迄を選択?何でL3なんでしょうか?」   End With   With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, _                     SourceData:=r.Address(external:=True))   「アクティブなワークブックのピボットキャッシュを追加。ソ-スはエクセルデータベースで場所は外部に有ります?」     With .CreatePivotTable(TableDestination:="")     「ピボットを作成します。テーブルの行き先は""空白です?新規に作成するという事でしょうか?」       .DisplayNullString = False       「空白セルに表示する値のチェックを外す」       .RowGrand = False       「行の総計のチェックを外す」         .AddFields RowFields:="分類", _             ColumnFields:="月"       With .PivotFields("受注額(合計)")         .Orientation = xlDataField         「方向性はエクセルデータフィールド?」         .NumberFormat = "#,##0_ ;[red]-#,##0 "       End With     End With   End With   Set r = Nothing   「変数宣言を破棄」 End Sub

  • end-u
  • ベストアンサー率79% (496/625)
回答No.3

補足しておきますね。 >ActiveSheetとEnd(xlUp)を使うのかなと思えたのですが Dim r As Range 'ソースデータ範囲 With Sheets("Aシート")   Set r = .Range("L3", .Cells(.Rows.Count, 1).End(xlUp)) End With ...のような感じで、データ範囲をRange型変数に入れて SourceData:="'Aシート'!R3C1:R588C12" の部分を SourceData:=r.Address(external:=True) とすれば良いです。 それから .NumberFormat = "#,##0_ ;[赤]-#,##0 " ここは自動記録の罠で、そのまま実行してもエラーになります。 .NumberFormat = "#,##0_ ;[red]-#,##0 " に変更してください。

qq4w2299
質問者

お礼

回答有難う御座いました。 以下書いて見ました。 おかげさまでこれで動作したのですが 下記2行目 With Sheets("Aシート") ですが、シート名が固定しない場合はどのようにしたらよいでしょうか? With ActiveSheet ではエラーになってしまいました。    記 Dim r As Range 'ソースデータ範囲 With Sheets("Aシート") Set r = .Range("L3", .Cells(.Rows.Count, 1).End(xlUp)) End With ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ r.Address(external:=True)).CreatePivotTable _ TableDestination:="", TableName:="ピボットテーブル1" ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select With ActiveSheet.PivotTables("ピボットテーブル1") .DisplayNullString = False .RowGrand = False .SmallGrid = False End With ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:="分類", _ ColumnFields:="月" With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("受注額(合計)") .Orientation = xlDataField .NumberFormat = "#,##0_ ;[red]-#,##0 " End With End Sub >With Sheets("Aシート")

qq4w2299
質問者

補足

失礼しました。 With ActiveSheetで出来ました。 出来なかった時はドットを入れていたかな? いただいた構文を理解し、わからないところが有りましたら再度質問させて下さい。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

とりあえず、前座で過去ログだけ紹介しておきます。 『マクロでピボットテーブルを作成するには?』 http://oshiete1.goo.ne.jp/qa2926805.html 『Excel、マクロで、ピボットテーブルでの範囲のコーディングの仕方について』 http://oshiete1.goo.ne.jp/qa2097393.html

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.1

夜も更けたので、前座で参考サイトだけご紹介しておきます。 http://pvttbl.blog23.fc2.com/blog-entry-7.html

関連するQ&A