Excelのこととか色々

Excel のこととか楽天とか いろいろ書いてみます・・・

【Excel/VBAのこと42】ひとつの列を複数条件でフィルタリングする

   f:id:tuna-kichi:20200223230814p:plain

 

**********************************************

ひとつの列で複数の条件でフィルタリングする作業を自動化するマクロです。

 

 

例えばこんな表があるとします。

 サンプルテーブル


阿部さんと佐藤さんのデータをフィルタリングしたいときは、

「Name」の列で、阿部さんと佐藤さんにチェックマークを入れます。

 複数条件設定

 

すると、阿部さんと佐藤さんだけ表示できます。

 複数条件設定

 

この程度のサイズで、条件も3つ程度でしたら手動でも良いと思いますが、

私が扱っている表は 3000行以上あります。

 

その中からフィルタリングしたいIDが20個近くある場合もあります。

一つずつチェックを入れていくと大変なので、対象のIDを赤字にして、

赤字のセルをフィルタリングするマクロを作りました。

 

マクロ

’このコードは「個人用マクロブック」の標準モジュールに記述してください

Sub 複数条件でフィルタリング()

 Dim r As Long   '表の行を格納する
 Dim r2 As Long  'フィルタリング対象の行を格納する
 Dim c As Long '対象データの列番号を格納する
 Dim LastR As Long '表の最終行を格納する
 Dim LastR2 As Long '対象データの最終行を格納する


 c = Selection.Column 'フィルタリング対象データの先頭行を選択しておく
 r2 = Selection.Row 'フィルタリング対象データの先頭行
 LastR2 = Cells(Rows.Count, c).End(xlUp).Row 'フィルタリング対象データの最終行

 LastR = Cells(Rows.Count, 1).End(xlUp).Row '表の最終行を列Aから取得

 'AutoFilter が設定されているかチェック
 If ActiveSheet.AutoFilterMode = True Then
  If ActiveSheet.FilterMode = True Then 
   ActiveSheet.ShowAllData 'AutoFilterが絞り込まれていたら外す
  End If

 Else
  MsgBox "オートフィルターを設定してください"
  End ’オートフィルターが設定されていなければ終了します
 End If


 '対象データが同じであればフォントを赤にするループ
 For r2 = r2 To LastR2
  For r = 2 To LastR
   If Cells(r, c) = Cells(r2, c) Then
    Cells(r, c).Font.ColorIndex = 3
    Cells(r2, c).Font.ColorIndex = 3 '対象データも赤字にする
   End If
  Next r
 Next r2

 MsgBox "完了"

End Sub

*********************************************** 

フィルタリングの対象となるデータを、同じ列の下部に貼り付けて、

対象のデータが見つかったら赤字にします。

 マクロ使い方

 

結果はこんな感じです。

 マクロ実行結果

フィルタリング対象データも赤字にすれば存在しないデータの有無もすぐにわかります。
そして、赤字でフィルタリングして、必要なデータだけ絞り込みます。

 赤字でフィルタリング

 赤字でフィルタリング

 

あとは、いつも通りこのマクロをリボンに登録して、

いつでも、どんなファイルにでも使えるようにしておきます。

リボンに登録

 

**********************************************

 

個人用マクロブックについてはこちら

www.tuna-kichi.com

 

リボンに登録についてはこちら

www.tuna-kichi.com

 

 

_/_/_/_/_/_/_/_/_/_/_/_/_/_/