ショートカット登録するだけで事務作業が劇的に効率化するVBAフィルタマクロ


４か月ほど前に投稿した複数条件で一気にフィルタリングできるマクロ↓
https://qiita.com/kan3308/items/1abbd3e662625b5c3745

あれからチューンアップしてかなり実用的なレベルになった気がしないでもないので再掲します。

事務作業でよくExcelのフィルタ機能を使ってるけどなんとなく使い勝手にストレスを感じている方、
割と世界が変わるレベルで便利なのでぜひ試してみてください。


```vb
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を１次元配列として返す
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
データ上の任意の範囲を選択した状態で実行すると選択範囲の左端列に対してフィルタをかけます。
また、そのときのフィルタ条件は選択範囲内のセルの値のどれかに該当する行になります。
ちなみに空白セルが選択範囲に入ってるときはフィルタ条件に空白が追加されます。

例）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/db64fb15-f8b1-75d8-9676-b8cb766c5588.png)

１列目のs,g が入力されたセルを範囲選択して実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/0ecae1d8-061a-d7eb-bf0d-5f06cb600dc1.png)

範囲内の値（s または g）をOr条件として１列目に対してフィルタをかける

------------------------------------------------------------------------------------------------------------------

関数名：clearFilter
ついてで用意したフィルタをクリアするだけの単純な機能。
セットでこれもショートカットキーに登録しておくと便利。



## 追記
もしマクロをショートカットキーに登録する方法を知らない＆調べるのが手間って方は下にやり方載せておきます↓


①[開発タブ] から [マクロの登録] を選択

②[マクロの保存先]　→　[個人用マクロブック]　を選択

③[OK] を押下（マクロ名とかは何でもいいですけど一応覚えておいてください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/a18f5580-2bbd-cc67-e482-5525ab062594.png)

④特に何もせず記録終了する

⑤Alt + F11 を押してVBE(VBAのコード書くところ)を起動

⑥左側の[VBAProject(PERSONAL)] の中の [標準モジュール] に [Module1] があると思うのでダブルクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/e21c300f-2ff4-5a92-73c0-c122fe010691.png)

⑦右側のエディターエリアにさっき決めたマクロ名のコードがあると思うので消しておく
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/c856035a-bc9d-2d7f-f0b9-14340c2c049d.png)


⑧今回の記事のコードをすべてこのエリアに貼り付ける

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/f68229e6-39b9-b157-1585-7dcc0f063cb3.png)

⑨Excelの画面に戻って [開発タブ] の [マクロ] を選択

⑩PERSONAL.XLSB!Module1.multiFilter の行を選択して [オプション] を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/db432fa8-da06-784d-0c63-e90e24563d43.png)

⑪.ショートカットキーを決めて [OK] を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734868/bb7b20ca-e1fc-cc47-3019-e2707f4a7222.png)


これで決めたショートカットキーでいつでも関数を呼び出すことができます！
clearFilter も使いたかったら同じようにやればOK