セルの書式設定「セルの保護」の設定を最速理解

vbacellsprotecteyecatch

こんにちは じゅんぱ店長 (@junpa33) です。

今回はセルの書式設定の「保護」についてです。セルの「保護」を行うVBAについての説明です。

「保護」の中には、「ロック」と「表示しない」という項目があります。

今回はこの項目をVBAコード化して利用する方法を説明します。

セルの書式設定「保護」設定とはこれです。

「保護」の中の項目には、「ロック」と「表示しない」があります。

  • この「保護」の効果を得るためには、前提としてワークシートが保護されることが必要です。

セルを保護設定のためのVBAコード

『セルを保護するとは、不注意なデータ編集によるミスを出来るだけ防止するためのもの』と理解ください。

ノーガードのデータを、このオプションで安易に変更できなくするために、という意味合いのものです。

ロック

ロックとは「セル側からの保護機能」のことです。

VBAでこのロックを行うためには、「Lockedプロパティ」を利用します。

 構文 

Rangeオブジェクト.Locked = True または False

Trueでロックを行う Falseでロックを解除 

エクセルBOOKは、立ち上げ時のデフォルトで、「True(ロックを行う)」の状態になっています。

セルのロックを完了させるためには!

セルをロックするためには、この「セルのロック設定」でだけでは、操作完了ではありません。

つまり、

この「セルのロック設定」だけではセルをロックしたことにはなりません。

ロックしたいセルのあるワークシートを保護する必要があります。

ロックすると何もできなくなるようなイメージですが、

利用法としては、例えば、

「共有された追記式の顧客リストの内容を誤って安易に削除修正変更できないようにする」といった利用法です。

Sheet1の顧客リストの入力セルのみ編集可能にする
セルのロックコード
Sub 顧客リスト保護()
    With Worksheets("Sheet1")
        .Unprotect
        .Range(Cells(1, 1), Cells(Cells(Rows.Count, 1) _
                                .End(xlUp).Row, 5)).Select
        With Selection
            .Locked = True
            .SpecialCells(xlCellTypeBlanks).Locked = False
        End With
        .Protect
    End With
End Sub

コードのはじめにシートの保護を一旦解除する

顧客リストの範囲を指定してセルのロック状態に設定する。

セル範囲内の空白セルについてはロックを解除する

最後にシートのプロテクトを設定

新規の部分は入力が可能になっていますが、すでに入力されている部分については、保護されていることが分かります。

空欄に追加入力する度にこのVBAコードを実行することで、入力部分が追加保護されていきます。

さらに、入力済みのデータも編集できるように、完全編集可能モードとして、「シート保護」を解除状態に戻すだけのプログラム(プロシージャー)を作成しておくと便利かもしれません。

SpecialCellseyecatchセルの範囲選択 SpecialCellsメソッドはセル検索し選択する vbawithstateeyecatchWith~End Withの使い方。VBAコードを簡潔に記述する vbalastcelleyecatchセルの範囲選択 データ入力済セルの最終行番号を取得する

表示しない

「表示しない」とは、セルに数式を記述している場合、

そのセルを選択すると表示されるその数式を表示させなくすることです。

セルの「ロック」の付加項目のようなものです。

セルを「ロック」させた上にこのオプションを設定することが実用的です。

セルのロックをせずに、「表示しない」オプションは働きますが、そのように機能させてしまうと、シートロック中に、” 単なる編集可能な空白セル ” としか見えなくなってしまいます。

HTML
Sub 実績表保護()
    With Worksheets("Sheet2")
        .Unprotect
        .Range(Cells(1, 1), Cells(Cells(Rows.Count, 2) _
                                .End(xlUp).Row, 6)).Select
        With Selection
            .Locked = True
            .FormulaHidden = True
        End With
        With .Range(Cells(2, 2), Cells(Selection.Rows.Count, 6)) _
                                        .SpecialCells(xlCellTypeBlanks)
                .Locked = False
                .FormulaHidden = False
        End With
       .Protect
    End With
End Sub

コードのはじめにシートの保護を一旦解除する

顧客リストの範囲を指定してセルのロックと非表示状態に設定する。

改めてセル範囲内の空白セルのロックと非表示を解除する

最後にシートのプロテクトを設定

入力可能な「空欄」に数値を入れると合計計算がされる。が、計算式は表示されない。

入力済のセルを修正しようとすると「保護されているメッセージが表示」され編集できない。数式も表示されない。

空欄を追加入力する度にこのVBAコードを実行することで、入力部分が追加保護されていきます。

セルの書式設定「保護」のVBA最速理解のまとめ

セルの保護とシートの保護は、結構重要です。

特に、個人管理のファイルではなく複数人で利用するファイルの場合は、

データ編集ミスは必ず発生するという前提で、対策を打っておく必要があります。

ランクCのデータファイルでも、データが不注意で壊れてしまうと問題が大きいですので、

こうしたプロテクトとバックアップは必要に応じて行っておきましょう。

エクセルVBAを独習するのに参考書は欠かせません。 参考書選びは自分に合った「相棒」にできるものを選んでいきたいです。

vbastudyeyecatch2エクセルVBAの独習でおすすめ参考書を7冊選ぶ。良書との出会いは大切です

今回の記事はここまでです。   最後までご覧いただき有難うございました。

vbacellsprotecteyecatchセルの書式設定「セルの保護」の設定を最速理解vbacellspaint_gradteyecatchセルの書式設定「グラデーションの塗りつぶし」を設定するcellspaintpatterneyecatchセルの書式設定「塗りつぶしの網掛け」を最速理解vbacellspaintbackeyecatchセルの書式設定「塗りつぶし」背景色をVBAで記述するvbacellsbordereyecatchセルの書式設定「罫線」のVBAを最速理解vbacellsfonteyecatchセルの書式設定「フォント」の操作を最速理解するvbacellsplacementeyecatchセルの書式設定「配置」を最速理解するvbacellssyoshikieyecatchセルの書式設定「表示形式」をVBAコード的に最速理解するVBAcellareaeyecatchセルの範囲選択と設定は14のツールで対応するvbaendpropertyeyecatchセルの範囲選択 Endプロパティで上下左右の最終セルを取得vbaentirecolumneyecatchセルの範囲選択 EntireColumnとColumnの使い方vbaentireroweyecatchセルの範囲選択 EntireRowとRowプロパティの違いvbacolumnseyecatchセルの範囲選択 Columnsプロパティの列指定で参照するvbaunioneyecatchセルの範囲選択 UnionとRangeの一括選択の働きを比較vbaresizeeyecatchセルの範囲選択 Resizeプロパティでセル範囲をサイズ変更vbarangevscellseyecatchセルの範囲選択 Range VS Cells 、VBAで使えるのはどっちvbausedrangeeyecatchセルの範囲選択 UsedRangeプロパティの使い方vbaborder1eyecatchセルの編集 実際に罫線を設定する 位置・線種・太さ・色vbarowseyecatchセルの範囲選択 Rowsプロパティの働きと関連のメソッドvbadeleteeyecatchセルの編集 DeleteとClearの使い分け 削除とクリアの違いvbacurrentregioneyecatchセルの範囲選択 CurrentRegionは連続データをまとめて掴むSpecialCellseyecatchセルの範囲選択 SpecialCellsメソッドはセル検索し選択するvbacharactereyecatchaセルの編集 Charactersで文字列中の一部の文字を加工するvbafontsyseyecatchaセルの編集 Fontプロパティで文字装飾操作をするvbalastcelleyecatchセルの範囲選択 データ入力済セルの最終行番号を取得するvbaoffseteyecatchセルの範囲選択 Offsetプロパティは指定範囲を移動させる
<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。