【VBA】エクセルVBAでシート保護をして特定のセルだけ編集可能にする

Excel VBA すべて

エクセルVBAでシート保護をして特定のセル(A列)だけ編集可能にする方法を紹介します。

まずシートの保護を行う前にセルの書式設定の保護タブを初期設定にします。

シート左上の「全セル選択ボタン」を押してすべてのセルを選択します。

シート上で右クリックして「セルの書式設定」のダイアログボックスを表示します。

「保護」タブを選択してロックにチェックが入っているのを確認して「OK」ボタン押します。

これでセルの書式設定の保護タブが初期設定になりました。

ポイント

シートの保護をする前に必ず全てのセルを選択してセルの書式設定の保護タブのロックにチェックが入っているか確認してください。( ^o^♪

次にシートの保護を行います。

VBE(Visual Basic Editor)を起動して「挿入」→「標準モジュール」を選択して標準モジュールを作成します、作成した標準モジュールのModule1に下のコードをコピーして貼り付けます。

Sub シートの保護()

Range("A1:A1048575").Select '編集可能にしたいセルを選択します。
Selection.Locked = False '現在選択されているセル範囲のロックを解除して編集できるようにします。
Selection.FormulaHidden = False '選択されているセル範囲の数式を表示します。
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True 'Excelシート全体を保護します。
ActiveSheet.EnableSelection = xlUnlockedCells       'ロックされたセル範囲の選択をできないようにする。

End Sub
シートの保護のプログロムの実行します

エクセルのシート1を表示して「開発タブ」 →「マクロの表示」ボタン → マクロ名(シートの保護)を選択 → [実行] ボタンを押すとプログラムを実行できます。

上のプログロムではRange(“A1:A1048575”).SelectでA列を範囲選択しています、他のセルを編集できるようにしたい場合、たとえばC列のときはRange(“C1:C1048575”).Selectと書き換えてプログラムを実行してください。

Excel2007以降では最終行は「1048576」ですがRange(“A1:A1048576”).Selectとプログラムに書いて範囲を全選択してしまうと、A列を編集中にキーボードの矢印キーを押したとき先頭のセルA1にアクティブセルが勝手に移動してしまいます、そのためこのプログラムではA列を全選択しないように最終行の1つ手前のRange(“A1:A1048575”).Selectにしてセルの範囲選択を行っています。

一番下のActiveSheet.EnableSelection = xlUnlockedCellsのコードはシートの保護の「ロックされたセル範囲の選択」のチェックをOFFにする設定をしています。

「ロックされたセル範囲の選択」のチェックをOFFにするとA列以外のセルは選択できないようになり、選択したときに毎回出て煩わしい「!変更しようとしているセルまたはグラフは保護されているため、読み取り専用となっています。保護されているセルまたはグラフを変更するには、[校閲]タブをクリックし、[変更]グループの[シート保護の解除]をクリックして保護を解除します。パスワードの入力を要求されることもあります。」のエラーメッセージが表示されなくなります。

これでA列だけ編集可能になりA列以外のセルは選択も編集もできないようになりました。

シート保護の設定は「セルの書式設定」も関連しているため複雑でわかりづらいので今回はプログラムで楽に設定できるようにしてみました。( ^ᴗ^♪

コメント