2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-12-24

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

例)
image.png

1列目のs,g が入力されたセルを範囲選択して実行
image.png

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


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

追記

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

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

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

③[OK] を押下(マクロ名とかは何でもいいですけど一応覚えておいてください)
image.png

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

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

⑥左側の[VBAProject(PERSONAL)] の中の [標準モジュール] に [Module1] があると思うのでダブルクリック
image.png

⑦右側のエディターエリアにさっき決めたマクロ名のコードがあると思うので消しておく
image.png

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

image.png

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

⑩PERSONAL.XLSB!Module1.multiFilter の行を選択して [オプション] を押下
image.png

⑪.ショートカットキーを決めて [OK] を押下
image.png

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

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?