[[20200622142823]] 『ピボットフィールドのうち、特定のものを表示する』(初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ピボットフィールドのうち、特定のものを表示する』(初心者)

お世話になっております。

ピボットテーブルの「G/L 勘定」フィールドのうち、"803042*"、 "811042*"、"823001*"(*以下は何でもOK)のもののみ表示する、というマクロを作りたいです。
『特定のピボットフィールドを表示するマクロ』(バーバラ)という昔の投稿を参考に、以下のマクロを作りましたが、いったん全非表示もされず、目的のものを表示することもできません。どうすればよいでしょうか?

一度Sheet2にピボットを作成(ピボットテーブル1)した後、Sheet2をコピーしてSheet3にしています。
そのSheet3のピボットに「G/L 勘定」フィールドのうち、"803042*"、 "811042*"、"823001*"(*以下は何でもOK)のもののみ表示するという加工を加えます。
以下のマクロはSheet2をコピーしてSheet3にするところからです。

Sheets("Sheet2").Select
Sheets("Sheet2").Copy Before:=Sheets("Sheet2")
ActiveSheet.Name = " Sheet3"

On Error Resume Next

  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("G/L 勘定")
   Dim PvItem As PivotItems
      'いったん全非表示
      For Each PvItem In .PivotItems
          .PivotItems(PvItem.Name).Visible = False
      Next PvItem
'条件に合うものをチェック
For Each PvItem In .PivotItems
         If (PvItem.Name Like "803042*") Or (PvItem.Name Like "811042*") Or _
 ("823001*") Then
           .PivotItems(PvItem.Name).Visible = True
         End If
      Next PvItem
     End With
End sub

< 使用 Excel:Excel2003、使用 OS:Windows10 >


>'いったん全非表示

これはできません。
なので、逆にします。

1)フィルター解除(いったん全表示)
2)不要なものを非表示

(マナ) 2020/06/22(月) 15:29


マナさん

ありがとうございます。

表示するものはわかっているのですが、非表示にするものが毎回変わってわからない場合、対応しようがないのでしょうか?
(初心者) 2020/06/22(月) 15:52


 マナさんのおっしゃる通り、一度すべて表示した後、
表示対象に当てはまらなければ、非表示にする。とすればできると思います。

 Like演算子は、Notをつけることで反転させる(?)ことができます。
 ↓が参考になるかと思います(^^)
https://www.relief.jp/docs/excel-vba-not-like.html

(虎) 2020/06/22(月) 16:27


ありがとうございます。
LIKE にNOTがつけられるんですね。
やってみましたがまったくフィルタがかからず・・・。
(ひとまず "803042*"のみやってみました)

'シート3の作成(減価償却費のみ抽出)
Sheets("Sheet2").Select
Sheets("Sheet2").Copy Before:=Sheets("Sheet2")
ActiveSheet.Name = "Sheet3"

On Error Resume Next

  With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("G/L 勘定")
   Dim PvItem As PivotItems
     'いったん全表示
      For Each PvItem In .PivotItems
          .PivotItems(PvItem.Name).Visible = True
      Next PvItem
'条件に合わないものを非表示
For Each PvItem In .PivotItems
         If Not (PvItem.Name Like "803042*") Then
           .PivotItems(PvItem.Name).Visible = False
         End If
      Next PvItem
     End With
End Sub

(初心者) 2020/06/22(月) 16:55


'条件に合わないものを非表示のところを以下のようにして、
条件に合うものを非表示にしてみてもフィルタがかからなかったので、
そもそも記述の仕方が間違っているのでしょうか・・・。

For Each PvItem In .PivotItems

         If PvItem.Name = "7010110000" Then
           .PivotItems(PvItem.Name).Visible = False
         End If
(初心者) 2020/06/22(月) 17:11

>On Error Resume Next

これなしで実行してみてください

(マナ) 2020/06/22(月) 17:37


全表示にループは必要ありません。
マクロの記録で確認してください。
ClearAllFilters
です。

(マナ) 2020/06/22(月) 17:46


下記は同じです。

 >.PivotItems(PvItem.Name).Visible = False
     ↓
  PvItem.Visible = False

(マナ) 2020/06/22(月) 17:49


マナさん

ありがとうございます。
解決できました!

実行してみたところ、

For Each PvItem In .PivotItems
のところで「方が一致しません」というエラーが出がので、
型をVARIANTにしました。
また、IF NOT OR〜だとエラーが出たので以下のようにしました。

With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("G/L 勘定")

   Dim PvItem As Variant

'条件に合わないものを非表示
For Each PvItem In .PivotItems

         If Not (PvItem.Name Like "803042*") Then
           PvItem.Visible = False
         End If
         If (PvItem.Name Like "811042*") Then
           PvItem.Visible = True
         End If
         If (PvItem.Name Like "823001*") Then
           PvItem.Visible = True
         End If
      Next PvItem

本当にありがとうございました!
(初心者) 2020/06/23(火) 08:52


>型をVARIANTにしました。

複数形だから型が違うとなるのです。

 >Dim PvItem As PivotItems
                ↓~~
  Dim PvItem As PivotItem

>また、IF NOT OR〜だとエラーが出たので

1行にしないで、1条件ずつ判定するとよいです。

    With ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("G/L 勘定")
        'いったん全表示
        .ClearAllFilters

        '条件に合わないものを非表示
        For Each PvItem In .PivotItems
            If Not (PvItem.Name Like "803042*") Then
                If Not (PvItem.Name Like "811042*") Then
                    If Not (PvItem.Name Like "823001*") Then
                        PvItem.Visible = False
                    End If
                End If
            End If
        Next PvItem
    End With

(マナ) 2020/06/23(火) 19:36


マナさん

なるほど!
ありがとうございました。
とても助かりました。
(初心者) 2020/06/24(水) 08:32


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.