【会員アンケートご協力のお願い】抽選で計5名様に役立つ書籍をプレゼント!

Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10 Pro : Microsoft 365)
VBAでピボットテーブルのデータの詳細を表示可能にできないようにしたい
投稿日時: 24/11/05 18:06:14
投稿者: ける

VBAでピボットテーブルのデータの詳細を表示可能にできないようにしたいのですが、Web上いろいろ探しても該当するものが見つけられませんでした。
 
他の方に操作できなくするためにピボットテーブルのオプションではなく、VBAで表示不可にしたいと思っています。
何か方法はありますでしょうか?

回答
投稿日時: 24/11/05 19:02:11
投稿者: mattuwan44

>何か方法はありますでしょうか?
 
ピボットテーブルのような結果を出すツールを
新たに開発したらいけますね。
 
ピボットテーブルの操作の制限は、サンプルを探すとこから
やらなくてはなので、時間がかかるかもです。
望みは薄いですがいい方法が見つかれば書きますし、
見つからなければ他の回答者に期待です。

回答
投稿日時: 24/11/05 19:09:28
投稿者: mattuwan44

(サンプルが結構簡単に手に入りました。)
 
>ピボットテーブルのデータの詳細を表示可能にできないようにしたい
 
ちなみに、上記は、行フィールドに項目を2つ以上設定した場合の2つ目以降の項目を
「+」アイコンをクリックで展開させたくないということでしょうか?
 
ならば、状況に応じて、項目を削除したり追加したりしたらいいのではないでしょうか?

回答
投稿日時: 24/11/05 19:18:41
投稿者: mattuwan44

あ、連投すみません。
 
ピボットテーブルを置いておくシートは非表示にしておいて、
他の人に見せるときは、それをコピーして、
値貼り付けしたらよさそうです。
 
あとはアイデア勝負かと思います。

投稿日時: 24/11/05 19:49:25
投稿者: ける

ピボットテーブルの値をダブルクリックするとピボットを構成しているデータが新しいシートに表示されてしまうので表示されないようにしたいのです。
  
ピボットのプロパティから詳細を表示可能にするのチェックを外すことになると思いますが、VBAで制御できるのだろうかと思った次第です。

回答
投稿日時: 24/11/05 20:45:09
投稿者: mattuwan44

あぁ。。。そっちですか。。。
 
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Me.PivotTables(1).TableRange1) Is Nothing Then Cancel = True
End Sub
 
ピボットテーブルのあるシートに上記コードで、
ピボットテーブル内のダブルクリックを無効にできます。
データ部分のみ制御するときは、
TableRange1 → DataBodyRange
に変更です。
 
条件により分岐するといいかと思います。

回答
投稿日時: 24/11/05 20:53:59
投稿者: mattuwan44

あ、オプションを切り替えるなら、
マクロの記録をしたらわかります。
 

Sub Macro2()
'
' Macro2 Macro
'

'
    ActiveSheet.PivotTables("ピボットテーブル1").EnableDrilldown = False
    Range("B6").Select
End Sub

回答
投稿日時: 24/11/05 22:29:12
投稿者: simple

そのブックのすべてのpivot のプロパティを変更するには下記ですね。

Sub test()
    Dim ws As Worksheet
    Dim pt As PivotTable
    For Each ws In Worksheets
        For Each pt In ws.PivotTables
            pt.EnableDrilldown = False
        Next
    Next
End Sub
オプションを戻して詳細表示がされる道もふさぎたい、という話なら、
詳細が表示されたときに、シートを自動的に削除することで可能は可能でしょう。(下記参照)
しかし、それを必要とする人もいるでしょうから、そこまでするのはやり過ぎかもしれません。
 
ThisWorkbookモジュールに以下のイベントプロシージャを書くとよいでしょう。
Private Sub Workbook_NewSheet(ByVal Sh As Object)
    If Sh.ListObjects.Count = 1 Then
        Application.DisplayAlerts = False
        Sh.Delete
        Application.DisplayAlerts = True
    End If
End Sub

回答
投稿日時: 24/11/07 08:01:21
投稿者: simple

私が挙げた以外の方法として、ブックの保護(ワークシート構成を保護)を掛ければ
ワークシートの追加ができず、詳細表示を利用できなくすることができます。
 
後学のために教えて下さい。後先になり恐縮です。
詳細表示を禁じたい理由は何でしょうか。

回答
投稿日時: 24/11/07 12:17:20
投稿者: gombohori

ピボットテーブルを作るときにデータモデルに追加しておいて、
ピボットテーブル分析タブの OLAPツール 数式に変換 すると
CUBE関数をつかった式に変換してくれるので、データの接続の更新以外はなにも出来なくなります。
 
または、最新のEXCELでは PIVOTBY関数とかもあるので、
単純なものなら対応かのうかと

回答
投稿日時: 24/11/11 10:37:33
投稿者: simple

詳細表示を禁じたい理由をお尋ねした理由は以下のようなものです。
・もし、個々の数値を秘匿したいとい話なら、もっと別の観点からの対策(保護関連)が必要かも
 しれません。
・シートを増やしたままにする人がいて困っているので、ということなら、
  注意書きを含めた運用を検討をすべきで、詳細機能を使いたいひとには改悪になる可能性があります。
 
gombohoriさんのいくつかの提案のほか、使えなくする提案がされていますので、
質問をされた以上は、それに対する返事をお願いします。
 
もう興味はない、ということなら「解決済みにする」をチェックして閉じていただけませんか?

トピックに返信