Excelのマクロを使ってフィルタを適用する際、特定の会社名(A社やC社)を除外しようとすると、該当する会社が存在しない場合にマクロが停止してしまうことがあります。この記事では、この問題を解決するために、A社やC社が存在しない場合でもマクロを正常に動作させる方法について解説します。
問題の詳細
Excelマクロでフィルタを設定する際、特定の会社(例えば、A社やC社)を除外するために以下のコードを使用している場合があります。
ActiveSheet.Range("A1").AutoFilter Field:=15, Criteria1:="<>A社", Criteria2:="<>C社"
このコードでは、A社およびC社を除外してフィルタを適用しますが、もしA社やC社がデータ内に存在しない場合、マクロはエラーを発生させて停止してしまいます。これを回避するために、どのような方法でマクロを進行させるかが問題となります。
解決策: エラーを無視して次に進む方法
ExcelマクロでA社やC社がデータに存在しない場合でもマクロを続けるためには、「On Error Resume Next」を使用してエラーを無視し、次の処理に進む方法を使うことができます。
以下は、エラーを無視して次に進む方法です。
On Error Resume Next
ActiveSheet.Range("A1").AutoFilter Field:=15, Criteria1:="<>A社", Criteria2:="<>C社"
On Error GoTo 0
このコードでは、エラーが発生しても次の処理に進むことができます。「On Error Resume Next」によってエラーを無視し、「On Error GoTo 0」でエラー処理を通常に戻します。
別の方法: 事前にA社やC社の存在を確認する
別の方法として、A社やC社が存在するか事前に確認し、その後フィルタを適用する方法もあります。これにより、フィルタ処理が不要な場合に無駄なエラーを防ぐことができます。
この方法を実装するためのコードは以下の通りです。
Dim companyExists As Boolean
companyExists = WorksheetFunction.CountIf(Range("A:A"), "A社") > 0 Or WorksheetFunction.CountIf(Range("A:A"), "C社") > 0
If companyExists Then
ActiveSheet.Range("A1").AutoFilter Field:=15, Criteria1:="<>A社", Criteria2:="<>C社"
End If
このコードでは、A社またはC社が列Aに存在する場合のみフィルタを適用します。これにより、不要なエラーを避けることができます。
まとめ
ExcelマクロでA社やC社をフィルタリングする際、該当するデータが存在しない場合でもマクロを停止させないためには、エラー処理を追加するか、事前に存在確認を行う方法を使うことが有効です。どちらの方法も、マクロの安定した動作を確保するために役立ちます。


コメント