レコード数を絞ってから集計(今まで作成したクラスモジュールの使用例)

ある商品群の在庫リストを作成する際、
「全データでピボットテーブルを作成すると、データが重くなる」
というお話が。

そこで、今まで作成したクラスモジュールを使用して、
手軽に作成できないか考えてみた。
f:id:Infoment:20200822072539p:plain

使用するデータは、いつもの「なんちゃって個人情報」。
今回は景気よく、5,000人分のレコードを使用する。
f:id:Infoment:20200822072857p:plain

使用するクラスモジュールはこちらのArrayEdit。
infoment.hatenablog.com

それと、こちらのPvtTable。
infoment.hatenablog.com

なんちゃって個人情報には「在庫」区分がない。そこで今回は、
都道府県の区分をそれに準え、大阪府のみ抽出してみる。

抽出を終え、テーブルとしてシートに貼り付けた時点で、ある程度
目的を果たせている気もする。だが、更に集計したい場合を想定し
携帯電話のキャリア別平均年齢でピボットテーブルを作成する。

Sub Test()
    Dim arr As Variant
        arr = ActiveSheet.UsedRange
    
    Dim Tb As ListObject
    
        ' 大阪府だけの表を抽出作成。
        With New VBAProject.ArrayEdit
            .source_array = arr
            '都道府県(9列目)で大阪府残し。
            .RowFilter filt:="大阪府", _
                       column_index:=9, _
                       rf_result:=rdRemain
            Set Tb = .PasteArray(sheet_name:="大阪府", _
                               paste_type:=ptTable, _
                               column_autofit:=True, _
                               select_array:=case_edited)
        End With
        
        ' キャリア別、性別で平均年齢を集計。
        With New VBAProject.PvtTable
            .MakePivotTable Tb
            .SetFields xlRowField, "キャリア"
            .SetFields xlColumnField, "性別"
            .SetFields xlDataField, "年齢"
            
            ' 平均値指定。
            .SetValueField xlAverage
            .SetFormat ft桁区切り
        End With
End Sub

結果はこちら。
↓ 作成されたテーブル。5,000人が、348人まで圧縮された。
f:id:Infoment:20200822073535p:plain

↓ 作成されたピボットテーブルがこちら。
平均年齢高めの気がするが、なんちゃってだから良しとしよう。
f:id:Infoment:20200822073634p:plain

参考まで。