[[20170806184031]] 『ピボットをマクロで記録し別のブックで再生すると』(もうもう) ページの最後に飛ぶ

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

 

『ピボットをマクロで記録し別のブックで再生するとエラーになる』(もうもう)

Aのブックでピボットを作成し、マクロに記録しました。
Bのブックで再生しようとするのですが、エラーになります。
デバッグページ(?)を開くと下記のような表示が出ます。
(表示が黄色くなっている部分のみ抜粋)
試行錯誤しているのですが、解決しません。
よろしくおねがいします。
※ブックは違っても元データのシート名は同じです。
'

    Sheets.Add
    ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        "在庫リスト!R1C1:R9753C11", Version:=xlPivotTableVersion14). _
        CreatePivotTable TableDestination:="Sheet3!R3C1", TableName:="ピボットテーブル5" _
        , DefaultVersion:=xlPivotTableVersion14

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


今何度か実験して気付いたのですが、Sheet1、Sheet2を作るときはエラーになり、
Sheet3になるとできるようです。
Sheet番号に関係なく実行できるようにならないのでしょうか?
(もうもう) 2017/08/06(日) 19:03

>Sheet番号に関係なく実行できるようにならないのでしょうか?

では、どのシートに作成するのですか?
新規シートですか。

(マナ) 2017/08/06(日) 19:25


新規シートならば、
 >TableDestination:="Sheet3!R3C1"
  ↓
 TableDestination:=""

とします。

(マナ) 2017/08/06(日) 22:18


マクロの記録で得られたコードは、
意味がわからなかったりしたら、
ヘルプやネットで調べましょう。

http://www.ken3.org/vba/excel-help.html

以下ヘルプより引用>>

Excel 開発者用リファレンス
PivotCache.CreatePivotTable メソッド
すべて表示すべて表示
すべて非表示すべて非表示
PivotCache オブジェクトに基づいてピボットテーブル レポートを作成します。PivotTable オブジェクトを返します。
構文

式.CreatePivotTable(TableDestination, TableName, ReadData, DefaultVersion)

式 PivotCache オブジェクトを表す変数です。

パラメーター

名前 必須/オプション データ型 説明
TableDestination 必須 バリアント型 (Variant) ピボットテーブル レポートの配置先範囲 (結果のピボットテーブル レポートを配置するワークシート上の範囲) の左上端のセルを指定します。配置先範囲には、引数 expression で指定する PivotCache オブジェクトが含まれているブックのワークシート上を指定してください。
TableName オプション バリアント型 (Variant) 作成するピボットテーブル レポートの名前を指定します。
ReadData オプション バリアント型 (Variant) True を指定すると、外部データベースのすべてのレコードを含むピボットテーブル キャッシュを作成します。このため、キャッシュ サイズがとても大きくなる可能性があります。False を指定すると、データが実際に読み取られる前に、一部のフィールドがサーバーベースのページ フィールドとして設定されます。
DefaultVersion オプション バリアント型 (Variant) ピボットテーブル レポートの既定のバージョンを指定します。

つまり、
TableDestinationに配置先のセル(ブックやシートの情報も含めて)を指定します。

提示されたコードを見ると、
"Sheet3!R3C1"
(シート名が「Sheet3」のシートの3行目1列目)
となっているので、Sheet3というシートが無ければ、
当然こけます。

「マクロの記録」は操作をVBAのコードで記録してくれる機能ですが、
汎用的に使えるコードを作ってはくれません。
手動の操作が、どのようなコードで表現できるかを知るために、
使うものだと思います。
当然操作者が判断したこともコードには記録されません。
操作対象がどれなのか、ちゃんとコードに明記しましょう。
もしできなければ、どうしたいかを、
日本語で説明してみましょう。

(まっつわん) 2017/08/07(月) 11:18


マナ様
ありがとうございました
仰る通りの事がやりたかったのでできました。

まっつわん様
申し訳ありません。
正直、マクロってなんか勝手にやってくれるから便利だよね〜
程度の知識でしか使用していないので
調べても全く原因を突き止めるに至りませんでした。
知識が無いため、今回最初の事象を日本語で説明すると
「マクロを記録したのですが、他のブックで再生できません
実行すると〇〇というエラーが出てデバッグのページが開きます。」
としか言えません。
どのシートに作成するのか?というマナ様の質問も意味がわかりません。
だって「ピボットを作ったら勝手にシートができる」としか認識してませんから。
勝手にできるシートにどれ?という概念を私は持っていませんでした。
初心者ってそんなものじゃないでしょうか?
マナ様の自己回答で「ああ、そういう風に考えるんだ」と納得しました。
知識のない自分を正当化するつもりはありませんが、
回答の後半部分について、私の理解は
「マクロはVBAが使える人間が構成を知る為に使うのものであって
知らない上に日本語で説明できない人は使うものではない」
と取れるのですが。。。
(もうもう) 2017/08/07(月) 12:14


 >「マクロはVBAが使える人間が構成を知る為に使うのものであって 
 >知らない上に日本語で説明できない人は使うものではない」 
 >と取れるのですが。。。

違います。

マクロとは、「作業の自動化をする」ということです。
「マクロの記録」という機能はエクセルの機能をVBA語に翻訳してくれるので、
初心者も上級者もそれらを探るために用意されていて、
マクロを作るための強力な支援ツールである。
だがら、単に記録しただけで、勝手に状況判断をして勝手に動いてはくれない。
そして、作業の自動化はVBAというプログラミング言語を使って書く。
なので、VBAを勉強しなくては、マクロは作れない。

でも、VBA語を使えなくても、
自分のやりたいことは、「日本語」でなら説明できるはずだ。
説明ができたら、VBA語への翻訳は回答者が手伝ってくれるはずだ。
と伝えたかったのです。
しかし、VBA語を覚えようと努力してない人には、
結構冷たいかもです。。。

>だって「ピボットを作ったら勝手にシートができる」としか認識してませんから。
こういうことも、いちいち説明していただかないと解りません。
こちらとしては、
既存のシートの特定のセルか新しいシートかを選択するのは当然のことと理解しています。
こういった認識のずれも、やり取りをしながら修正していくしかないでしょう。
あと、
ブックはシートの集まりで形作られていて、
そのシート達は、セルの集まりで形作られています。
これらも、認識を新たにして難敵のマクロに立ち向かってください。

>ActiveWorkbook
これも。記録したら勝手に記録されますが、
アクティブなワークブックといわれても、
実際マクロを実行するときにホントにアクティブかどうかわからなくないですか?
ブック名をちゃんと指定した方がいいかもです。

まずは、
「自分のやりたいこと」を日本語にしていくところから順々にやっていった方がいいと思います。

(まっつわん) 2017/08/07(月) 12:37


コメント返信:

[ 一覧(最新更新順) ]


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