>シートに保護をかけると、オートフィルターの機能が使えなくなります。
『シートを保護したが、その状態でオートフィルターも使いたい』という要望でしょうか。
これはExcelの仕様で、どうしようもない気がします。保護を解除する必要があるでしょう。
この要望の表現を少し変えて、
『シートの保護をしないで保護と同等の状態を作り出し、かつオートフィルターを使う』
ではどうでしょうか。下のマクロで実現してみました。(Sheet1で行う例です)
○下のマクロをセットしておくと、Sheet1に変更はできません。(Undoで復元します)
○Sheet1でオートフィルターが使えます。オートフィルター結果はUndoされません。
●欠点・・・完全な保護ではありません。罫線、書式などは変更できます。長くなるので手を抜いています。
[設定手順-1]
Sheet1のA1に =COUNTA(A2:A65536,B:IV) をセットします。これは変更を検知するためです。
セルA1は例です。算式の主旨は、自分以外のセルのCOUNTAです。分かり易くするためにA1にしました。
[設定手順-2]
ツール→マクロ→Visual Basic Editor でVBE画面に移り、 表示→プロジェクトエクスプローラでプロジェクトエクスプローラを表示します。プロジェクトエクスプローラのSheet1をダブルクリック。出てきたコードウインドウに下記マクロをコピーして貼り付けます。
マクロを貼り付けた時の状態は、Sheet1の変更はできません。Sheet1は保護され、オートフィルターが使用できます。
[操作]
マクロ『非保護_Sheet1』を実行するとSheet1の変更ができます。シートの保護の解除と同じです。
マクロ『保護_Sheet1』を実行するとSheet1の変更はできません。シートの保護と同じです。
(この2つのマクロはショートカットキーに割り当てておけばすばやく実行できます。
『非保護_Sheet1』、『保護_Sheet1』については、ツール→マクロ→マクロ でマクロを選択し、
オプションからそれぞれ、ショートカットキーを割り当てておくと便利かと思います)
こういうこともできるというくらいに、捉えて下さい。ご参考に。
ここから
↓
Public Flg As Boolean 'シートの変更可否(Trueなら変更可)
'シート保護の代用のマクロ
Private Sub Worksheet_Calculate()
If Flg Then Exit Sub
On Error Resume Next
With Application
'シートを切り替えたときの対応
If ActiveCell.Parent.Name = "Sheet1" Then
'変更をUndoで元に戻す←保護の代用
.EnableEvents = False
.Undo
.OnUndo "", ""
.EnableEvents = True
End If
End With
End Sub
'Sheet1の変更を可とする(シートの保護をしない)
Sub 非保護_Sheet1()
Sheet1.Flg = True
End Sub
'Sheet1の変更を不可とする(シートの保護の機能)
Sub 保護_Sheet1()
Sheet1.Flg = False
End Sub
お礼
回答ありがとうございました。 教えていただいて、色々と試していました。 中々難しいですネ オートフィルターが使えて、計算式だけが保護されて欲しいのですが、良い方法がありましたら、助言よろしくお願いたします。