[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『(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.