VBA ワークシートの保護と保護の解除

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

masahiro yoshida

Last updated on 4月 17, 2022

このチュートリアルでは、VBAでExcelワークシートの保護および保護の解除の方法に関するすべてを学ぶことができます。

パスワードのないExcelワークシートの保護を解除する

パスワードで保護されていないワークシートの保護を解除するには、次のような簡単なコードを使用します。

Worksheets("Sheet1").Unprotect

パスワード付きのExcelワークシートの保護を解除する

パスワードで保護されているワークシートの保護を解除するには、パスワードの入力も必要です。

Worksheets("Sheet1").Unprotect "Password"

シートの保護を解除する – パスワードを紛失したとき

パスワードがわからないワークシートの保護を解除するには、パスワード復旧アドインを使用する必要があります。

ワークシートを保護する

ワークシートの保護では、シートの特定の部分を編集できないようにロックすることができます。

vba unprotect sheet シートの保護 解除

このメニューは、校閲」タブでシートの保護、またはシートのタブ名のところを右クリックすることで表示されます。

vba protect sheet シートの保護

最も一般的には、「ロックされた」セルを編集から保護し、エンドユーザーに特定のセルのみ編集を許可するために使用されます。

セルを選択し、「セルの書式設定」メニューの 「保護」タブ (CTRL + 1)を開くと、セルをロックすることができます。

vba lock cells for worksheet protection ワークシート シートの保護

また、ユーザーがワークシートの構造を変更したり(行と列の挿入、削除、サイズ変更)、オートフィルタを使用できないようにすることもできます。

パスワード無しでワークシートを保護する

パスワードを入力せずにワークシートを保護したい場合があります。これにより、ワークシートが誤って変更されることを防ぎつつ、必要に応じてユーザーが変更するためのアクセス権を得ることができます。

Worksheets("Sheet1").Protect

パスワードをかけてワークシートを保護する

Worksheets("Sheet1").Protect "Password"

ワークシートの保護設定

上記の例では、標準的な保護設定でワークシートを保護します。その代わり、保護する内容をカスタマイズしたい場合があります。

Worksheets("Sheet1").Protect Password:=strPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, _
UserInterfaceOnly:=True, AllowFormattingCells:=False, AllowFormattingColumns:=False, _
AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, _ (ハイパーリンクの挿入を許可する)。
AllowSorting:=False, AllowFiltering:=False, AllowUsingPivotTables:=False

上記の構文を使用するよりも、希望の設定(上記のワークシート保護メニューで選択)でマクロを記録し、記録されたコードをプロシージャにコピー&ペーストすることをお勧めします。

シートの保護 – VBAによる変更を許可する

デフォルトでは、シートを保護すると、ユーザーの操作に加えて、VBAの操作にも保護が適用されます。VBAがロックされたセルを変更しようとすると、ランタイムエラー1004が表示されます。これを避けるには、VBAがワークシートを操作する必要があるときに、ワークシートの保護を解除し、再保護することができます。

Sub Edit_Sheet1()
    'Sheet1の保護を解除する
    Worksheets("Sheet1").Unprotect

    'Sheet1に対して何かをする

    'Sheet1を再保護する
    Worksheets("Sheet1").Protect
End Sub

しかし、ワークシートの保護解除や再保護を忘れてしまいがちです。これは、コーディングエラーの確率を増加させる可能性があります。 代わりに、UserInterFaceOnlyの設定を使用することができます。TRUEに設定すると、ワークシートはユーザーからだけ保護され、VBAからは保護されません。 VBAのコードは、ロックが解除されている場合と同様にワークシートを自由に編集することができます。 UserInterFaceOnlyの重要なポイントは2つです。

  • この設定は、ワークシートの保護メニュー(上図)からは行えません。VBAで定義する必要がある設定です。
  • この設定は、ワークブックを閉じても保存されません。ワークブックを開くたびに再定義する必要があります。

そこで、UserInterFaceOnlyプロパティを設定するために、ThisWorkbookモジュールに以下のWorkbook_Openイベントプロシージャを配置します。

Private Sub Workbook_Open()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        ws.Protect UserInterfaceOnly:=True
    Next ws
End Sub

Workbook_Openは、ワークブックが開かれるたびに実行される特別なイベントプロシージャです。 これは、ThisWorkbookモジュールに配置する必要があります。また、Auto_Openイベントプロシージャを使用することもできます。(ここでは説明しません。)

すべてのシートの保護を解除するマクロ

このマクロは、ワークブック内のすべてのシートのプロテクトを解除します。

'すべてのワークシートの保護を解除する
Sub UnProtectAllSheets()
    Dim ws As Worksheet

    For Each ws In Worksheets
        ws.Unprotect "password"
    Next ws

End Sub

すべてのシートを保護するマクロ

このマクロは、ワークブック内のすべてのシートを保護します。

'すべてのワークシートを保護する
Sub ProtectAllSheets()
    Dim ws As Worksheet

    For Each ws In Worksheets
        ws.Protect "password"
    Next ws

End Sub
vba-free-addin

VBA Code Examples Add-in

Easily access all of the code examples found on our site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(No installation required!)

Free Download

Return to VBA Code Examples