[[20190126205541]] 『マクロでピボットテーブルを作りたいです。』(あらいぐま) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでピボットテーブルを作りたいです。』(あらいぐま)

お世話になります。
マクロでピボットテーブルを作りたいです。
マクロの記録をして、実行しても「実行時エラー」になってしまいます。

やりたいことは以下です。

1.データの入っている左に新しいシートを追加してピボットテーブルを作りたいです。
2.行ラベルにF列
3.値にG列をデータの個数
4.値に(3の下)G列の合計
5.列ラベルにシグマ(?)ができたのを行ラベルの2の上に移動

※データ数(行数)は実行する時によって異なります。

他に必要な情報などありましたら、教えて下さい。

いつも手作業でやっているので、マクロでできたら嬉しいです。
どうぞよろしくお願いいたします。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


書き忘れてました。

列の名前は以下です。
・F列:地区
・G列:個数

よろしくお願いいたします。
(あらいぐま) 2019/01/26(土) 21:14


>マクロの記録をして、実行しても「実行時エラー」

(1)
どのようなコードが記録され、どの部分で発生しどのような実行時エラー(エラーコード&エラーメッセージ)になっているのか説明があるとアドバイスできることがあるかもしれません。

(2)
なんとなくですけど、ゼロからピボットテーブルを作成するよりは、更新したほうが楽そうな気がしますけど、どうしてもマクロでゼロから作り上げる必要があるんですか?
(どうしてもシートを追加してそこに作らないとダメなんでしょうか?)

(もこな2) 2019/01/26(土) 21:55


あー、話の流れからすると、
おそらく毎回同じファイルの元データを使うのではなく、
同じレイアウトの元データファイルが毎回新たに発生し、
毎回同じ手順でピボットテーブルを設定しては、その状態でファイルをストックしていく

みたいなのが何パターンか業務としてあるのではないでしょうか。
と勝手に想像してます^^; (実際私がそうなのです)

「いつものピボットテーブル」みたいなボタンが欲しいなぁ、と。
そんな趣旨ではないでしょうか?

(白茶) 2019/01/26(土) 22:37


もこな2さん

ありがとうございます。

(1)記録させたマクロは以下で
★を付けたところで
 実行時エラー '5'
 プロシージャーの呼び出し、または引数が不正です。
と言うエラーになってしまいます。

この部分で記録させたマクロは
TableDestination:="Sheet5 となっているのですが
マクロで実行したらsheet6ができてしまっています。
これが原因なのかな?と思ってみていたのですが、
どう修正していいのかわからず・・、です。

すみません、よろしくお願いいたします。

============================================
Option Explicit

Sub Macro1()
'
' Macro1 Macro
'

'

    Sheets.Add
★  ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "Sheet1!R1C1:R13C7", Version:=xlPivotTableVersion12).CreatePivotTable _
        TableDestination:="Sheet5!R3C1", TableName:="ピボットテーブル1", DefaultVersion _
        :=xlPivotTableVersion12
    Sheets("Sheet5").Select
    Cells(3, 1).Select
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("地区")
        .Orientation = xlRowField
        .Position = 1
    End With
    ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
        "ピボットテーブル1").PivotFields("個数"), "データの個数 / 個数", xlCount
    ActiveSheet.PivotTables("ピボットテーブル1").AddDataField ActiveSheet.PivotTables( _
        "ピボットテーブル1").PivotFields("個数"), "データの個数 / 個数2", xlCount
    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("データの個数 / 個数2")
        .Caption = "合計 / 個数2"
        .Function = xlSum
    End With
    With ActiveSheet.PivotTables("ピボットテーブル1").DataPivotField
        .Orientation = xlRowField
        .Position = 1
    End With
End Sub
============================================

(2)白茶さんが書いて下さっている通りで、
毎回ファイルが新たにできてそのファイルにピボットテーブルを作りたいんです。

よろしくお願いいたします。
(あらいぐま) 2019/01/26(土) 23:10


●白茶さん

フォローありがとうございます。
私のやりたいこと、白茶さんの言われていることと同じだと思います。

マクロは記録させて少し手を加えて動かすくらいしかできなくて、
今回ピボットテーブルをマクロにしようとしたら、
うまく行かなくて困っているんです。

以前にもピボットテーブルをマクロにしようとしたけど、
挫折したことがあり、今回は何とか作りあげたいです。

よろしくお願いいたします。
(あらいぐま) 2019/01/26(土) 23:13


>マクロの記録をして、実行しても「実行時エラー」になってしまいます。

よくあるパターンとしては、テーブル名が衝突する場合でしょうか。
ex
(1) マクロの記録をして TableName:="ピボットテーブル1" が作成される
(2) 記録を実行しようとしても、同じ名前のピボットは既にあるのでエラーとなる

上記の対策
 A 既存のピボットテーブルの名前を変える
 B 新規作成するピボットテーブルの名前を既存以外のものとする
でしょうか。
(チオチモリン) 2019/01/26(土) 23:22


チオチモリンさん

ありがとうございます。
ピボットテーブルのあるシートは削除してから、マクロを実行してるので、
テーブル名が衝突してるのではないようなんです。

そして、いろいろやってたら動くようになりました!
(あらいぐま) 2019/01/27(日) 00:01


もこな2さん、白茶さん、チオチモリンさん

アドバイスありがとうございました。

いろいろ試していたところ、
一番初めの
 Sheets.Add
の直後に
 ActiveSheet.Name = "bbb"
として、シートに名前を付けて
そのシートにピボットテーブルを作るようにしたら
うまく動いているようです。

これでもう少し試してみようと思います。
ありがとうございました。
(あらいぐま) 2019/01/27(日) 00:06


>毎回ファイルが新たにできてそのファイルにピボットテーブルを作りたいんです。

それでも、毎回ピボットを作成しなくてよいのでは?

元データ、ピボットとも同じフォーマットなら
雛形のブック(過去に作ったものを転用できます)を用意すれば、

1)新規シート追加
2)雛形のピボットを1)のシートにコピー
3)データソースの範囲を再設定
でできそうです。

手作業でもよいし、マクロだとしても簡単になります。

(マナ) 2019/01/27(日) 13:21


マナさんの2019/01/27(日) 13:21の投稿を拝見して。

あぁ私が(2)で言いたかったことはそれです。
どうしてもシートを追加したいならば、シートごとひな形をコピーして更新すればいいんじゃないかな〜と・・・

(もこな2) 2019/01/27(日) 13:36


マナさん、もこな2さん

ピボットテーブルもコピーできるんですね。
気が付かなかったです。
コピーしてデータソースの範囲を再設定、
これなら手作業でも楽にできると思います。
ありがとうございました。

昨日、皆さんにいろいろ教えてもらって
マクロを書き換えて実行してみたところ、
ピボットテーブルを作ることができたので
嬉しかったです。
(今まで何度も挫折してたので余計に!)
(あらいぐま) 2019/01/27(日) 18:41


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.