2026年1月24日土曜日

vbaでピボットをフィルターするならタイムラインがいい

vbaでピボットに左上隅のフィルターフィールドの項目で日付によるフィルターをかけたところ、笑えるぐらいの遅さのため、断念した。左上隅のフィルターフィールドの項目をフィルターするには、ひとつひとつの項目を表示(項目.visible=True)するのか、非表示(false)とするのかの設定しなければならない。そして、この設定に恐ろしく時間がかかるためだ。

Dim pf As PivotField
  itemsToHide = Array("date1", "date2", "date3")
  pf.ClearAllFilters
  For i = LBound(itemsToHide) To UBound(itemsToHide)
    pf.PivotItems(itemsToHide(i)).Visible = False
  Next i
数多の試行錯誤で、辿り着いたのは、左上隅のフィルターでななく、タイムラインとPivotFilters.Add2による日付フィルターであった。こちらは、とても高速で処理してくれる。