レコード数を絞ってから集計(今まで作成したクラスモジュールの使用例)
ある商品群の在庫リストを作成する際、
「全データでピボットテーブルを作成すると、データが重くなる」
というお話が。
そこで、今まで作成したクラスモジュールを使用して、
手軽に作成できないか考えてみた。
使用するデータは、いつもの「なんちゃって個人情報」。
今回は景気よく、5,000人分のレコードを使用する。
使用するクラスモジュールはこちらの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人まで圧縮された。
↓ 作成されたピボットテーブルがこちら。
平均年齢高めの気がするが、なんちゃってだから良しとしよう。
参考まで。