4か月ほど前に投稿した複数条件で一気にフィルタリングできるマクロ↓
https://qiita.com/kan3308/items/1abbd3e662625b5c3745
あれからチューンアップしてかなり実用的なレベルになった気がしないでもないので再掲します。
事務作業でよくExcelのフィルタ機能を使ってるけどなんとなく使い勝手にストレスを感じている方、
割と世界が変わるレベルで便利なのでぜひ試してみてください。
Option Explicit
Public Sub clearFilter()
If ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
End Sub
Public Sub multiFilter()
Dim targetColNumber As Long
Dim keywords() As Variant
Dim filterErrNumber As Long: filterErrNumber = 1004
targetColNumber = Selection.Column - ActiveSheet.UsedRange.Column + 1
keywords = rangeTo1DArray(Selection)
On Error Resume Next
ActiveSheet.UsedRange.AutoFilter targetColNumber, keywords, xlFilterValues
If Err.Number = 0 Then
ElseIf Err.Number = filterErrNumber Then
MsgBox "データ範囲外のためフィルタに失敗しました。"
Else
MsgBox "想定外エラーです。"
End If
On Error GoTo 0
End Sub
'Rangeを1次元配列として返す
Public Function rangeTo1DArray(ByVal rng As Range) As Variant
Dim tmpArray() As Variant
Dim i As Long: i = 1
Dim targetCell As Range
For Each targetCell In rng
ReDim Preserve tmpArray(1 To i)
If targetCell.Value <> "" Then
tmpArray(i) = targetCell.Value
Else
tmpArray(i) = ""
End If
i = i + 1
Next
rangeTo1DArray = tmpArray
End Function
機能説明
関数名:multiFilter
データ上の任意の範囲を選択した状態で実行すると選択範囲の左端列に対してフィルタをかけます。
また、そのときのフィルタ条件は選択範囲内のセルの値のどれかに該当する行になります。
ちなみに空白セルが選択範囲に入ってるときはフィルタ条件に空白が追加されます。
範囲内の値(s または g)をOr条件として1列目に対してフィルタをかける
関数名:clearFilter
ついてで用意したフィルタをクリアするだけの単純な機能。
セットでこれもショートカットキーに登録しておくと便利。
追記
もしマクロをショートカットキーに登録する方法を知らない&調べるのが手間って方は下にやり方載せておきます↓
①[開発タブ] から [マクロの登録] を選択
②[マクロの保存先] → [個人用マクロブック] を選択
③[OK] を押下(マクロ名とかは何でもいいですけど一応覚えておいてください)
④特に何もせず記録終了する
⑤Alt + F11 を押してVBE(VBAのコード書くところ)を起動
⑥左側の[VBAProject(PERSONAL)] の中の [標準モジュール] に [Module1] があると思うのでダブルクリック
⑦右側のエディターエリアにさっき決めたマクロ名のコードがあると思うので消しておく
⑧今回の記事のコードをすべてこのエリアに貼り付ける
⑨Excelの画面に戻って [開発タブ] の [マクロ] を選択
⑩PERSONAL.XLSB!Module1.multiFilter の行を選択して [オプション] を押下
これで決めたショートカットキーでいつでも関数を呼び出すことができます!
clearFilter も使いたかったら同じようにやればOK