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

vbacellsprotecteyecatch

セルの保護の設定方法についてです。
セルの保護には「ロック」と「表示しない」があります。
コードを例示して解説します。

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

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

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

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

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

vbacellsprotectp007
vbacellsprotectp001

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

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

セルを保護設定のための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
vbacellsprotectp002

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

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

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

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

vbacellsprotectp003_1
vbacellsprotectp004_1

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

空欄に追加入力する度にこの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

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

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

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

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

vbacellsprotectp005
vbacellsprotectp006

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

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

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

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

vbacellsprotectp009

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

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

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

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

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

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

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

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

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

エクセルVBA業務ツールで日常の業務改善を行いましょう。

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

アンケートでポイ活しよう!!

アンケートに答えれば答えるほど ”使える” ポイントがたまります。

NTTコム サーチ

af_banner01

Dstyle web

dstyleweb_logo
dstyle_320x50-min