エクセルで関数を入れたセルをいじられたり又は消された事により結果が可笑しくなり焦った経験はないでしょうか?
関数が分からない方は、関数を消して、そのまま数値を入れようとします。それをそのまま使っていると自動的に計算がされずに意図しない計算結果になってしまいます。
ただ、関数はいじって欲しくないのですが、変更箇所を赤くするなど、セルの書式設定だけはいじらせたい場合ってありませんか?
それを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 |