Excelで、セルに対して保護設定を行うというのは業務で使うテンプレートシートなどでよく使われる方法ですが、保護設定してしまうと、人間の操作だけではなくVBAからのセル内容操作も受け付けなくなってしまいます(エラー 1004が発生する)。これを回避する方法についてteratailに質問が出ていたので、ちょいと調べて回答してみました。
これ、どうやっているかというと、VBA開発画面のツリー表示にある「ThisWorkbook」のコード(ワークブック=Excelファイル全体)に、ファイルがオープンされた際に以下の処理を実施するコードを追加しています。
- ワークシートのプロテクトをパスワードなし、GUI経由での保護に限定して適用する。
これにより、マウスなどを使って人間が操作する分には保護されますが、VBAなどのプログラムからは保護されません。結果、VBAでは値を書き換えられるけれど、人間はセルに打ち込めないという状況を作れます。実際のコードは下記の通り。シート名などは適宜書き換えてください。パスワードなどが必要ならパスワードのところに文字列を入れればOKです。
Private Sub Workbook_Open() Worksheets("Sheet1").Protect Password:="", UserInterfaceOnly:=True End Sub
入門者のExcel VBA―初めての人にベストな学び方 (ブルーバックス)
- 作者: 立山秀利
- 出版社/メーカー: 講談社
- 発売日: 2012/04/20
- メディア: 新書
- クリック: 19回
- この商品を含むブログ (8件) を見る
- 作者: 田中亨
- 出版社/メーカー: 翔泳社
- 発売日: 2016/07/15
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る