- ベストアンサー
EXCELで複数のシートを一度に「シートの保護」することはできますか?
今は2003を使っています。 よく1年分のデータを集計します。 1月から12月までのシートを作り、13枚目に1年の集計をする形です。 いったん「シートの保護」をしたら、(表自体を)修正するときには12回保護の解除を行い、 終わったら12回シートの保護をしなければならず、大変面倒です。 複数のシートを選択すると、「シートの保護」というところがグレーになり、選択できません。 検索すると、複数のシートの保護を一度に解除するというソフトは発見しましたが(それは2000対応とのことで、試してはいませんが)、 解除も保護も一度にできないものでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
マクロを使いましょう。 どのレベルまで保護したいかが当方では分かりませんので、自由になるように書きたいと思います。 まずは保護したいブック(ファイル)を開いてください。この時どのシートを開いていても結構です。 以下の操作をしてください。 1) ツール(T)-マクロ(M)-新しいマクロの記録(R) を選択してください。 2) 現れた「マクロの記録」ウィンドウの、マクロ名(M)という部分に「Macro1」と書かれていると思いますが、これを「全シートの保護」と書き換えてください。 3) ツール(T)-保護(P)-シートの保護(P) を選択し、シートを保護します。その際、「ユーザーに許可する操作(O)」の部分については、お好きなように設定してください。 4) 記録を終了してください。 5) 同じシートを開いたまま、再びマクロの記録(R)を選択します。マクロ名は「全シートの保護解除」と書き換えます。 6) ツール(T)-保護(P)-シート保護の解除(P)を選択し、シートの保護を解除します。保護を解除したら記録を終了します。 さて、ではこの操作を全部のシートに適用できるようにしましょう。Altキーを押しながらF11キーを押してください。Visual Basic Editorという別のウィンドウが立ち上がります。このウィンドウに対して、以下の操作をしてください。 1) 画面左側に、エクスプローラの左側のような画面「プロジェクト」というのがあると思います。そこに、標準モジュールと書かれていると思いますので、その左の「+」と書かれた部分をクリックしてください。 2) すると「Module1」という表示が現れると思います。これをダブルクリックすると、右側に新しいウィンドウが表示されます。そこには以下のように書かれていると思います。 Sub 全シートの保護() ' ' 全シートの保護 Macro ' マクロ記録日 : 2005/2/18 ユーザー名 : ○○ ○○ ' ' ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True End Sub Sub 全シートの保護解除() ' ' 全シートの保護解除 Macro ' マクロ記録日 : 2005/2/18 ユーザー名 : ○○ ○○ ' ' ActiveSheet.Unprotect End Sub ActiveSheet.Protect の後ろの部分は、シートの保護を実行した時のオプションが違うと変わってきますので、そこは気にしないでください。 3) さて、これを書き換えていきます。まずは、「ActiveSheet」と2箇所書かれていると思いますが、どちらも「Sh」と書き換えてください。 4) 今書き換えた行の上に For Each Sh In Worksheets と書き加えます。2行ともです。 5) 今度は3)で書き換えた行の下に Next Sh と書き加えます。2行ともです。 6) 保存してウィンドウを閉じます。 これで終了です。全シートを保護したい時は、Altキーを押しながらF8キーを押してマクロウィンドウを開き、「全シートの保護」を選んで実行(R)を、解除したい時は「全シートの保護解除」を選んで実行(R)を押してください。目的の操作ができると思いますよ。
その他の回答 (4)
- KenKen_SP
- ベストアンサー率62% (785/1258)
既に幾つかVBAコードが回答されておりますが、選択されたシートだけを保護・保護解除の対象とするサンプルです。 つまり、シートの順番やシート名がVBAで指定不要なため、汎用的に使えます。ご参考までに。 【以下コード】 'パスワード設定 Public Const strPasswrd As String = "sample" Sub 選択シート保護() Dim i As Integer Dim strSH() As String Application.ScreenUpdating = False With ActiveWindow N = .SelectedSheets.Count ReDim strSH(1 To N) For i = 1 To N strSH(i) = .SelectedSheets(i).Name Next i '作業グループ解除 .SelectedSheets(1).Select 'シート保護 For i = 1 To N 'パスワードを設定するなら次行のコメント解除 Sheets(strSH(i)).Protect 'Password:=strpaswrd Next i '作業グループ再設定する場合はコメント解除 'Sheets(strSH).Select End With End Sub Sub 選択シート保護解除() Dim i As Integer Dim strSH() As String Application.ScreenUpdating = False With ActiveWindow N = .SelectedSheets.Count ReDim strSH(1 To N) For i = 1 To N strSH(i) = .SelectedSheets(i).Name Next i '作業グループ解除 .SelectedSheets(1).Select 'シート保護解除 For i = 1 To N 'パスワードを設定するなら次行のコメント解除 Sheets(strSH(i)).Unprotect 'Password:=strpaswrd Next i '作業グループを再設定する場合はコメント解除 'Sheets(strSH).Select End With End Sub
お礼
むむむ…ちょっと難しそうですね… ですが大変参考になります。 今まで面倒そうなマクロを敬遠していたので(EXCEL関数は得意なんですが…)、ちょっとがんばってみようと思います。 大変参考になります。 アドバイス、ありがとうございました。
補足
こちらの補足をお借りしてみなさんにお礼申し上げます。 長年「何とかならないか」と思っていたことが、これで解決しそうです。 これを機に、マクロをもうちょっと勉強しようと思います。 みなさんありがとうございました。 ポイントはお二人にしかつけられませんが、みなさんに20p差し上げたい気持ちです。 大変お世話になりました。
- hogehage
- ベストアンサー率50% (54/107)
シート名が m月 なら、以下だけです。 For ii=1 to 12 Worksheets(ii & "月").Ptotect 'シート保護 Next ii 保護解除の場合は、Protect を Unprotect にします。 パスワードを掛けている場合は、 Protect ("パスワード") か Unprotect ("パスワード") になります。
お礼
なるほど~。 シート名を選んで保護することもできるのですね。 マクロはいまいち自信がありませんが、挑戦してみます。 アドバイスありがとうございました。
- macchan1
- ベストアンサー率38% (52/136)
この場合はマクロで対応するのが簡単です。 例えばすべてのシートを保護するなら以下のマクロを実行します。 Sub sample() Dim i As Integer For i = 1 To Sheets.Count Sheets(i).Select ActiveSheet.Protect Next i End Sub 保護をはずすなら ActiveSheet.ProtecttをActiveSheet.UnprotectにすればOKです。 最後のシートを保護しないなら For i = 1 To Sheets.Count - 1 に変更してください。
お礼
シートは全部保護します。(1~12枚目は入力するセルだけ保護をはずします。13枚目は各シートの合計額の参照だけです。) 最後のシートだけ保護をはずす方法もあるのですね。 大変参考になります。 これからマクロに挑戦してみます。 アドバイスありがとうございました。
- sanpin-cha
- ベストアンサー率48% (533/1095)
保護する意図がわからないので、ずれた回答になるかもしれません。 ファイル自体を保護すれば解決するのではないでしょうか。 「名前を付けて保存」で「ツール」→「全般オプション」 を試してみては?
お礼
すみません。説明が足りなかったようで。 作った表(ファイル)は主に私ではないパソコン初心者が使う物で、計算式なども簡単なものなのですが、 誤って入力した際本人では直すことができないため、「ひながた」として表を私が作っているのです。 今回はマクロを使用すればいいとアドバイスをいただき、そちらに挑戦してみるつもりですが、 「全般オプション」の方も、試してみます。 ありがとうございました。
お礼
ご回答ありがとうございます。 なるほど…マクロですか。 簡単なマクロを数回使ったことがあるだけですので少々自信がありませんが、さっそく試してみようと思います。 ありがとうございました。