• ベストアンサー

EXCELのピボットテーブルのデータ更新で、表示で困っています

データ更新の際の増えたデータの扱いで困っております。 増えたデータは更新後テーブルの最下部(集計除く)に表示されると思うのですが、 行のフィールドで更新前から「表示する」設定に設定している条件に合ったものだけを 更新後表示するようにマクロなどで出来るものなのでしょうか? 同じデータを複数のシートで用途別にピボットテーブルにしており、 「表示する」にチェックされているものもバラバラですので ブックを開いた時に全てに増えたデータが付いてきて手動でチェックしていくのも大変ですし、 データとして更新はしたいけど、勝手に表示されては困る状態なのです。 どなたか良いアドバイスがありましたら宜しくお願い致します。

質問者が選んだベストアンサー

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

こんにちは。 > しかし、自己責任で使いますので、… ということなので、参考マクロを貼り付けておきます。 私の使用環境(XL2000,XL2002,XL2003)で動作するよう作成していますが、 Ajiponponさんの使用環境もファイルも知らないので動作保証はいたしかねます。 不具合の箇所は、VBAを勉強されてAjiponponさんが修正してくださいね。 マクロを試す時は、元データに新規データが追加されたら、 エクセルで用意された[すべて更新]や[更新]ボタンを使用せず、 下記のマクロを実行してみてください。 Sub PvtTblRefreshAfterVisibleItemSet()   Dim TempSht As Worksheet   Dim PvtSht As Worksheet   Dim PvtTbl As PivotTable   Dim PvtFld As PivotField   Dim PvtItem As PivotItem   Dim TargetRange As Range   Dim Target As Range   Dim TorF As Boolean   Dim i As Long, j As Long, y As Long '現在のピボットテーブルの状況を作業用シートに書き出す   With Application     .EnableEvents = False     .ScreenUpdating = False   End With   Set TempSht = Worksheets.Add   j = 1   For Each PvtSht In ActiveWorkbook.Worksheets     For Each PvtTbl In PvtSht.PivotTables       i = 1       For Each PvtFld In PvtTbl.PivotFields         If PvtFld.Name <> "データ" Then           If PvtFld.Orientation = xlRowField Or _             PvtFld.Orientation = xlColumnField Then             TempSht.Cells(i, j).Value = PvtSht.Name             TempSht.Cells(i + 1, j).Value = PvtTbl.Name             TempSht.Cells(i + 2, j).Value = PvtFld.Caption             i = 3             For Each PvtItem In PvtFld.PivotItems               If PvtItem.Visible = True Then                 i = i + 1                 TempSht.Cells(i, j) = PvtItem.Caption               End If             Next PvtItem             j = j + 1           End If         End If         i = 1       Next PvtFld     Next PvtTbl   Next PvtSht '外部データ範囲とピボットテーブルをすべて更新する   ActiveWorkbook.RefreshAll '作業用シートに書き出した情報を元にフィールドのアイテムの表示/非表示をする   For y = 1 To TempSht.Range("A1").CurrentRegion.Columns.Count     With TempSht       Set TargetRange = .Range(.Cells(4, y), _                 .Cells(1, y).End(xlDown))       Set PvtFld = Worksheets(.Cells(1, y).Value). _           PivotTables(.Cells(2, y).Value). _           PivotFields(.Cells(3, y).Value)     End With     For Each PvtItem In PvtFld.PivotItems       PvtItem.Visible = True     Next PvtItem     For Each PvtItem In PvtFld.PivotItems       TorF = False       For Each Target In TargetRange         If PvtItem.Caption = Target.Value Then           TorF = True           Exit For         End If       Next Target       If TorF = False Then         On Error Resume Next         PvtItem.Visible = False         On Error GoTo 0       End If     Next PvtItem   Next y   Set PvtFld = Nothing   Set TargetRange = Nothing '作業用シートを削除する   With Application     .DisplayAlerts = False     TempSht.Delete     Set TempSht = Nothing     .DisplayAlerts = True     .ScreenUpdating = True     .EnableEvents = True   End With End Sub

ajiponpon
質問者

お礼

またもやお礼が遅くなりまして、大変申し訳ありません 何とか手を加えてできました~~~!! 要領を得ない拙い質問に回答下さって、そして参考マクロをご提示下さって 本当に有難う御座いました!!

その他の回答 (2)

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

こんにちは。 > 増えたデータは更新後テーブルの最下部(集計除く)に表示されると思うのですが、 並べ替えの指定があるフィールドもあると思いますから、 最下部に表示されるとは、限らないですね。 > 行のフィールドで更新前から「表示する」設定に設定している条件に合ったものだけを > 更新後表示するようにマクロなどで出来るものなのでしょうか? マクロで出来ると思います。 …というか、実務でそのようなマクロを使っております。 私の場合は、予め、各フィールド毎に表示するアイテムを決めていて、 ピボットテーブル作成時に表示/非表示を設定して集計表を作成しています。 > 同じデータを複数のシートで用途別にピボットテーブルにしており、 > 「表示する」にチェックされているものもバラバラですので のようなので、ajiponpon さんが、マクロを組まれるなら処理の流れとしては、 まず、一つのピボットテーブルをターゲットにして 1.作業用のシートを用意する。 2.> 更新前から「表示する」設定に設定している条件に合ったものだけを   を作業用シートにフィールド名と共にアイテム名を書き出しておく。 3.更新する。 4.作業用シートに書き出したフィールドに対して   書き出したアイテムと更新後に表示されたアイテム名を照合して   表示/非表示の設定をする。 5.作業用シートを削除する。 という流れで組み、うまく処理ができたら2~4の処理を 各ピボットテーブル毎に行えばいいのではないでしょうか? なお、親フィールドでアイテムを非表示にしてデータを絞り込んでいる時、 子フィールドでアイテムを表示に設定するとエラーが発生しますので、必ず、 On Error Resume Next 対象のアイテム.Visible= True On Error Goto 0 とした方がいいです。 ところで… 失礼ですが、ピボットテーブルをマクロで操作されたことはありますか? 自己責任で使われるなら、参考となるマクロは提示できますが…。

ajiponpon
質問者

補足

お礼が大変遅くなり申し訳御座いません。 まさにOtenkiAme様がおっしゃるように出来たら有難いと思っていたのです。 そして恥ずかしながらピボットテーブルをマクロで操作したことがなく、 自動記録以外のその他マクロ自体も、出来上がっているものを ちょこっとだけ弄る位にしか勉強中で知識がありません。 しかし、自己責任で使いますので、参考となるマクロをご教授頂けますでしょうか? どうぞ宜しくお願い致します。

noname#176215
noname#176215
回答No.1

抽出したいデータとそうでないデータを分けるのが分かりやすいかと 思います。フラグを表示する列を 元データに追加したらどうですか?

ajiponpon
質問者

お礼

お礼が大変遅くなり、申し訳ありません。 それが元データをあまり触れない状況にありまして… でも参考にさせて頂きます、有難う御座いました。

関連するQ&A

  • エクセルピボットテーブルのフィールドアイテムについて

    はじめまして。質問させていただきます。 売上報告表を集計するためにピボットテーブルを使っています。(エクセル2003) 必要項目はフィールドのプルダウンにチェックを入れることで選択していますが、元データ側に今まで集計したことのない項目が増えるたびにピボットテーブル側でも表示されてしまいます。(取引先フィールドに新規取引会社が増えていく) 表示する項目は固定ですので、現在は増えてしまった項目のチェックを手作業ではずして対応していますが、この作業を行うピボットテーブルが20個近くあるので正直煩雑でたまりません。 (ピボットテーブルは全て一つのブック内にあります。シートは2枚です。参照データ範囲は同一です。) この状態でも選択した項目のみ固定で表示できる設定、もしくはマクロ等ありましたら教えて下さい。 よろしくお願いします。

  • Excel ピボットテーブル 外部データ取り込み

    外部データ取り込みによるピボットテーブルにて、値が0となり正しい値が表示されません。 Book1にデータを蓄積しています。 Book2でBook1のデータを取り込んでピボットテーブルを作成したところ、あるフィールドの集計値だけが0となってしまいます。 問題はBook2でデータを取り込んだ際に、そのフィールドだけが文字列扱いになってしまっているようです。(ピボットテーブルのセルの詳細表示にて、文字列となっていることを確認) Book1にてピボットテーブルを作成した場合、そのフィールドは数値として認識しています。 どのように対処すれば、数値として認識してくれるのでしょうか? 動作環境 Win7 Excel 2010

  • Excel97でピボットテーブルの更新

    Excel97を使っています。 会社で営業さんの案件の進捗管理をしています。 各営業さんが管理しているブックから マクロでデータを吸上げsheet1に表示させています。 そのデータをピボットテーブルを使って 6種類の集計表を作成しています。 営業さんのデータを吸上げ、集計表の更新作業を 毎週しているのですが、 ピボットテーブルを新規に作らずに、 前回のピボットテーブルの表を更新させたいと 思っています。 データ更新用の、ビックリマークのボタンを 押したら、更新できるのですが、それだけでは 案件(行)が増えた場合に対応出来ません。 そこで、前回のピボットテーブルのウィザードを 開いて、「戻る」を1回クリックし、 範囲指定の画面で、範囲を指定し直さなければなりません。 ここで、質問なんですが、 範囲指定の最下行を選択する時に、 前もって「65536」にしておいたら、 次回からは、吸い上げ後、ビックリマークの更新ボタンを クリックするだけでいいように思うのですが、 それでは駄目なのでしょうか? データの数字が変わっているので、それでいいとは 思うのですが、確証がありません。 また、上司が不安がって、毎回新しく作ろうとするので、 時間の無駄だな、と思い、 うまく説明もしたいので、きちんと理解しておきたいと 思います。 説明がわかりにくいかと思いますが、 宜しくお願い致します。

  • ピボットテーブル集計アイテムの書式を設定したい。

    ピボットテーブル集計アイテムの書式を設定したい。 一番下の画像の元データを使って、その下のピボットテーブルを作りました。返品率は集計フィールド、前年比はピボットフィールド「年度」に集計アイテムを追加しました。 ここまでは良かったのですが、前年比は各データとも%表示としたいのです。ピボットテーブル内の各セル毎に個別に書式設定をすれば%表示されるのですが、元データを更新する都度手動で書式設定をせずに済む方法はないでしょうか? ちなみに、 以下の様なマクロも試してみたのですが、 ActiveSheet.PivotTables("TEST").PivotFields("年度").PivotItems("前年比").NumberFormat = "0.00%" オブジェクトはこのプロパティまたはメソッドをサポートしていませんと怒られてしまいました。(汗;)

  • 未だにピボットテーブルがよくわからない・・・

    Excelはもう10年以上も仕事で使ってきて、VBAでマクロを組んで業務を効率化するという仕事もしてきましたが、未だにピボットテーブルだけは理解できません。 ピボットテーブルの使い方を解説したサイトを読んだりもしましたが、どういうことができるのかはだいたい理解できるものの、ピボットテーブルを挿入したあとどうすれば自分の思う集計ができるのかがわからない。 右側にある「ピボットテーブルのフィールド」で、どういうときに「フィールド」「列」「行」「値」それぞれのところへどんな順番で移動すれば良いのかわからない。 同じフィールド内でも順番が入れ替わるだけでピボットテーブルの見栄えがガラッと変わりますよね。 ピボットテーブルを使えば5分で終わるような集計を、僕は1時間とかかけてVBAを使って力技で集計してるのがバカバカしくて悲しくなります。 「VBA使えるなんてすごい!」なんてよく言ってもらえますが、ExcelでできることをわざわざVBAを書いてやるなんて、まるで車輪の再発明じゃないですか。 ピボットテーブルを使いたいというか、理解したいです。 何か良いサイトか本を教えていただけないでしょうか? 特にフィールドのところを詳しく説明してるような・・・。 よろしくお願いいたします。

  • Excel ピボットテーブルの作成に関して

    エクセルでピボットテーブルを作成する際の質問です. 「ピボットテーブルのフィールドリスト」から 項目をピボットテーブルレポートにドラッグしますが, この時,集計の方法を「合計」にしたいのに,時々「データの個数」となります. ドラッグし終わってから,ドラッグした項目を一つ一つ 「右クリック→フィールドの設定→「データの個数」を「合計」に訂正」の過程で 直していかなければならないのが,非常に面倒で苦痛です. 設定を変えて,最初から目的の集計方法を 表示させる(上の場合,最初から「合計」がでる)など,何かよい方法はありませんでしょうか?

  • 共有上のピボットテーブルはデータ更新ができないのでしょうか

    共有シート上でピボットテーブルのデータ更新はできないのでしょうか? データの明細を出そうとしても、共有を解除してから行ってくださいとメッセージが出ます。 何人かで同時編集していることが多いので、何とか共有を解除せずにピボットのデータ更新や明細表示ができるようにしたいのですが。 基本となるピボット集計表を作成してから共有化をかけました。

  • ピボットテーブルの更新ができない

    会社でパソコンを買い換えました。 旧パソコンは、Win2000で、エクセル2003を入れていました。 新パソコンは、Win7x32で、エクセル2003を入れています。 旧パソコンのエクセルファイルを新パソコンに移動しました。 エクセルファイルのピボットテーブルの更新をクリックしました。 更新ができませんでした。 「ピボットテーブルの集計元ファイル'[****.xls]データ'を開くことができません。」と出ます。 ピボットテーブルウィザードを使っても同じように、 「ピボットテーブルの集計元ファイル'[****.xls]データ'を開くことができません。」と出ます。 ファイルを移動して、前と比べておかしなところがあります。 セキュリティ関係で更新ができなくなったんでしょうか? 前と同じように普通に更新するには、どうすればいいでしょうか?

  • Excel2003 ピボットテーブルについて教えて下さい

    Excel2003 ピボットテーブルについて教えて下さい Excel2003でピボットテーブルを作っています。 まず「ブックA」の「シートA-1」にあるデータをもとにして、 新規シート「シートA-2」にピボットテーブルを作りました。 その後、「ブックB」の「シートB-1」にあるデータでピボットテーブルを作ろうとしたのですが、 「シートA-1」「シートB-1」はフィールド項目も表示したい表の形もまったく一緒なので、 「ブックA」のピボットテーブルを流用しようと考えました。 なので「ブックA」のピボット「シートA-2」を、「ブックB」内にコピーして、 その後「ブックB」に新しくできたピボットテーブルの参照範囲を「シートB-1」のデータにしました。 ピボットテーブルは無事にできたのですが、 フィールド名の右の▼をクリックすると出てくるリストに、 「シートA-1」のものと、「シートB-1」のものが混じって表示されてしまいます。 「ブックB」のピボットテーブルには、「シートB-1」のものだけを表示したいのですが…。 フィールドのリストで要らないものを削除する方法、 または、そもそもピボットテーブルのコピー自体でもっと良い方法があったら教えて下さい。 よろしくお願いします。

  • 複数のピボットテーブルを一括でデータ更新したい

    エクセル2000です 50個ぐらいピボットテーブルがありまして 元データはほぼ固まっているのですが 若干の修正をしつつ集計しています。 色々ググってみたのですが やはりピボットテーブルは1個1個「データの更新」を実行しないと 修正が反映されないのでしょうか? 同じピボットテーブルを複製しながら 50個作ればよかったのですが 集計の都合もあり 参照元データ範囲が少しずつ異なっています。 50個もあると、再計算?の待ち時間も長いので なんとか自動で全部を更新できませんか? ご存知のかた、よろしくお願いします。

専門家に質問してみよう