【VBA】オートフィルタで作業時間が5割削減!?知らないと損する実践テクニック
エクセルのオートフィルタ、毎回手作業で設定するのがめんどくさい!!
こんな問題を抱えている方って意外と多いのではないでしょうか?
私は電気設備の保守管理業務に勤めていた頃、
設備台帳や検査結果一覧表を編集する作業でオートフィルタを毎回設定し内容を並び替える
という処理を行っていました。
こんな問題を解決するために、導入したのが『オートフィルタVBA』です。
業務内容に合わせたコードにすれば、
たった数行のコードでフィルタ作業を自動化
ができるんです。
「でもVBAって難しそう…」
このように感じる方がほとんどですよね。
こんな心配は必要ありません。
プログラミング未経験だった私は、
エクセル業務の効率をなんとかアップさせたい!という思いだけでVBAスキルを独学で習得しました。
そんな私が「初心者でも理解できるオートフィルタVBAの使い方」を解説します。
この記事では、
オートフィルタの基本的な設定方法から実践的なコードサンプルまでを、
具体例を交えながら丁寧に説明していきます。
これを読めば、毎日30分かかっていたフィルタ作業が数秒で完了するようになるはずです。
この記事で紹介しているような『VBA開発に役立つ情報を配信するメルマガ』をスタートさせました。
「VBA学習用の教材」「エクセル作業自動化のアイデア」を無料でゲットすることができます。
この記事と併せてチェックしてみてください。
目次
VBAオートフィルタとは?初心者でもわかる基礎知識
そもそもオートフィルタとは、必要な情報だけを表示させたいという場面で利用されます。
必要な情報を一覧表の最初に表示させる、不要な情報を削除するために表示させる、など
編集作業の効率アップに欠かせないツールです。
VBAを使わずに、ツールバーにあるフィルターボタンからでも「オートフィルタ」を利用できますが、
「オートフィルタの設定 → 編集の実行」を手動で行う必要があるので結構手間がかかります。
VBAを使えば、手動で行う操作も自動化することが可能です。
オートフィルタの概要と主な機能
『オートフィルタVBA』は、
ワークシートに設定されているデータをプログラムで自動的に絞り込む
処理を行います。
たとえば、
売上データの中から特定の商品だけを抽出する、一定金額以上の取引だけを表示する、など
このような処理が可能です。
主な機能としては、
「特定の値での絞り込み」「範囲指定による抽出」「複数条件での検索」など
があります。
これらの機能をVBAで自動化すれば、業務効率を大幅にアップさせることが可能です。
通常のフィルタとVBAオートフィルタの違い
通常のオートフィルタは、
マウスとキーボードを使って手動で操作
しなければありません。
一方、VBAオートフィルタは一度コードを書いておけば、
ボタン1つで同じ作業を何度でも実行する
ことができます。
特に大きな違いは、条件の設定方法です。
通常のフィルタではドロップダウンメニューから条件を選択
『オートフィルタVBA』ではコードの中で細かい条件を指定
という違いがあります。
『オートフィルタVBA』を使えば、
複数のシートに対して一括でフィルタを適用させる、特定の条件で自動的にデータを抽出する、など
複雑な処理もボタン1つで完了させることが可能です。
VBAオートフィルタを使うメリット3選
『オートフィルタVBA』には3つの大きなメリットがあります。
1つ目は、作業時間の大幅な削減です。
毎日のように同じ条件でデータを抽出する作業がある場合、VBAオートフィルタを使えば数秒で完了します。
2つ目は、ヒューマンエラーの防止です。
手動でフィルタ操作を行う場合、条件の設定ミスや選択ミスが発生する可能性がありますが、VBAで自動化することでそのようなミスを防ぐことができます。
3つ目は、複雑な条件設定が可能になるです。
通常のフィルタでは設定が難しい「AまたはBを含み、かつCを含まない」といった複雑な条件も、VBAなら簡単に設定できます。
業務内容に合わせたオートフィルタVBAが導入できれば、
大量のデータを扱う職場、定期的にデータの抽出作業が発生する作業が多い職場において、
作業時間を50%以上削減することも夢ではありません。
VBAオートフィルタの基本的な実装方法
『オートフィルタVBA』を実装するには、
基本的な手順とコードの書き方を理解する
必要があります。
VBA初心者の多くの方が「難しい」と感じるポイントですが、
基本さえ押さえれば誰でも簡単に実装できるようになるはずです。
具体的な実装方法を解説していきます。
オートフィルタを設定するための準備
『オートフィルタVBA』を使用する前に、まずフィルターをかけやすいデータの準備をしましょう。
具体的には、
1行目に項目名(ヘッダー)があり、2行目以降にデータが連続して入力されている
が基本的なデータ構成になります。
また、列と行の間に空白がないことも大切なポイントです。
準備が整ったら、VBEエディタを開き、新しいモジュールを挿入します。
こんな感じ
ここで重要なのは、
Rangeオブジェクトを使ってデータ範囲を正しく指定すること
です。
データ範囲が不適切だと、フィルタが正しく機能しないばかりか、エラー発生の原因となってしまいます。
フィルタ条件の設定方法と主要なコード例
オートフィルタの基本的な設定は、「AutoFilter」メソッドを使用します。
たとえば、
A列のデータに対してフィルタを設定する場合、以下のようなコードを使用します。
Range("A1").AutoFilter Field:=1, Criteria1:="検索したい値"
このコードでは、
Field:=1が列番号を、Criteria1が検索条件
という内容です。
実務では、よく「売上データから100万円以上の取引を抽出する」という使われ方をします。
その場合は、Criteria1:=">=1000000″のように条件を指定すればOKです。
フィルタのクリア方法とエラー対処法
フィルタを解除する際は、ShowAllDataメソッドを使用します。
また、既存のフィルタを別の条件に変更する前には、必ず一度フィルタをクリアしましょう。
これにより、予期せぬエラーを防ぐことができます。
よくある事象として、「実行時エラー’91’:オブジェクト変数またはWithブロック変数が設定されていません」というエラーが表示させます。
これは主にデータ範囲の指定ミスが原因です。
このような場合は、On Errorステートメントを使用してエラー処理を行いましょう。
プログラムの安定性を高めることができます。
作業時間を5割削減!実践的な活用テクニック
実際の業務では単純なフィルタリングだけでなく、より複雑な条件での絞り込みが必要になることがあります。
ここでは、作業時間を大幅に削減できる実践的なテクニックをご紹介します。
複数条件でのフィルタリング手法
複数の条件でフィルタリングを行う場合、Array関数を使用すると効率的です。
たとえば、「商品AまたはBを含む」という条件は、以下のように記述できます。
Range("A1").AutoFilter Field:=1, Criteria1:=Array("商品A", "商品B"), Operator:=xlFilterValues
また、And条件を使用する場合は、Field番号を変えて複数のAutoFilterを設定します。
これにより、「部署が営業部かつ売上が100万円以上」といった複雑な条件も実現可能です。
動的なフィルタ条件の設定方法
実務では、
固定の条件ではなく、その時々で変わる条件でフィルタリングしたいケース
が多くあるかと思います。
そんな時は、セルの値を参照して動的に条件を設定する方法が便利です。
たとえば、A1セルに入力された値でフィルタリングする場合は以下のように指定します。
Criteria1:=Range("A1").Value
また、入力フォームを作成して、ユーザーが条件を入力できるようにすることもできます。
InputBoxを使用すれば、実行時に条件を入力できる柔軟なプログラムの作成が可能。
これにより、エンドユーザーでも簡単に条件を変更できるようになります。
自動化による作業効率化のポイント
『オートフィルタVBA』の真価は、定型業務の自動化にあります。
たとえば、
毎週月曜日に先週の売上データを部署別に抽出する作業があるとします。
『オートフィルタVBA』を導入すれば、こんな定型業務をボタン1クリックで処理が可能です。
特に効果的なのは、
フィルタリング後のデータを別シートにコピーしたり集計したりする処理を組み合わせること
です。
VisibleCellsプロパティを使用すれば、
フィルタリングされた結果だけを取り出す
ことができます。
よくあるエラーとその解決方法
実践での活用時によく発生するエラーとその対処法をご紹介します。
最も多いのが、
「オートフィルタが既に設定されています」というエラー
です。
このエラーは、
AutoFilterModeプロパティをチェックし、既存のフィルタをクリアする
ことで解決できます。
また、大量のデータを処理する際は、最初に下記のコードを宣言してください。
Application.ScreenUpdating = False
たった1行のコードを追加するだけで処理速度を大幅に改善できます。
これらのテクニックを使いこなすことで、
より安定した実用的なプログラムの実現
が可能です。
現場で使える!実践的なコードサンプル集
実際の業務でよく使用されるVBAオートフィルタのコードをご紹介します。
これらのコードは、
実務での経験をもとに最も効率的な書き方を厳選したもの
です。
効率アップに繋がるヒントが見つかるかもしれませんので、
是非チェックしてみてください。
数値を昇順、降順で並び替える
一覧表の項目にある「番号」や「価格」などの数値を並び替えるVBAの作り方をご紹介します。
サンプルとして
A1セルからC20の表で、C列を昇順に並び替えを行う。一番上の行はタイトルとして使用する!
というVBAを作ってみました。
一覧表はこんな感じ
設定するVBAがこちら
Sub テスト()
Range(Cells(1, 1), Cells(20, 3)).Sort Key1:=Cells(1, 3), Order1:=xlAscending, Header:=xlYes
End Sub
実行すると以下のようになります。
たったの1行で並び替えが完了!
数値の枝番を認識して昇順、降順を並び替える
一覧表の項目にある「枝番が含まれる数値」の並び替えるVBAの作り方をご紹介します。
仕事で使われている一覧が全て整数であるとは限りませんよね。
枝番とは、番号「1」の次が「2」ではなく「1-1」や「1-2」となること。
なぜこんなわかりくくするの?と思うかもしれませんが、仕事ではよくあることです。
番号に枝番がある表の並び替えはVBAでなければうまくいきません。
一覧表がこちら
いろんなパターンの「枝番」を用意してみました。
設定するVBAがこちら
Sub テスト()
retu = Cells(1, Columns.Count).End(xlToLeft).Column
gyo = Cells(Rows.Count, 1).End(xlUp).Row
On Error Resume Next
For i = 2 To gyo
ds = InStr(Cells(i, 3), "-")
df = Mid(Cells(i, 3), 1, ds - 1)
If InStr(Cells(i, 3), "-") <> 0 Then
Cells(i, retu + 1) = df
Else
Cells(i, retu + 1) = Cells(i, 3)
End If
Next
Range(Cells(1, 1), Cells(gyo, retu + 1)).Sort Key1:=Cells(1, retu + 1), Order1:=xlAscending, Header:=xlYes
Cells(1, retu + 1).EntireColumn.ClearContents
End Sub
実行結果がこちら
ちゃんと枝番を認識して並び替えができました。
枝番の識別のは「関数InStr」と「関数Mid」を使っています。
枝番の認識VBA
6行目で、枝番「-」の位置を「ds」に入れる
7行目で、テキストの始まりから枝番「-」の一つ前までのテキストを「df」にいれる
「関数InStr」と「関数Mid」の組み合わせはテキストを操作するときによく使われるので自由に扱えるようにしておきましょう。
ユーザー定義設定を使って並び替える
並び替える順番を自由に設定できるVBAの作り方をご紹介します。
たとえば、
都道県名を北側から順番に並び替えたい!会社名を契約した順番に並び替えたい!
このような場合、昇順や降順で並び替えても思い通りの処理にならないことがほとんどですよね。
こんな問題を解決するのが
ユーザー定義を使って並び替えるVBA
です。
今回はサンプルとして、都道県名を北側から順番に並び替えるVBAを設定してみました。
処理の内容はこちら
設定するVBAがこちら
Sub テスト()
With ActiveSheet.Sort
.SortFields.Clear
.SortFields.Add Key:=Cells(1, 1), Order:=xlAscending, CustomOrder:="北海道,青森,東京,大阪,鹿児島,沖縄"
.SetRange Range("A1").CurrentRegion
.Header = xlYes
.Apply
End With
End Sub
実行結果がこちら
コード内で設定した「北海道→青森→大阪→鹿児島→沖縄」の順番に並び替えられます。
CustomOrder:="〇〇,〇〇"の〇〇を付け加えたり、変更するだけでユーザー定義の設定が完了。
コード内に並び替え項目を直接入力方法をご紹介していますが、
別シートのセルの内容を参照してユーザー定義として並び替える
というVBAにすることも可能です。
こんな感じ
設定シートの一覧表を編集するだけで、並び替えの順番を変更できる
のでめちゃくちゃ使いやすいオートフィルタVBAです。
関連記事「VBAを使った並び替え」では
サンプルとして紹介した3つのVBAに加えて『セルの内容を参照して並び替えるVAB』が設定されたエクセルファイル
をダウンロードすることができます。
設定されているVBAをコピペして、仕事で使っているエクセルに導入する!
といった方法でも活用できるので興味のある方は是非参考にしてみてください。
VBAオートフィルタ活用の応用テクニック
基本的な使い方を理解したら、より高度な活用方法にチャレンジしてみましょう。
ここでは、業務効率を更に向上させる応用テクニックをご紹介します。
条件を保存して再利用する方法
よく使う検索条件は、設定を保存しておくと便利です。
具体的には、
条件を作業に支障ないセルに保存しておき、それをVBAから参照する
という方法で使います。
また、Workbook_Openイベントを使用すれば、ブック起動時に自動的に条件を読み込むこともできます。
さらに、
複数の条件セットを管理したい場合は、専用のシートを作成して条件を一覧管理してしまいましょう。
これにより、ユーザーは必要な条件を選択するだけで、複雑なフィルタリングを実行できるようになります。
他のVBA機能と組み合わせた活用法
『オートフィルタVBA』は、他のVBA機能と組み合わせることでさらに強力になります。
たとえば、
PivotTableと組み合わせれば、フィルタリングしたデータを即座に集計できる。
別シートに情報を転記するVBAと組み合わせて、転記後並び替えを行う。
このような活用方法があります。
勤めていた職場では、
個人が編集する「業務進捗シート」から必要な情報を「スケジュール管理シート」に転記、期日が迫っている項目順に並び替えをする
というVBAを導入していました。
ボタン1クリックで職場全体の業務進捗が確認でき、さらに急いで処理しなければならない業務がすぐに確認できる!
というメリットがあります。
関連記事「別シートに情報を転記するVBA」では、VBAでシートを区別する方法が詳しく解説されています。
めちゃくちゃ使用頻度が高いVBAなので是非チェックしてみてください。
業務効率を最大化するためのTips集
業務内容に合わせた『オートフィルタVBA』を導入できれば作業効率を格段にアップさせることができます。
- フィルタリング条件をコメントとして残しておくと、後からの保守が容易になる
- エラーログを出力する仕組みを実装しておけば、問題が発生した際の原因特定が素早くできる
- 配列と組み合わせてスピーディーに一括処理をする
『オートフィルタVBA』を導入して満足するのではなく、
導入後の使いやすいか、問題なく運用できるか、
を踏まえたコード作りが重要です。
関連記事「VBA処理を最適化手法で劇的に効率アップする方法」では
VBAの処理を高速化する方法を解説
しています。
併せてチェックしてみてください。
【まとめ】VBAでオートフィルタを設定するポイント
『オートフィルタVBA』の活用は、業務効率化の大きな武器となります。
基本的な実装から応用テクニックまでを段階的に習得しましょう。
特に重要なのは、
「エラー処理をしっかりと実装すること」「ユーザビリティを考慮したプログラム設計を心がけること」
です。
また、定期的にコードの見直しと最適化を行うことで、より使いやすくメンテナンスしやすいプログラムに進化させていくことができます。
『オートフィルタVBA』は、使いこなせば使いこなすほど、その真価を発揮する機能です。
ぜひ、ここで紹介したテクニックを実践して業務効率の向上にお役立てください。
この記事を読んで、
「VBAやってみたい!」「いろんなエクセル業務の自動化に挑戦したい!!」
と感じてくれた方はエクセルVBAの情報を定期的に配信しているメルマガへの登録を検討してみてください。
エクセル業務で苦しんだ私の経験を元に、
実務で役立つVBA情報をお届けしています。
この記事が、あなたの業務効率化への第一歩となることを願っています。
ディスカッション
コメント一覧
まだ、コメントがありません