
オートフィルタ
同僚に、Excelでシート保護をした状態でオートフィルタを使用する方法を聞かれました。
使っているExcelのバージョンは2010なので、「シート保護する時のオプションに、オートフィルタを許可する設定があったと思いますけど」て返したのですが、「Excel2000でも使えるようにしたい」ということ。
たしかExcel2000だと、シート保護した状態でExcelを終了すると、再度立ち上げた時にオートフィルタが使用できなくなったはず。これは、マクロで何とか出来たはずだが...。
とりあえず、試して見ました。
テストデータの作成
とりあえず、テスト用にこんな表を準備します。

表の中を選択して...

オートフィルタを設定します。

さて...
Excel2010の場合
まずは、Excel2010の機能で対応してみます。
このVerなら、小細工はいらなかったはず。
まず、校閲タグからシート保護を選択します。

リストの下の方にある、オートフィルターの使用にチェックを付けて、OKボタンをクリックします。

これで、シート保護された状態で、オートフィルターを使用できるようになりました。
もちろん、ブックを再立ち上げしてもオートフィルターは使用できるままです。

Excel2000の場合
さて、今度はExcel2000での対応方法です。
こちらは、マクロで小細工する必要があったはず。
テストデータは、同じ表を使用します。
私の端末、Excel2000がインストールされていないので、操作画面はExcel2010になっています。
まず、開発タグからVisual Basicを起動します。

左側のリスト(プロジェクトエクスプローラ)から、ThisWorkbookを右クリックして、コードの表示をクリックします。
※ ThisWorkbookをダブルクリックしてもOKです。

コード編集画面が表示されるので、左上のリストからWorkbookを選択します。

すると、こんなメソッドが作られるはずです。
この、Workbook_Openってのは、Excel起動時に自動実行されるマクロです。
ここに、小細工に必要な処理を突っ込みます。

突っ込みました。
'Excel起動時の処理
Private Sub Workbook_Open()
'シート保護時のオートフィルタを使用可
Sheet1.EnableAutoFilter = True
'シート保護
Sheet1.Protect UserInterfaceOnly:=True
End Sub
ソース解説
まず、フィルタをかけたいシートの、EnableAutoFilterプロパティにTrueを設定します。
これによって「画面上からの変更のみの保護を設定している時に、ワークシートのオートフィルター矢印を使用可能にする」ことが出来ます。
画面上からの変更云々というのは、「ユーザーからの操作は保護するが、マクロからの操作は許可する」という、シート保護(Protectメソッド)の設定のことです。
これは、Protectメソッドのパラメータ「UserInterfaceOnly」にTrueを設定することで可能になります。
この処理を、Workbook_Openメソッドに書くのは、EnableAutoFilterプロパティの設定が、Excelを終了すると消えてしまうので、Excel起動時に自動実行させることで、常にこのプロパティがTrueになるようにしています。
余談
Excel起動時の自動実行といえば、Workbook_Openメソッドの他にAuto_Openメソッドでも可能です。
...ですが、私は最近はAuto_Openメソッド使用していません。
Workbook_Openメソッドを使った方がスマートだと(個人的には)思っているのが最大の理由ですが、Excel2000以降のバージョンでAuto_Openメソッドが安定動作しないことが頻発したからです。
個人的な拘りといわれそうですが、妙な個所で止まったり、コンパイルエラーが発生したりする事象が頻発する現実を考えると、怖くて使えません。
スポンサードリンク


