• 締切済み

VBAでピポットテーブルを作成したいのですが・・・・

VBAを使いピボットテーブルを自動的に再作成(データが追加更新されていく為)したいのですがうまくいきません、何方か良い方法を教えて下さい、参考URLでも構いません、宜しくお願い致します。

みんなの回答

  • OtenkiAme
  • ベストアンサー率77% (69/89)
回答No.2

こんにちは。 ブック内のワークシートにデータがあり、 ピボットテーブルを作り変えずに、範囲だけを更新するのなら 数式を使った名前定義を利用されては如何でしょうか。 VBAを使わなくてもいいですよ。 データリストのシートを表示させ、挿入> 名前定義(Ctrl+F3)で 名前を(仮に) "Database" とし、参照範囲に =Sheet1!$A$1:INDEX(Sheet1!$H:$H,COUNTA(Sheet1!$B:$B)) のように定義して追加します。式の意味は、 =シート名!参照データの左上セル:INDEX(シート名!参照データの最終列,COUNTA(シート名!空白セルのない列)) です。 既存のピボットテーブルウィザード2/3まで戻って [F3]キーを押し、作成した名前を選択して[OK]、 ウィザードを[完了]させます。 後は、データシートにデータを追加して ピボットテーブルの更新ボタンをクリックするだけです。 どうしてもVBAを使わないといけないのであれば、 次のような方法ではどうでしょうか? (zap35さんとダブりますが…) 最初に、 1)シート上のリスト内にアクティブセルを置いて、[Ctrl]+[Shift]+[*] マウスで名前ボックスをクリックして"Database"と名前定義します。 (データ > フォーム の機能を使っているなら他の名前にして下さい。) 2)ピボットテーブルを作成します。  ウィザード2の範囲選択テキストボックスで"Database"を設定します。 (XL2003までなら自動で取り込まれていると思いますが…) VBAで更新する時は、 1)シート上のデータ範囲に"Database"と名前定義を再設定する。 2)ピボットテーブルを更新する。 という処理にします。これらの処理をコード化すれば、 可変範囲のピボットテーブル処理ができます。 シート名等変更して下さい。 Sub 名前定義を使ってピボットを更新()   Dim myPivot As PivotTable   Dim myDataSource As Range   With ThisWorkbook     'データのあるシート     Set myDataSource = .Worksheets("hoge1") _             .Range("A1").CurrentRegion     'ピボットテーブルのあるシート     Set myPivot = .Worksheets("hoge2").PivotTables(1)   End With   '名前定義   myDataSource.Name = "Database"   '更新   myPivot.RefreshTable   Set myPivot = Nothing   Set myDataSource = Nothing End Sub なお、名前定義の"Database"のことは、 PivotTableWizardメソッドのヘルプに載っています。 XL2002以降では、xlPivotTableSourcetypeに書いてあります。

全文を見る
すると、全ての回答が全文表示されます。
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

ピボットテーブルを作成するデータ範囲に「名前」を定義し、データが追加されたらマクロで「名前」のデータ範囲を変更し、ピボットテーブルをRefreshする方法で考えました。 まず「挿入」→「名前」→「定義」でピボットテーブルにするデータ範囲に名前をつけます。これを仮に hani とします。 ピボットテーブルウィザードでデータの範囲は =hani として、ピボットテーブルを作成して下さい 次に以下のマクロをATL+F11でVBE画面を開き、左上の「VPAprojectのシート名右クリック」→「挿入」→「標準モジュール」で開く画面に貼り付けます。その上で実際のシートに合わせて4箇所の修正を行ってください(修正箇所が多くてすみません)  2行目:ピボットテーブルがあるシート名(Sheet4→xxxx)    (ただしシート内にピボットテーブルは1つだけにする)  3行目:もとのデータがあるシート名(Sheet1→yyyy)  4行目:ピボットテーブルのデータ範囲の「名前」(hani→zzzz)  8行目:ピボットテーブルのデータ範囲("!$A$1:$B$")   もしタイトルを含む実際のデータ範囲がB列~G列なら "!$B$1:$G$" と記述する   $1 はシートの1行目からタイトル行が始まるという意味です Sub Macro3() Const sht As String = "Sheet4" 'ピボットTableがあるシート名を記述する Const sht2 As String = "Sheet1" 'ピボットTableの元データシート名を記述する Const ar As String = "hani" 'ピボットTableの範囲として定義した「名前」を記述 Dim lastR As Long  lastR = Sheets(sht).Range("A65536").End(xlUp).Row  ActiveWorkbook.Names.Add Name:=ar, RefersToLocal:="=" & sht2 _     & "!$A$1:$B$" & lastR ’この行も実際のデータ列に修正する  Sheets(sht).PivotTables(1).PivotCache.Refresh End Sub 最後にVBE画面を閉じて、ワークシート画面に戻りALT+F8でマクロ一覧を開きマクロ名を選択して「実行」してみてください。データを追加すれば、追加した行もピボットテーブルに計算されます

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelのピボットの項目をVBAで追加するには

    ExcelでRaw dataからVBAでピボットテーブルを作成しています。 現在のピボットの項目には「個別の売り上げ金額」と「個別の売り上げ目標」が個人ごとに集計されているところまでできています。 私はこれから個人ごとの達成率(「個別の売り上げ金額」/「個別の売り上げ目標」 )を追加で出したいと考えています。 VBAを使わずに手動であればピボットフィールドテーブルツールの集計フィールドから「個別の売り上げ金額」/「個別の売り上げ目標」を行って簡単にできなくもないですが、VBA(コード)で達成率まで出したいです。 今回のようにすでにピボットで出ている項目から追加して新たな項目をVBAで出すにはどのようにすればよいでしょうか? 参考となるサイトなどでもあれば教えて下さい。

  • Excel VBAでの 停止→手作業→再開始

    ExcelのVBAを使ってピボットテーブルなどを作成しているのですが、途中でVBAを停止させ、図表の修正や、ピボットテーブルのデータを基に作業をしたいと思っています。 色々と検索したり、書物をあさったりしているのですが、MsgBoxや時間を決めてLoopさせる等は記載されているのですが、どちらも手入力等は出来ません。 ちまたでは出来ない様なコメントも目にしますが、本当にできないのでしょうか? どなたか出来るのであればご指導をお願い致します。 出来ればVBAの記述方法を教えて頂ければ幸いです。

  • アクセスVBAからエクセルの操作

    おはようございます。 アクセスVBAを使用し作成しているのですが、ここ数 日悩んでしまっている事があります。ご教授頂ける と幸いです。宜しくお願い致します。 <悩み・相談> アクセス側からエクセルに出力させた際、オートにて、ピボットテーブルを作成しようと考えております。毎月のデータ件数が違う為(月毎にピボットテ ーブル作成のセル範囲が変わります)、どのように VBAを組めば良いのか悩んでいます。 今現状のVBは、下記の通りです。 ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _ "'受注データ(確定)'!R1C1:R7231C31").CreatePivotTable TableDestination:="", _ TableName:="ピボットテーブル1", DefaultVersion:=xlPivotTableVersion10 ActiveSheet.PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1) ActiveSheet.Cells(3, 1).Select ActiveSheet.PivotTables("ピボットテーブル1").PrintTitles = True ActiveSheet.PivotTables("ピボットテーブル1").AddFields RowFields:=Array("処理区分名", _ "地区", "集計コード", "病院名", "データ"), ColumnFields:="大分類名", PageFields:=Array("担当グループ" _ , "集計地区", "担当者", "中分類") With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("本・個") .Orientation = xlDataField .Position = 1 End With 毎月のデータ件数が、7231で終われば良いのですが、毎月データ件数がランダムな為、上のVBでは使えないですよね??データ件数に関係なく、ピボットテーブルを自動で作成するには、どこをどのように変えたら宜しいでしょうか?? お手数ですが、ご教授頂けると幸いです。

  • Access2003からピボットテーブルの作成

    ACCESSのVBAでピボットテーブルを作成する方法がわかりません。 ACCESSで作成したクエリをそのままデータソースに使用して EXCELの新しいWORKBOOKに出力したいと思っています。 どんな方法でもいいので知っている方がいれば教えていただきたいです。

  • ピボットテーブルについて

    あるデータを元にピボットテーブルを使って表を作成しました。 表を作った後からデータを追加した場合、(例えば表の元となっているデータ欄に行を挿入してデータを追加する)どのようにすれば表に反映できますか? 既存のデータの数値を変えるのであればピボットテーブルの「データの更新」で更新できますが、行を追加してデータの範囲が増えた場合、どうすればそれを表に反映できるのでしょうか? 今のその方法がわからないため追加データが出ると、一から表を作り直しています・・・。 どうか教えてください。

  • ピボットテーブルの更新について教えて下さい。

    ピボットテーブルの更新について教えて下さい。 ピボットテーブルを複数作成しています。 それらは、全て元データは同じなんですが、項目の種類分けの為に複数作成しています。 そこで、教えて頂きたいのは、 今、2つのエクセルシート(名前をabc.xls、def.xlsとします)を作成し、それぞれ同じように複数のピボットテーブルを作成しています。 それぞれのシートでピボットテーブルを更新をした時、abc.xlsではひとつのピボットテーブルを選択し更新すると全てのピボットテーブルが更新されてしまいます(元データが同じものだけですが)。 しかし、def.xlsではひとつのピボットテーブルを更新しても他のピボットテーブルは更新されません(元データが同じものだけですが)。 (更新には「ピボットテーブル」ツールバーの「すべて更新」ボタンは使用していません。当然、「すべて更新」ボタンを使用すればどちらのシートでも全てのピボットテーブルが更新されます) 更新範囲を単体か全体かを指定する、設定があるのでしょうか? 今使用しているエクセルシートで、選択しているピボットテーブルしか更新されないのは1つだけで、いつの間にかこうなっていました。 宜しくお願いします。

  • エクセルVBAでピボットテーブルを作成しています。

    エクセルVBAでピボットテーブルを作成しています。 作成まではできましたが、以下2つのVBAの組み方が分からないのでおしえてください。 【質問1】 ピボットテーブルの作成先を指定できるか? 例えば、予め準備したシートに作成することは可能でしょうか? VBAのどこを触ったら良いか分かりません。 【質問2】 作成されたピボットテーブルの列を、見出しの準備された別シートへ、それぞれ流し込むことはできるか? 例えば ピボットテーブルが以下のように作成されたとして、 A列  B列 購入額 総計 A社  1000 B社  2500 C社  800 予め用意した別シート(A~D列の見出しは固定)のB、C列にピボットのA、B列(最終行まで)をそれぞれ流し込みたいのです。 A列(コード) B列(購入額)  C列(総量)  D列(JANコード) 001      A社        1000      JAN1 002      B社        2500       JAN2 003      C社        800      JAN3 流し込んだ列を元にA、D列にはVLOOKをかける予定です。 何か良い案があれば是非、ご教授ください。

  • エクセルVBA ピボット作成

    SUB テスト1()Sheet1("A2~F3600")のデータを新規ブックのSheet1にピボットテーブル表示させるVBA構文をご教示ください。初心者です宜しくお願いします。

  • マクロでピポットテーブル うまくいかない

    エクセル2007で、ある社内基幹データからとってきたデータを、エクセルシート(sheet1)に貼り付けて、その表からマクロでピボットテーブルを作成し(sheet2か)、簡単な担当者と仕事場所のリスト表を作るといったものを作成しました。 とりあえず、うまく動くのですが、 時々うまくいきません。別のPCでやった場合など。 うまくいかないケースの、原因がよく分かりません。 以下のようなエラーがでまして、黄色の部分が下のものになります 実行時のエラー1004 そのピボットテーブルのフィールド名は正しくありません。ピボットテーブルレポートを作成するには、ラベルの付いた列でリストとして編成されたデータを使用する必要があります。ピポットテーブルのフィールド名を変更する場合は、フィールドの新しい名前を入力する必要があります。 (以下、問題があるとしてデバッグが求められる部分) ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R71C23", Version:=xlPivotTableVersion12).CreatePivotTable _ TableDestination:="Sheet2!R1C1", TableName:="ピボットテーブル2", DefaultVersion _ :=xlPivotTableVersion12 まだ初心者で、上記よく分かりませんので、何が問題なのか、ヒントなどいただけるとありがたいです。

  • CakePHP内でテーブルを作成する方法

    とあるデータを挿入した時に自動的に新しいテーブルが作成されるプログラムを作りたいのですがCakePHPで実現するのはどうすれば良いでしょうか? テーブルを操作するためにはModelを作る必要があるかと思いますが、いまいち情報をさがせずにおります。 参考URLのみでもかまいませんのでよろしくお願い致します。

    • ベストアンサー
    • PHP

専門家に質問してみよう