Excel (VBA)

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

 
(Windows 8.1 : Excel 2010)
ピボットテーブル質問です
投稿日時: 19/02/05 22:44:31
投稿者: ゼロ戦戦闘機 

フイルタを普通、一つづつ クリックして選択しますが、VBAで自動的にフィルタを選択したいです。どう書けばよろしいでしょうか。忙しいなか、お願いいたします。

回答
投稿日時: 19/02/05 22:56:53
投稿者: WinArrow
投稿者のウェブサイトに移動

質問のタイトルと
質問の内容が、整合していませんが、・・・・
 
質問の内容に関する回答
 
手操作をマクロの記録でコードを作成してみてください。
ヒントがもらえると思います。

投稿日時: 19/02/08 00:39:29
投稿者: ゼロ戦戦闘機 

遅くなり申し訳ございません。お世話になります。
マクロの記録を提示します。
Sub Macro1()
'
' Macro1 Macro
'
 
'
    Range("C20").Select
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").ClearAllFilters
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").CurrentPage = _
        "パソコン"
    Range("G20").Select
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").ClearAllFilters
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").CurrentPage = _
        "モバイル"
    Range("C10").Select
End Sub
Sub Macro2()
'
' Macro2 Macro
'
 
'
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").ClearAllFilters
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").CurrentPage = _
        "モバイル"
    Range("C9").Select
End Sub
Sub Macro3()
'
' Macro3 Macro
'
 
'
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").ClearAllFilters
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("デバイス").CurrentPage = _
        "パソコン"
    Range("B12").Select
End Sub
 
ひとつは、モバイルを選択するし、次は、パソコンを選択します。
プログラムを書くならばどうするとよろしいですか
自分でも考えてみます。よろしくお願い致します。皆さまありがとうございます。

回答
投稿日時: 19/02/08 09:34:12
投稿者: WinArrow
投稿者のウェブサイトに移動

コードだけ並べられても、表のレイアウトもわからない状況で
 
なんとこたえればよいのか?

投稿日時: 19/02/08 18:49:47
投稿者: ゼロ戦戦闘機 

度々申し訳ございません。ピボットテーブルの内容を説明しますと、ピボットテーブルのフィールドの説明ですが、フィルタの綱目にデバイスです。行の綱目がカテゴリーです。列の綱目が日付です。値の綱目が合計、売上高です。
フィルタに当たる、デバイスの綱目の一つのモバイルと選択します。次に、デバイスの綱目の一つを選択するとパソコンです。
フィルタの綱目のデータがパソコンとモバイルがありますが、ひとつひとつを選択すると 先に書いたマクロの内容になります。 パソコンとモバイルとひとつひとつ選択しないで、フィルタの綱目をひとつひとつ項目の全部を選択するとどういうVBAを書くのでしょうか。よろしくお願い致します。
 

回答
投稿日時: 19/02/09 15:11:21
投稿者: WinArrow
投稿者のウェブサイトに移動

説明している内容が理解できません。
 
掲示のコード(マクロの記録で作成されたコード)は、ピボットテーブルを作成するときに
「レポート」で設定したドロップダウンリストを選択したコードですよね?
1回目の選択が"パソコン"
2回目の選択が"モバイル"
この選択を自動で行いたいということでしょうか?
 

回答
投稿日時: 19/02/09 17:25:57
投稿者: WinArrow
投稿者のウェブサイトに移動

「レポート」で設定したドロップダウンリストに設定されているデータを取得するコード
 を紹介します。
  
Dim PivotPAGE As PivotField, PP As PivotField, PageList, Px As Long
   
     With ActiveSheet.PivotTables("ピボットテーブル1")
         Set PivotPAGE = .PivotFields("デバイス")
         PivotPAGE.ClearAllFilters
         ReDim PageList(0): Px = 0
         For Each PP In PivotPAGE.PivotItems
             ReDim Preserve PageList(Px)
             PageList(Px) = PP.Value
             Px = Px + 1
         Next
     End With
   
これを実行すれば
配列変数:PageListにドロップダウンに設定されている「値」がセットされます。
  
配列変数を順次アクセスして、CurrentPage にセットすれば、自動で切替できます。
もちろん、切替と切替の間には、何らかの処理が入るんですよね?

投稿日時: 19/02/09 20:57:38
投稿者: ゼロ戦戦闘機 

お世話になります。いろいろ有難うございます。
お教え頂きましたことを役に立てるように致します。
切り替えと切り替えの間にプリントがあります。
いろいろありがとうございました。

投稿日時: 19/02/11 23:30:38
投稿者: ゼロ戦戦闘機 

同類の質問になります。
 
     ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("時間帯").CurrentPage = _
         "1"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品群").CurrentPage = _
         "31"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品群").CurrentPage = _
         "32"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品群").CurrentPage = _
         "33"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("時間帯").CurrentPage = _
         "2"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品群").CurrentPage = _
         "31"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品群").CurrentPage = _
         "32"
   ActiveSheet.PivotTables("ピボットテーブル1").PivotFields("品群").CurrentPage = _
         "33"
説明になります。
時間帯1を選択後、品群を31、32、33と選択します。次に、時間帯2を選択後、品群を31、32、33と選択します。
この部分を自動でするにはどうしたらよろしいでしょうか。
別に新規に質問を載せたほうがよろしいのでしょうか。よろしくお願い致します。
 

回答
投稿日時: 19/02/12 09:08:44
投稿者: WinArrow
投稿者のウェブサイトに移動

選択するフィールドが変わっただけで
考え方は同じです。
 単純に応用の範疇と思います。
フィールド名も変数にすることもできます。
そして、切替そのものをサブルーチンかすることもできます。
  
 サブルーチンの例
 
Sub 検索サブ(byVal フィールド名 As String, ByVal 検索値 As String)
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields(フィールド名).ClearAllFilters
    ActiveSheet.PivotTables("ピボットテーブル1").PivotFields(フィールド名).CurrentPage = 検索値
End Sub
 
メイン側
 
Call 検索サブ(フィールド名:="デバイス", 検索値:="パソコン")

投稿日時: 19/02/12 22:33:22
投稿者: ゼロ戦戦闘機 

いろいろ有難う御座います。
サブルーチンの例
Sub 検索サブ(byVal 時間帯 As String, ByVal 品群 As String)
     ActiveSheet.PivotTables("ピボットテーブル1").PivotFields(時間帯).ClearAllFilters
     ActiveSheet.PivotTables("ピボットテーブル1").PivotFields(時間帯).CurrentPage = 品群
End Sub
   
メイン側
  
Call 検索サブ(フィールド名:="時間帯", 検索値:="品群-")
 
こういう風にVBAを書いていくと、対応するのでしょうか。
時間帯が 1、2あります。 品群は、31、32、33 あります。
よろしくお願い致します。忙しいなか申し訳ありません。

回答
投稿日時: 19/02/13 06:09:56
投稿者: simple

> 時間帯1を選択後、品群を31、32、33と選択します。
> 次に、時間帯2を選択後、品群を31、32、33と選択します。

品群について、[複数のアイテムを選択する」のか、
単一のアイテム選択を繰り返すのか、記述が曖昧です。
後者と解釈すると、こういうことですか?

Sub test()
    Dim itm As PivotItem
    Dim itm2 As PivotItem
    
    With ActiveSheet.PivotTables("ピボットテーブル1")
        For Each itm In .PivotFields("時間帯").PivotItems
            .PivotFields("時間帯").CurrentPage = itm.Name
            For Each itm2 In .PivotFields("品群").PivotItems
                .PivotFields("品群").CurrentPage = itm2.Name

                Stop    'ここに印刷なり何かの作業を書く

            Next
        Next
    End With
End Sub

複数アイテムの同時選択なら、マクロ記録をとって調べて下さい。

投稿日時: 19/02/19 10:48:54
投稿者: ゼロ戦戦闘機 

大変遅くなり申し訳ありません。
解答を有難う御座いました。解らなかったことが分かるようになりました。
これを今後に生かしてまいりたいとおもいます。
どうも有難う御座いました。

トピックに返信