エクセル実践塾 > エクセル実践塾2016

指定セルの値に応じて、 テーブルのフィルタリングを行いたい

 

10行程度のマクロで、 セル値によるフィルタリングが可能です

次のようなマクロを使えば、 セル値を使った、テーブルのフィルタリングを行えます。


Sub FilterActiveTableByValue()

 Dim ws As Worksheet

 Dim tbl As ListObject

 Dim conditionCell As Range

 Dim filterValue As String

 

 ' アクティブシートを設定

 Set ws = ActiveSheet

 

 ' アクティブテーブルを設定

 Set tbl = ws.ListObjects(1) ' アクティブシートの最初のテーブルを取得(複数テーブルがある場合に対応)

 

 ' フィルタが適用されている場合は解除する

 If ws.AutoFilterMode Then

  ws.AutoFilterMode = False

 End If

 

 ' 条件セルの値を取得

 Set conditionCell = ws.Range("A1") ' 条件セルを指定

 filterValue = conditionCell.Value ' 条件の値を取得

 

 ' フィルタリングの設定

 tbl.Range.AutoFilter Field:=1, Criteria1:=filterValue ' 1列目をフィルタリング(必要に応じて列番号を変更)

End Sub

 

@作例では、A1セルに条件値を入力し、テーブルの1列目のデータを、その値でフィルタリングします

 

Sub FilterActiveTableByValue()

 Dim ws As Worksheet

 Dim tbl As ListObject

 Dim conditionCell As Range

 Dim filterValue As String

 

 ' アクティブシートを設定

 Set ws = ActiveSheet

 

 ' アクティブテーブルを設定

 Set tbl = ws.ListObjects(1) ' アクティブシートの最初のテーブルを取得

 

 ' フィルタが適用されている場合は解除する

 If ws.AutoFilterMode Then

  ws.AutoFilterMode = False

 End If

 

 ' 条件セルの値を取得

 Set conditionCell = ws.Range("A1") ' 条件セルを指定

 filterValue = conditionCell.Value ' 条件の値を取得

 

 ' フィルタリングの設定

 tbl.Range.AutoFilter Field:=1, Criteria1:=filterValue ' 1列目をフィルタリング

End Sub

A次のようなマクロを、シートなどに作成します

このマクロ FilterActiveTableByValue は、アクティブシートの最初のテーブルに対して、特定の値を条件にフィルタリングを行うためのものです。

宣言と変数の設定

Dim ws As Worksheet
Dim tbl As ListObject
Dim conditionCell As Range
Dim filterValue As String

ws: アクティブシートを格納するための変数。

tbl: アクティブシート上のテーブル(ListObject型)を格納するための変数。

conditionCell: 条件値が入力されているセル(Range型)。

filterValue: 条件セルから取得した値を格納する文字列変数。

アクティブシートとテーブルを取得

Set ws = ActiveSheet
Set tbl = ws.ListObjects(1)

ActiveSheet を変数 ws に格納。

アクティブシートに存在する最初のテーブル(ListObjects(1))を tbl に格納。

既存のフィルタを解除

If ws.AutoFilterMode Then
 ws.AutoFilterMode = False
End If

シートにフィルタがかかっている場合に True になり、それを解除します。

条件値の取得

Set conditionCell = ws.Range("A1")
filterValue = conditionCell.Value

アクティブシートのセル A1 を条件セルとして指定し、そのセルから取得した値を文字列として格納します。

条件地を入力するセル番地に合わせて、「A1」の部分を変更します。

フィルタリングの適用

tbl.Range.AutoFilter Field:=1, Criteria1:=filterValue
tbl.Range

指定した列(Field引数)を、指定した条件(Criteria1引数)でフィルタリングします。

Field:=1: テーブルの1列目を対象にフィルタリング。他の列を対象にする場合には、その番号を「1」の代わりに指定します。

Criteria1:=filterValue: フィルタリングの条件を指定しています。「Criteria1」は1つ目の条件という意味なので、末尾はアルファベット小文字のlではなく、数字の1である点に注意してください。

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 

 

●指定セルの値を条件として、テーブルをフィルタリングするマクロを作る動画です

関連する他のページ

労働時間を計算するユーザー定義関数を使って、 残業時間を求めるユーザー定義関数を作りたい
既存のユーザー定義関数は、 別のユーザー定義関数内で実行して、 その結果を利用することができます

勤務時間や残業時間を、簡単に集計したい
ピボットテーブルを使えば、個人別の集計を簡単に行えます

記録した時刻を、15分単位で丸めたい
CEILING関数を使うと、15分を基準値にして、その倍数で時刻を丸められます

残業時間を求めたい
労働時間から、 8時間を表す"8:00"を減算します

労働時間を求めたい
退社時刻から出社時刻と休憩時間を減算します

実働時間や残業時間を、 ○.○時間で求めたい
時間に24をかけて、 表示形式を「数値」にし、 小数点以下の表示桁数を調整します

残業時間や深夜時間、早出時間を計算したい
MAX関数を使えば、 それが存在するときにだけその時間が表示されるようにできます

所定労働時間を求めたい
MIN関数を使って、 法定労働時間の8時間を最大値とする数式を設定します

勤務時間0を非表示にしたい
休日の勤務時間0は、 表示形式をユーザー定義することで非表示にできます

勤務時間を計算したい
退勤時刻から出勤時刻を減算することで、 勤務時間を求められます

選択したセル範囲のデータから、一意のものを取り出したい
マクロなら可能です

選択したセル範囲のデータを、一列にまとめたい
10行程度のマクロでも行えます

組み合わせ一覧を表示するマクロを、 要素数と選び出す数を自由に指定できるものにしたい
入れ子構造のマクロでは汎用的にできないので、 再帰処理を使ったマクロにします

ABCの観点別評価の組み合わせパターンを知りたい
入れ子構造のマクロで求めることができます

ドロップダウンリストで選んだデータを、 選んだ直後に、 対応する別データに置換して入力したい
セル値の変化を監視するマクロで実行できます

置換リストを使って、 複数の置換をまとめて行いたい
10行程度のマクロで、 置換リストを使った一斉処理が可能です

セルに入力されている文字列を、そのシート名にしたい
簡単なマクロで実現できます

マクロ実行の対象範囲を固定したい
セルやセル範囲は、 Rangeで指定できます

選択中のセル範囲に含まれる空セルを、 マクロ処理の対象から除外したい
空セルでないことを条件に、 マクロを実行するよう、 If文を追加します

選択中のセル範囲に対してのマクロ実行結果を、 別のセルに表示したい
Offsetを使うと、 対象のセルの位置を行列単位でずらすことができます

選択中のセル範囲に対するマクロを作りたい
For Each〜Nextで、 選択中のセル範囲(Selection)に対する処理を記述します

労働時間を求めたい
退社時刻から出社時刻と休憩時間を減算します

文字列を含む時刻計算でエラー表示させたくない
IFERROR関数を使うと、エラー値を任意の文字列に置き換えることができます