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

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メソッドはセル検索し選択する vbawithstateeyecatch With~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冊選ぶ。良書との出会いは大切です

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

vbabgcoloreyecatch セルの背景色を2クリックで他範囲にも展開できるマクロ vbasorteyecatch データの並び替え VBA新旧のSortを実データで実証 vbacellsprotecteyecatch 「セルの保護」の設定VBAを最速理解 vbacellspaint_gradteyecatch 「グラデーションの塗りつぶし」のセルを設定する cellspaintpatterneyecatch 「塗りつぶしの網掛け」VBAを最速理解 vbacellspaintbackeyecatch 「塗りつぶし」背景色をVBAで記述する vbacellsbordereyecatch 「罫線」のVBAを最速理解 vbacellsfonteyecatch 「フォント」の操作を最速理解する エクセルVBA vbacellsplacementeyecatch 「配置」を最速理解する エクセルVBA 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 Bordersの/位置/線種/太さ/色/と<外枠だけの罫線>の設置 vbarowseyecatch Rowsプロパティの働きと関連のメソッド vbadeleteeyecatch セルの編集 DeleteとClearの使い分け 削除とクリアの違い vbacurrentregioneyecatch CurrentRegionは連続データをまとめて掴む SpecialCellseyecatch SpecialCellsメソッドはセル検索し選択する vbacharactereyecatcha Charactersで文字列中の一部の文字を加工する vbafontsyseyecatcha Fontプロパティで文字装飾操作をする vbajyufukueyecatch エクセルVBA 同じ項目をまとめる(重複データの整理)コード作成 vbafindeyecatch001 Findメソッドでの検索の方法とコード組み立てのコツ vbalastcelleyecatch データ入力済セルの最終行番号を取得する vbaoffseteyecatch Offsetプロパティは指定範囲を移動させる

エクセルVBA最速理解で必要な知識を集めよう!

<記事内容についての告知>VBAコードの記述記事においては、その記述には細心の注意をしたつもりですが、掲載のVBAコードは動作を保証するものではりません。 あくまでVBAの情報の一例として掲載しています。 掲載のVBAコードのご使用は、自己責任でご判断ください。 万一データ破損等の損害が発生しても当方では責任は負いません。