ExcelVBAでロックされたセルの書式設定を指定セルのみ書き込み可能にする

エクセルで関数を入れたセルをいじられたり又は消された事により結果が可笑しくなり焦った経験はないでしょうか?

関数が分からない方は、関数を消して、そのまま数値を入れようとします。それをそのまま使っていると自動的に計算がされずに意図しない計算結果になってしまいます。

ただ、関数はいじって欲しくないのですが、変更箇所を赤くするなど、セルの書式設定だけはいじらせたい場合ってありませんか?

それをVBAで関数のみロックをかけてセルの書式設定だけは自由にいじらせるようにします。

以下のようなシートの「Sheet2」に「関数入り」と「関数なし」があるとします。

関数ありのC2とC3セルはsum関数が入っています。


関数なしのセルD2とD3と数値は、そのままの数字が入っています。


「ロックされたセル」の行でC2とD2を選択して右クリックし「セルの書式設定」を選択します。


関数をいじらせたくないセルC2と数値をいじらせたくないセルD2を「ロック」します。


いじらせても良いセルC3とD3は「ロック」のチェックを外し解除させます。


「校閲」→「シートの保護」で適当なパスワードを入れて「OK」で「ロックされたセル」をいじれなくなります。


「ロックされたセル」を編集しようとすると警告がでます。


当然、ロックされていないセルは数値や関数をいじることができます。


ただし、「ロックされていないセル」も「ロックされているセル」もセルの書式設定はいじることができません。

メニューがアクティブになりません。


デフォルトの値から「セルの書式設定」にチェックを入れれば、文字の色や大きさなどの書式設定をいじることができるようになります。


さて、上記のような設定にするためのVBAになります。

「Sheet2」に対してワークブックを最後、保存した時にSheet2に対してロックがかかっていない場合は、ロックがかかるようにします。

「ThisWorkbook」に記述します。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    
Dim sh As Worksheet
Set sh = Worksheets("Sheet2")

'Sheet2でロックの処置がされていなかったら実行
If sh.ProtectContents = False Then
 'ロックのパスワード設定
  'Cotentsはロックのチェックが入っているセルをロックする
 'Allow~は書式設定は編集できる
  sh.Protect Password:="1234", _
  Contents:=True, _
  AllowFormattingCells:=True
Else
 'Sheet2がロックされていれば抜けます
   Exit Sub
End If

End Sub

ブックを閉じて再度、立ち上げると「ロックされていないセル」は書式設定ができるようになりました。

セルの中身の数値も変更できます。


「ロックされたセル」も書式設定を変更することができます。

C2セルのsum関数とD2セルの数値はいじることができませんが、書式設定はいじることができます。


参考です。

定  数対  象デフォルト
DrawingObjects:=描画オブジェクトを保護させるには、True を指定False
Contents:=オブジェクトの内容を保護させるには、True を指定。
対象がワークシートの場合はロックされているセルです。
True
Scenarios:=シナリオを保護するには、True を指定しますTrue
UserInterfaceOnly:=True を指定すると、画面上からの変更は保護されますが、マクロからの変更は保護されません。
この引数を省略すると、マクロからも、画面上も変更することができなくなります。
False
AllowFormattingCells:=True を指定すると、ユーザーは保護されたワークシートのセル書式を設定することができます。False
AllowFormattingColumns:=True を指定すると、ユーザーは保護されたワークシートの列を書式を設定することができます。False
AllowFormattingRows:=True を指定すると、ユーザーは保護されたワークシートの行の書式を設定することができます。False
AllowInsertingColumns:=True を指定すると、ユーザーは保護されたワークシートに列を挿入することができます。False
AllowInsertingRows:=True を指定すると、ユーザーは保護されたワークシートに行を挿入することができます。False
AllowInsertingHyperlinks:=True を指定すると、ユーザーは保護されたワークシートにハイパーリンクを挿入することができます。False
AllowDeletingColumns:=True を指定すると、ユーザーは保護されたワークシートの列を削除することができます。また、削除される列のセルはすべてロック解除されてしまいます。False
AllowDeletingRows:=True を指定すると、ユーザーは保護されたワークシートの行を削除することができます。また、削除される行のセルはすべてロック解除されてしまいます。False
AllowSorting:=True を指定すると、ユーザーは保護されたワークシートで並べ替えを行うことができます。また、並べ替え範囲内のセルはロックと保護が解除されている必要があります。False
AllowFiltering:=True を指定すると、ユーザーは保護されたワークシートにフィルタを設定することができます。ユーザーは、フィルタ条件を変更できますが、オート フィルタの有効と無効を切り替えることはできません。False
AllowUsingPivotTables:=True を指定すると、ユーザーは保護されたワークシートでピボットテーブル レポートを使用することができます。False

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です