「前月比の数字が全然合わない。計算式は合っているはずなのに……。あ、フィルタがかかったままだった!」
職場で一度はこんな経験はありませんか?
Excelのオートフィルタは便利ですが、絞り込まれたままの状態に気づかず集計を始めると、本来あるはずのデータが計算から漏れてしまいます。
手動で「すべて表示」をクリックすれば済む話ですが、VBAで自動化しようとすると、意外と「エラー」にぶつかるポイントでもあるんです。
今日は、失敗しないフィルタ解除のコードをご紹介します。
オートフィルタの状態を「判定」してから「解除」する
VBAでフィルタを解除するとき、単純に「解除する指示」だけを書くと、もしフィルタがかかっていない場合にエラーで止まってしまうことがあります。
例えるなら、「すでに開いているドアを、力いっぱい開けようとして突き指する」ようなものです。まずは「ドア(フィルタ)が閉まっている(絞り込まれている)か?」を確認するのが、安全な自動化のポイントになります。
コピペでOK!安全に全表示するコード
以下のコードは、シートが「絞り込まれた状態」のときだけ、フィルタを解除(全表示)するコードです。
Sub SafeClearFilter()
' 対象のシートを指定(ここではアクティブなシート)
Dim ws As Worksheet
Set ws = ActiveSheet
' 1. まず、シート内にオートフィルタが設置されているか確認
If ws.AutoFilterMode Then
' 2. 次に、実際にデータが「絞り込まれているか」を判定
If ws.FilterMode Then
' 絞り込まれていたら、すべて表示(解除)する
ws.ShowAllData
MsgBox "フィルタを解除して、全データを表示しました!"
Else
MsgBox "フィルタはありますが、絞り込まれていません。"
End If
Else
MsgBox "このシートには、そもそもオートフィルタが設定されていません。"
End If
End Sub
なぜ「判定」が必要なの?
今回のコードで最も重要なのは、ws.FilterModeというプロパティの使い分けです。
- AutoFilterMode: フィルタの「▼ボタン」があるかないか。
- FilterMode: 実際にデータが「絞り込まれて隠れている」かどうか。
もしデータが絞り込まれていないのに ShowAllData(全表示)を実行すると、「ShowAllData メソッドが失敗しました」というエラーメッセージが出てしまいます。
この「判定」を一行入れるだけで、私たちが作るツールは格段に安定します。ぜひ活用してください。
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント