業務の中で、リストから特定の条件に合うデータを絞り込む作業は頻繁に発生しますよね。
手作業だと1回30秒かもしれませんが、1日20回、1ヶ月(20日)続ければ、それだけで200分(約3時間以上)も「カチカチ」している計算になります。
今回はこの無駄を減らすVBAのAutoFilterをご紹介します。
プログラミングと聞くと難しく感じるかもしれませんが、VBAのAutoFilterは、皆さんが普段Excelで使っている「フィルタボタン」を、PCが代わりに押してくれるシンプルな機能です。
つまり、AutoFilterはたった数行で世界が変わる、非常に有効な時短テクニックの1つになります。
さっそく使ってみよう!基本のコード
それでは、最もシンプルな基本コードを見ていきましょう。以下のコードをコピーして、Excelの標準モジュールに貼り付けてみてください。
Sub SimpleFilter()
' 「売上データ」という名前のシートで作業します
With Sheets("売上データ")
' すでに設定されているフィルタを解除してリセット
If .AutoFilterMode Then
.AutoFilterMode = False
End If
' A1セルを含む表全体に対して、B列でフィルタを実行します
.Range("A1").AutoFilter Field:=2, Criteria1:="田中"
End With
MsgBox "抽出完了!"
End Sub
ここがポイント!Fieldの数え方
VBA初心者が特に迷いやすいポイントが、「Field:=2」という記述です。これは「対象となる表の左から何番目の列か」を指定しています。
- 1列目(A列など)を絞りたいなら、Field:=1
- 2列目(B列など)を絞りたいなら、Field:=2
私の恥ずかしい失敗談:データが消えた!?
実は私、初心者の頃にこのAutoFilterで大パニックになったことがあります。
「コードを実行したら、データが全部消えた!」と慌てたことがありました。
いろいろ調べてみると、「前回かけたフィルタが残ったまま、新しいフィルタを重ねてしまったこと」が原因でした。
つまり、「東京支店」で絞り込まれている状態に対して、さらに「大阪支店」という条件で重ねて絞り込もうとしたため、「該当データなし」と判定され、画面が真っ白(すべての行が非表示)になっていたのです。
そのため、基本コードの最初に記述したIf .AutoFilterMode Then .AutoFilterMode = False(もしフィルタが設定されていれば解除する)という一文が極めて重要になります。
AutoFilterを扱う際は、ぜひこの解除処理をセットで記述するようにしてください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

コメント