Excel VBAを使って、リストから選択した項目を抽出し、テーブルをフィルタリングする方法を解説します。質問者が直面したフィルター解除の問題を解決するためのコード修正方法も紹介します。
1. Excel VBAを使ったリストからの抽出とフィルターのかけ方
まず、VBAを使ってリストから項目を選択し、その項目に基づいてデータをフィルタリングする方法を説明します。以下は、選択した項目に応じてデータをフィルタリングするコードです。
Sub フィルター実行()
' フィルターをかけたい列番号を設定
Const 対象列 As Long = 2 ' B列を対象とするため「2」を設定
' リストボックスとリンクしたセルから値を取得
Dim リンク値 As Long
リンク値 = ActiveSheet.Range("F1").Value ' F1セルの値を取得
' フィルターを一度解除する
ActiveSheet.AutoFilterMode = False
' F1セルの値に応じてフィルターを実行
Select Case リンク値
Case 1: ' A1の「完了」が選択された場合
ActiveSheet.Range("A5:E133").AutoFilter Field:=対象列, Criteria1:="完了"
Case 2: ' A2の「未完了」が選択された場合
ActiveSheet.Range("A5:E133").AutoFilter Field:=対象列, Criteria1:="未完了"
Case 3: ' A3の「その他」が選択された場合
ActiveSheet.Range("A5:E133").AutoFilter Field:=対象列, Criteria1:="その他"
End Select
End Sub
2. フィルター解除のコード修正
質問者が実装したフィルター解除のコードは、基本的には問題ありませんが、実際に動作しない場合には、次の修正を加えてみてください。
Sub フィルター解除()
' 現在のシートにかかっているフィルターをすべて解除
If ActiveSheet.AutoFilterMode Then
ActiveSheet.AutoFilterMode = False
End If
End Sub
このコードでは、フィルターがかかっているかどうかを確認してから解除します。これにより、フィルターがかかっていない場合でもエラーを避けることができます。
3. 他のフィルター解除方法
さらに簡単にフィルターを解除する方法として、以下のコードも利用できます。
Sub フィルター解除()
ActiveSheet.ShowAllData
End Sub
このコードは、すべてのフィルターをクリアし、すべてのデータを表示する簡単な方法です。
4. より高度なフィルター操作
Excel VBAを使ってさらに複雑なフィルター操作を行うこともできます。たとえば、複数の条件でフィルタリングしたり、ユーザーからの入力を使って動的にフィルター条件を変更したりすることが可能です。
まとめ
Excel VBAを使ってリストから選択した項目を抽出する方法や、フィルターを解除するための方法について解説しました。フィルター解除に関しては、コード修正や簡単な解除方法を取り入れることで、より安定した動作が可能になります。これらの方法を使って、より効率的にExcelを操作できるようにしましょう。

コメント