VBAワークシートの保護を設定/解除する方法を解説します。シートを保護する条件設定は引き継げない点に注意セルの選択の制限シートの追加/削除/名前変更の制限シートの保護を解除シートが保護されているか調べる保護シートへのProtect/非保護シートへのUnprotect実行シートを保護するシートを保護するには、WorksheetオブジェクトのProtectメソッドを使用します。Worksheets("○○").ProtectProtectメソッドは多数の引数を持ち、ほとんどの引数はこの「シートの保護」ダイアログと対応しています。各設定と引数の対応は以下の通りです。AllowFormattingRows:=Trueこのように記述します。禁止したい操作を消してご利用ください。Scenarios:=False細かい設定を行う場合はマクロ記録を利用するのもおすすめです。規定値がTRUEのものが2つありますが、これは単にTrue/Falseの意味が他の引数と反対なだけです。単純に「引数を省略したらすべて保護される」と覚えてください。Falseと、他引数とは違って「Falseにすると編集可能」になりますので、この逆転にご注意ください。(なぜこんな仕様に・・・?)条件設定は引き継げない点に注意このダイアログをExcel上で操作するときは、前回の設定を記憶してくれます。前に付けたチェックはそのままにしてくれているのがわかります。Protectメソッドはこの前回設定の記憶機能がありません。「すべてのチェックが外れた(すべて禁止している)保護」を行ってしまっている点に注意してください。同じ条件で保護しなおしたい場合は、Protectメソッドを実行するたびに、しっかりとすべての引数を設定し直す必要があります。セルの選択の制限このダイアログの上2つは「セルの選択」に関するロックですが、この2つはProtectメソッドではなく、EnableSelectionプロパティで設定します。いずれの設定もシートを保護しているときにのみ有効Worksheets("○○").Protectメソッドではなくプロパティですので、上記の通り代入によって状態を変更します。最後にProtectメソッドを実行する必要があります。下だけチェックを外すことができないからです。「ロックしたセルだけ選択可」という、不自然な設定にはできないということですね。「シートの保護」で制限されるのはシートの中身(≒セル)の編集であり、シート自体の追加や削除を制限する機能は「ブックの保護」です。ブックの保護を行う場合は、WorkbookオブジェクトのProtectメソッドを使います。WorksheetオブジェクトのProtectメソッドと違い、WorkbookオブジェクトのProtectメソッドは引数が(事実上)1つしかありません。他の記事に誘導するほどでもないので、コードも置いておきます。覚えてしまってください。"1234"シートの保護を解除シートの保護を解除する場合はUnprotectメソッドを使います。Worksheets("○○").UnprotectUnprotectメソッドの引数は「Password」のみです。"1234"など、パスワードの文字列を引数に渡します。シートが保護されているか調べるシートが保護されているか調べるには、ProtectContentsプロパティを調べます。ProtectContentsはそのシートが保護されていればTrue、されていなければFalseを返します。"シートが保護されているため、処理を中断します。保護されていないシートに実行してもエラーにはなりません。Ifとわざわざ書く必要はありません。Worksheets("○○").Unprotectこれだけで「保護されていたら保護を解除する」コードになっています。保護シートへのProtect/非保護シートへのUnprotect実行さきほど「Unprotectメソッドは保護されていないシートに実行してもエラーにならない」と説明しました通り、Unprotectメソッドは何時でも実行可能です。これはProtectメソッドでも同様です。設定次第でなんとVBAのバグが発生します。具体的には、引数DrawingObjectsまたはScenariosを指定したとき限定で、なぜかシートの保護が外れてしまうというバグが起きます。「Protectの前にUnpurotect」しておけば問題はありませんので、シートの保護は保護を解除してから実行しましょう。詳細はこちらの記事をどうぞ。www.limecode.jp以上でシートの保護に関する解説を終わります。使うたびにいちいち引数名を調べる必要が出てしまうコードです。全引数を指定したコードを再掲しておきますので、シートの保護をよく行う方は、これを丸ごとどこかに保存しておきましょう。Workbook.Closeブックを保存せずに閉じるコードを解説します。Closeメソッドの...2021-10-20Findは遅くて非表示に弱くてユーザー操作の影響を受ける検索によく用いられるFindメソッドさんですが、実は危なくて遅...2021-10-10Worksheet.Selectと.Activateの違いWorksheetオブジェクトから呼び出す場合の、SelectメソッドとAc...2021-09-11Replace関数とReplaceメソッドの違いExcelVBAにおいて文字列を置換する処理に使う、Replace関数とRe...2021-05-09複数のシートをまとめてコピー/移動する複数のワークシートを一度にコピー/移動する方法を紹介します。「日本語の変数でプログラミングすれば、みんなが幸せになれる」という思想の元、主にExcelVBAのマクロやコードを解説しているブログです。この思想については↓の記事をご覧ください。変数を日本語にすればプログラミングが上達する記事の更新通知や質問の回答はTwitterでも行っております。お気軽にフォローください。12はてなブログをはじめよう!LimeCodeさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。