PR

【VBA】テーブルにスライサーを設定する

これで楽に!?VBA活用
記事内に広告が含まれています。

こんにちは、Ryoです。
ワークシート上に作成したテーブルをより活用しやすくする手段の1つとしてスライサーがあります。これがボタンクリック1つでで対象データをフィルタリングすることができる便利な機能なので、今回はスライサーの設定や活用例などについて書いていきたいと思います。

スポンサーリンク

1.サンプル概要

サンプルとして以下テーブルをワークシート(Sheet1)に準備しています。

このテーブルがあるSheet1を切り替え等によりアクティブになった時点で「商品名」を基としたスライサーを表示させています。

スライサー上に表示されている商品名の「製品A」~「製品F」を選択することで、対象データのみをフィルタリングすることが可能です。また、複数選択やフィルターのクリアを実行することもできます。

スライサーの「製品E」選択時の表示

「複数選択」として「製品B」「製品E」を選択した際の表示

このようにクリック一つでフィルタリングが可能なので作業性を向上させることができる機能になります。

2.サンプルコード

本サンプルは対象のワークシートをアクティブにした際に表示させる形にしている為、Sheet1「シートモジュール」に記述しています。

Private Sub Worksheet_Activate()
   
   Dim sh As Variant
   
   'アクティブシート内の図形に対する処理
   For Each sh In ActiveSheet.Shapes
      '図形名が「スライサー」の場合、選択し処理終了
      If sh.Name = "スライサー" Then
         sh.Select
         Exit Sub
      End If
   Next

   Dim TargetSheet As Worksheet
   Set TargetSheet = ActiveSheet
    
   'スライサーの追加と「Slicer_商品名」のCaption設定
   'スライサーを使用するにはSlicerCachesコレクションに
   'Slicerオブジェクトを追加する
   ThisWorkbook.SlicerCaches.Add2(TargetSheet. _
   ListObjects("テーブル1"), "商品名"). _
   Slicers.Add(TargetSheet, , "商品名", "Slicer_商品名", _
   10, 370, 150, 190).Name = "スライサー"

End Sub

対象のWorksheetがアクティブになった状態で処理を実行させるにはActivateイベントを利用しますので、Private Sub Worksheet_Activate()の中に記述していきます。

対象シート内に既に表示されているスライサーが存在している場合はエラーとなってしまうので、最初にFor Eachを利用してシート内の図形(スライサーも図形扱い)の名前をチェックして表示有無を確認しています。

次にSlicerオブジェクトAdd2メソッドを利用して追加していきます。このAddメソッドにWorksheetオブジェクトを指定する都合上、TargetSheetとしてActiveSheetをSetしています。(Add2メソッドで直接ActiveSheetと指定するとエラーになる)

≪Slicerオブジェクト≫

構文:オブジェクト.Slicer

≪Add2メソッド≫

構文:Add(SlicerDestination, Level, Name, Caption, Top, Left, Width, Height)

≪Addメソッドの引数≫

内容
SlicerDestination スライサー配置先のシート名、または配置先のシートを表すWorksheetオブジェクトを指定。配置先はSlicerオブジェクトを含むブック上に存在する必要あり
Level スライサー作成の基になるレベルの序数、またはMDX(マルチディメンション式)の名前を指定
Name スライサーの名前を指定(指定しない場合は自動生成)
Caption スライサーのキャプションを指定
Top スライサー垂直方向の位置をシート上端からポイント単位で指定
Left スライサー水平方向の位置をシート左端からポイント単位で指定
Width スライサーコントロールの幅をポイント単位で指定
Height スライサーコントロールの高さをポイント単位で指定

ワークシートSheet1にはテーブル1が設定されているので、このテーブルに対してスライサーの設定と名前設定(スライサー)を実行しています。

ThisWorkbook.SlicerCaches.Add2(TargetSheet. _
ListObjects(“テーブル1”), “商品名”). _
Slicers.Add(TargetSheet, , “商品名”, “Slicer_商品名”, _
10, 370, 150, 190).Name = “スライサー”

この記述で対象のSheet1をアクティブにした時点でスライサーが表示されます。サンプルではシートモジュールに記述してWorksheet_Activateイベントを利用していますが、任意に起動したい場合など標準モジュールに記述してコマンドボタンなどに割り付けて実行する形でも良いと思います。

ちなみにWorksheet_Activateイベントはブックを開いた時に対象シートになっていても起動しませんので、「ブックを開いた時点で対象シートに表示」させたい場合はブックモジュール(This Workbook)にPrivate Sub Workbook_Open()として同じ内容を記述すればOKです。

3.まとめ

スライサーを設定することでフィルタリング作業がかなり楽になりますので、テーブルを利用して集計作業などを行う際には有用かと思います。



ワークシートのアクティブで起動・ブックを開いた時点で起動などを考えずにボタンクリックで任意に起動する形であれば扱い自体も簡単ですから、何か活用する機会などがあればご検討ください。

以上、テーブルにスライサーを設定する方法についてでした!今回の記事が何かの参考になれば幸いです。

Ryo

タイトルとURLをコピーしました