misc.log

日常茶飯事とお仕事と

保護設定されたセルにExcel VBAからデータを書き換える方法

Excelで、セルに対して保護設定を行うというのは業務で使うテンプレートシートなどでよく使われる方法ですが、保護設定してしまうと、人間の操作だけではなくVBAからのセル内容操作も受け付けなくなってしまいます(エラー 1004が発生する)。これを回避する方法についてteratailに質問が出ていたので、ちょいと調べて回答してみました。

teratail.com

これ、どうやっているかというと、VBA開発画面のツリー表示にある「ThisWorkbook」のコード(ワークブック=Excelファイル全体)に、ファイルがオープンされた際に以下の処理を実施するコードを追加しています。

  • ワークシートのプロテクトをパスワードなし、GUI経由での保護に限定して適用する。

これにより、マウスなどを使って人間が操作する分には保護されますが、VBAなどのプログラムからは保護されません。結果、VBAでは値を書き換えられるけれど、人間はセルに打ち込めないという状況を作れます。実際のコードは下記の通り。シート名などは適宜書き換えてください。パスワードなどが必要ならパスワードのところに文字列を入れればOKです。

Private Sub Workbook_Open()
    Worksheets("Sheet1").Protect Password:="", UserInterfaceOnly:=True
End Sub

Excel VBA逆引き辞典パーフェクト 第3版

Excel VBA逆引き辞典パーフェクト 第3版