【VBA初心者向け】事務作業のミス激減!オートフィルタ解除を自動化して「正確さ」と「時短」を両立させる

【業務効率化】VBA
スポンサーリンク

「前月比の数字が全然合わない。計算式は合っているはずなのに……。あ、フィルタがかかったままだった!」

職場で一度はこんな経験はありませんか?

Excelのオートフィルタは便利ですが、絞り込まれたままの状態に気づかず集計を始めると、本来あるはずのデータが計算から漏れてしまいます。

手動で「すべて表示」をクリックすれば済む話ですが、VBAで自動化しようとすると、意外と「エラー」にぶつかるポイントでもあるんです。

今日は、失敗しないフィルタ解除のコードをご紹介します。

【業務効率化】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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でも、年間100万円以上の節約・資産管理・スキルアップで新NISAで年間360万円投資し、iDeCoもフル活用しています。日商簿記3級持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、稼ぐ力を高めるITスキルについて発信しています。

生活を豊かにしたくて、高配当株投資で年間配当金60万円をめざしています。現在は年間配当金25万円以上達成!

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました