[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(Excel2010 VBA)アクティブセルのピボットの初期設定を変更したい』(Bioferman)
Office2010のVBAにて
アクティブシートのピボットテーブルの設定を変更する
マクロを組もうとしております。
ネット上で紹介されていたマクロを参考に、本質問文末のとおり作成し、
自身の環境で動作することを確認しました。
現状のマクロに、以下2件の要件を追加したいと考えております。
1:値フィールドの集計方法を「合計」に変更する
2:値フィールドのセル書式を3桁カンマ表示(数値)に変更する
色々と試しましたが、
それらしいコードを挿入しても、構文エラーが出てしまいます。
ご指導のほど、よろしくお願い申し上げます。
'Keyboard Shortcut: Ctrl+Shift+T
        Dim ピボット
        'シート内のすべてのピボットについて処理を行う
        For Each ピボット In ActiveSheet.PivotTables
        '集計を削除するfor文
        For Each テーブル In ActiveSheet.PivotTables(ピボット.Name).PivotFields
        テーブル.Subtotals = Array( _
        False, False, False, False, False, False, False, False, False, False, False, False)
        Next テーブル
        With ピボット
            .InGridDropZones = True '従来のピボットテーブルレイアウトにする
            .RowAxisLayout xlTabularRow '表形式にする
            .HasAutoFormat = False        '「更新時に列幅を自動調整する」を「オフ」
            .RepeatAllLabels xlRepeatLabels '「アイテムのラベルをすべて繰り返す」を「オン」
        End With
Next ピボット
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows10 >
ピボットテーブルのマクロは複雑なので、マクロの自動記録から始めてみては?
(渡辺ひかる) 2019/08/20(火) 14:28
ご返信ありがとうございます。
VBA自体が難しいと思っていましたが、
ピボットテーブルは特に複雑なのですね。。
自分で調べたり、ご提案いただきました、自動記録を試したりするなかで
該当動作のコード自体は、以下のとおりと推測するに至ったのですが、
1:値フィールドの集計方法を「合計」に変更する 
 ⇒Function = xlSum
2:値フィールドのセル書式を3桁カンマ表示(数値)に変更する 
 ⇒NumberFormat = "#,##0" 
上記を、すでに動作確認できている既存のマクロにどのように組み込んで
(既存マクロの動作を阻害しない形で、設定対象を定義して)、
セットで機能させるか、
というところをご指導いただきたく、質問した次第です。
そもそも、無理なことを求めた質問になってしまっていたら
申し訳ございません。
よろしくお願い申し上げます。
(Bioferman) 2019/08/20(火) 15:01
>上記を、すでに動作確認できている既存のマクロにどのように組み込んで >(既存マクロの動作を阻害しない形で、設定対象を定義して)、 >セットで機能させるか、 >というところをご指導いただきたく、質問した次第です。
ピボットテーブルの操作のみのコードは完成しているということでしょうか?
であれば、その プロシージャ名を 現行のマクロの 適当な部分(おそらく最後)に
書き込んで呼び出すようにすればいいのでは?
>それらしいコードを挿入しても、構文エラーが出てしまいます。
どこでエラーが出るのか書いてもらわないと何とも言えません
>該当動作のコード自体は、以下のとおりと推測するに至ったのですが、
推測したら確認しないと・・・
(渡辺ひかる) 2019/08/20(火) 17:44
私が冒頭の投稿で書いたマクロを確認いただきたいのですが、
そこまでは完成しており、
動作も確認しました。
ここに上述の2要件を加えたく、
途中、末尾などさまざまな箇所に、思いつく限りの形で、
マクロ自動記録で確認した上述の構文を追加したものの、
様々なエラーが出る、という、状況です。
エラー内容は複数にわたるため、全て挙げるのは困難ですが、
変数定義が重複している、というものか、
対象を定義できていない、というものが、多かったです。
恐らく、対象の定義の仕方がポイントなのかと思われますが、
その点は、自動記録での確認は困難に思われましたので、
質問した次第です。
マクロの基本的な仕組みを理解できていないため、
簡単にかんがえていたのですが、
習熟された方でもそうそう実現できないレベルの難しい内容、
ということが推察できました。
ありがとうございました
(Bioferman) 2019/08/21(水) 00:20
Sub Sample()
    Dim pvt As PivotTable
    Dim pvf As PivotField
    For Each pvt In ActiveSheet.PivotTables
        With pvt
            .InGridDropZones = True
            .RowAxisLayout xlTabularRow
            .HasAutoFormat = False
            .RepeatAllLabels xlRepeatLabels
            For Each pvf In .PivotFields
                If pvf.Name <> "データ" Then
                    pvf.Subtotals(1) = False
                End If
            Next
            For Each pvf In .DataFields
                pvf.Function = xlSum
                pvf.NumberFormat = "#,##0_ "
            Next
        End With
    Next
End Sub
(きまぐれ) 2019/08/21(水) 07:50
返信ありがとうございます。
ご提示いただいたマクロをテストしましたところ、望んでいた通りの挙動となりました。
本当にありがとうございます。
あと1点だけ、後出しで申し訳ないのですが、値フィールドの列(項目数)が複数の場合に
「実行時エラー 1004 PivotFieldクラスのSubtotals プロパティを設定できません」
というエラーが出てしまいます。
(1項目の場合は正常に動作します。)
値フィールドが複数項目になってもエラーにならないようにするには
どのようなマクロとすればよろしいでしょうか。
ピボットを多用する部門に所属しておりまして、
本マクロが完成しますと、
同僚も喜んでくれそうです。
お願いばかりで恐縮ですが、よろしくお願い申し上げます。
(Bioferman) 2019/08/21(水) 09:39
    For Each pvf In .PivotFieldsFields
        On Error Resume Next
        pvf.Subtotals(1) = False
        On Error GoTo 0
    Next
(きまぐれ) 2019/08/21(水) 11:33
ご返信ありがとうございます。
頂戴した部分を置き換えたところ、
想定どおりに動作しました!
バージョンによっても異なるのですね。
お手元にないなかでも適切にご指導下さり、恐縮です。。
御礼・ご報告までに、
最終的なマクロを、こちらに残させていただきます。
    Dim pvt As PivotTable
    Dim pvf As PivotField
    For Each pvt In ActiveSheet.PivotTables
        With pvt
            .InGridDropZones = True '従来のピボットテーブルレイアウトにする
            .RowAxisLayout xlTabularRow '表形式にする
            .HasAutoFormat = False  '「更新時に列幅を自動調整する」を「オフ」
            .RepeatAllLabels xlRepeatLabels '「アイテムのラベルをすべて繰り返す」を「オン」
            For Each pvf In .PivotFields
            On Error Resume Next
            pvf.Subtotals(1) = False
            On Error GoTo 0      '集計を削除する
            Next
                For Each pvf In .DataFields
                pvf.Function = xlSum    'フィールドの集計方法を「合計」に変更する
                pvf.NumberFormat = "#,##0_ "    '値フィールドのセル書式を3桁カンマ表示(数値)に変更する
            Next
        End With
    Next
End Sub
(Bioferman) 2019/08/21(水) 12:10
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
 Modified by kazu.