EXCEL 2007 VBAでピボットテーブルを生成しようとしております。
レポートフィルタで初期表示するデータフィールド「メーカー」の値も
指定できればと思っております。
「メーカー」には今回データで「A」「B」「C」「D」「E」とあったとして
「メーカー」 ... 「A」と「C」だけで表示指定したいとして、
下記操作で記録マクロを取ってみました。
1. レポートフィルタ「メーカー」を追加
2. フィルタ条件で「(すべて)」のチェック外して、全て消す。
3. 「メーカー」 ... 「A」と「C」を指定
結果は希望通りなのですが、
記録マクロを確認すると下記のように「A」と「C」で指定できておりません。
これだとメーカー「F」のデータが追加された際、
希望通りでないと思うのですが、良い方法をどなたかご存じないでしょうか?
ActiveSheet.PivotTables("数量予測").PivotFields("メーカー").CurrentPage = "(All)"
With ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
.PivotItems("B").Visible = False
.PivotItems("D").Visible = False
.PivotItems("E").Visible = False
End With
No.1ベストアンサー
- 回答日時:
Ver2007でClearAllFiltersメソッドが追加されました。
繰り返して使う場合も想定して、ClearAllFiltersで一旦全表示にします。
その後、表示したいアイテムを指定して、それ以外(Case Else)は非表示、
という処理で良いかと思います。
Sub try()
Dim pf As PivotField
Dim p As PivotItem
Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
pf.Orientation = xlPageField
pf.ClearAllFilters
For Each p In pf.PivotItems
Select Case p.Value
Case "A", "C" '表示アイテム名をカンマ区切りで指定
Case Else
p.Visible = False
End Select
Next
End Sub
Ver2007以降でないと動作しません。
2003でも使う可能性があるなら以下のようにPageFieldを再配置。
但し、再配置前に更新する必要があります。
Sub try_2()
Dim pf As PivotField
Dim p As PivotItem
Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
pf.Orientation = xlHidden
pf.Parent.PivotCache.Refresh
pf.Orientation = xlPageField
For Each p In pf.PivotItems
Select Case p.Value
Case "A", "C" '表示アイテム名をカンマ区切りで指定
Case Else
p.Visible = False
End Select
Next
End Sub
ありがとうございます!望みどおりに出力することが出来ました!!
ループ処理で指定値でなければ、非表示にするとは考え及びませんでした。
検証・御礼が遅くなり申し訳ございません。
一番目のコードを使わせていただきます。
Excel2003化を渋っている人間がいるので、
これを人質にバージョンアップさせることも出来るので大助かりです。
No.2
- 回答日時:
ぁ、そうだ。
PivotFields("メーカー")のItem数が数百を超える場合は
1件ずつ非表示にしていくとワークシート表示がもたついてかなり遅いです。
その場合、Application.ScreenUpdatingプロパティで表示を制御してください。
それでも遅い場合は、一旦RowFieldに配置してまとめて処理します。
1個だけ仮表示アイテムとして残してそれ以外まとめて非表示にし、
表示アイテムの処理をした後にPageFieldに配置するような感じです。
ちょっと難解かもしれませんが書いておきますね。
Sub try_3()
Const Lst = "A,C" '表示アイテム名をカンマ区切りで指定
Dim pf As PivotField
Dim r As Range
Dim n As Long
Dim x As String
Dim s() As String
Dim si
Application.ScreenUpdating = False
Set pf = ActiveSheet.PivotTables("数量予測").PivotFields("メーカー")
'行フィールドに配置
pf.Orientation = xlRowField
'最左列配置
pf.Position = 1
Set r = pf.DataRange
'データ範囲の1つめのセルを仮表示アイテムとして値を記憶
x = r.Item(1).Value
n = r.Cells.Count - 1
If n > 0 Then
'仮表示アイテムだけ残してまとめて非表示
r.Resize(n).Offset(1).Delete
End If
'表示アイテム処理
s = Split(Lst, ",")
On Error Resume Next
For Each si In s
pf.PivotItems(si).Visible = True
Next
On Error GoTo 0
'記憶しておいた仮表示アイテムの処理
If IsError(Application.Match(x, s, 0)) Then
pf.PivotItems(x).Visible = False
End If
'ページフィールドに配置
pf.Orientation = xlPageField
Application.ScreenUpdating = True
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/06/19 10:08
- Visual Basic(VBA) エクセルのマクロについて教えてください。 4 2023/03/02 08:40
- Excel(エクセル) ワードのマクロについて教えてください。 1 2023/03/11 13:50
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 13:13
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/03/08 09:08
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Excel、VBAでピボットテーブル、pagefieldの絞込み
Excel(エクセル)
-
EXCEL 2010 VBAでピボットで複数のアイテムをセルでフィルタ指定
Visual Basic(VBA)
-
ピボットテーブルの日付フィルタ(VBA)
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
エクセル ピボットテーブルのマクロ設定について
Excel(エクセル)
-
6
Excel VBA ピボットテーブルにて、 最終行の取得の仕方を教えてください
Excel(エクセル)
-
7
複数のピボットを同じフィルターに連動させたいです。 年間の売り上げが1つの表にズラーっとあるのですが
Excel(エクセル)
-
8
EXCEL VBA 指定したファイルが存在しない場合メッセージボックスを表示させる
Access(アクセス)
-
9
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
10
EXCEL VBAで全選択範囲の解除
Excel(エクセル)
-
11
エクセルでエラーが出て困っています。
Excel(エクセル)
-
12
VBA PivotItemをセルの中身で選択
Visual Basic(VBA)
-
13
オートフィルターをかけ、#N/A以外で絞込みするVBA記述をご教示ください
Excel(エクセル)
-
14
Excel VBAからAccessマクロを実行したい
Visual Basic(VBA)
-
15
もしセルが#N/A"なら~をする・・・には?"
Excel(エクセル)
-
16
名前をつけて保存した後、元のファイルに戻るには
その他(コンピューター・テクノロジー)
-
17
ピボットテーブルでの毎回可変するデータの最終行までの範囲を指定したいです。
PowerPoint(パワーポイント)
-
18
特定のPCだけ動作しないVBAマクロがあります。その理由は?
Visual Basic(VBA)
-
19
エクセルVBAのIf,Then 構文でOr条件とAnd条件の結合方法?
Excel(エクセル)
-
20
DATE型変数を初期化する方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SSDのクローンソフト(完全無料...
-
ピボットテーブルで作った2つの...
-
MSIのパソコン、信頼できますか?
-
Picrewの妙子式2メーカーが消え...
-
オーディオデバイス
-
すみません、この450w 電源ユニ...
-
Windows10にしたらSDカード...
-
ラムネ菓子『ミオ』は・・・
-
製薬協と日薬連の違い
-
76と言うメーカーは、なんと言...
-
メーカーに「・・・さん」をつ...
-
EOS50Dの総ショット数の調べ方...
-
敬語の疑問
-
法的根拠があるのか教えてください
-
PC内部で何かが転がる音がします。
-
なぜデスクトップPCは一体型・...
-
制気口の開口率について
-
古いパソコンを処分するには
-
パン
-
PCに関しての運送事故
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SSDのクローンソフト(完全無料...
-
メーカーに「・・・さん」をつ...
-
6畳のお部屋に32型テレビは小さ...
-
MSIのパソコン、信頼できますか?
-
ピボットテーブルで作った2つの...
-
「Hzfluo」とは?
-
EXCEL2007 VBAでピボットのフィ...
-
RAIDを構成する時のハードディ...
-
食洗機の電熱線の所にプラスチ...
-
ゲーミングキーボードをデスク...
-
ベアリングの型式は番号の後に...
-
Wi-Fi
-
電気部品のコンデンサで、ERDE ...
-
製薬協と日薬連の違い
-
76と言うメーカーは、なんと言...
-
メーカーに何度も問い合わせを...
-
ラムネ菓子『ミオ』は・・・
-
GALAXY S22のsc-51cとscg13の違...
-
アダルトビデオメーカーへの問...
-
「フィールドスクリプト」とい...
おすすめ情報