ピボットテーブルのフィールドリストを全て選択する(sendkeysを使用) | カメレオンのVBA

カメレオンのVBA

VBAの私的メモ書き

全て選択するにはループを用いる方法もあるが、
項目数が多い場合は処理速度が著しく遅くなる場合がある。
このため、Excel 2002以降で使用可能なフィールドリストの(全て選択する)を
sendkeysより実行することとする。

<サンプル>
Sub B_実行()
    'Excel 2002(Application.Versionが10)より前はこの機能はないので実行しない
    If Int(Application.Version) < 10 Then
        Exit Sub
    Else
        Call フィールド全て表示("ピボットテーブル名", "フィールド名")  'ピボットテーブルの名前,フィールドの名前
    End If   
End Sub

Private Sub フィールド全て表示(PT As String, PF As String)
    With ActiveSheet.PivotTables(PT).PivotFields(PF)
        '非表示の時は実行しない
        Select Case .Orientation
            Case 0
                Exit Sub
            Case Else
        End Select
       
        '既にピボットフィールドを全て選択している場合は実行しない
        If .PivotItems.Count = .VisibleItems.Count Then
            Exit Sub
        End If
       
        'ラベルを選択する
        .LabelRange.Select
       
        'sendkeysを用いてピボットフォールドを設定する
        '******動作結果を見て適宜sendkeyの入力方法を変えてみる方がよい******
        '<<<全て選択する>>>

        With Application
            .SendKeys "%{DOWN}"  'Alt + ↓ でフィールドの一覧を表示する
            .SendKeys "{UP}"
            .SendKeys "%  "      'Alt + space でチェックマークをつける
            .SendKeys "{ENTER}"
            .SendKeys "{TAB}"
            .SendKeys " "
            .SendKeys "{ENTER}"
        End With
    End With
End Sub