Excel

【Excel】VBAマクロでシート保護の設定・確認や解除(複数や全てのシートも)【Protect, Unprotect, InputBox】

当サイトでは記事内に広告を含みます

この記事では、ExcelのVBAマクロを使用してシートを確認して保護をかけたり解除したりする設定について解説していきます。

ポイントとしては、`Protect`, `Unprotect`, `InputBox`を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名(あなた自身が名付けていい場所)を少々変わった名称にしております。

そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

 

 VBAマクロでシート保護をかけたり解除したりする設定方法【確認・ダイヤログでシート名指定】【InputBox】

それではまず、VBAマクロでシート保護をかけたり解除したりする方法について解説していきます。

保護をかけたり解除させたりするシート名をダイヤログでを指定する形にしてみますね。

なお、このシート名をチェックし、保護がかかっているものは解除、かかっていないものは保護(ロック)させる仕様とします。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub SheetHogoSettei()

    'シート名をダイヤログから入力
    Dim sheetMingawa As String
    sheetMingawa = InputBox("保護をかける・解除するシート名を入力してください。", "シート名入力")

    'シート保護の状態を確認
    If ThisWorkbook.Sheets(sheetMingawa).ProtectContents = True Then
        'シート保護を解除
        ThisWorkbook.Sheets(sheetMingawa).Unprotect
    Else
        'シート保護をかける
        ThisWorkbook.Sheets(sheetMingawa).Protect
    End If

End Sub

コードのAlt+F8を押し、マクロ選択画面でSheetHogoSettei関数を実行します。

【ステップ】:
1. ユーザがダイヤログでシート名を入力します。
2. そのシートが保護されているかどうかを確認し、保護されていれば解除、保護されていなければ保護をかけます。

 

VBAマクロで複数のシート保護をかける・解除する方法【別のcsvのA列に複数シート名記載】【Protect, Unprotect】

続いては、VBAマクロで複数のシート保護をかける・解除する方法について解説していきます。

複数シートの場合は、別のinput用csvのA列に指定したいシート名が並んで記載されているとしましょう。

このシート名を読み込み、元のエクセルファイルの複数シートをロック、解除させます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub SheetTakusanHogo()

    Dim sheetList As Worksheet
    Dim i As Long
    Dim lastRow As Long

    'CSVからシート名を取得
    Set sheetList = Workbooks("sheetList.csv").Sheets(1)
    lastRow = sheetList.Cells(sheetList.Rows.Count, "A").End(xlUp).Row

    '各シートの保護・解除を行う
    For i = 1 To lastRow
        Dim targetSheetName As String
        targetSheetName = sheetList.Cells(i, 1).Value

        If ThisWorkbook.Sheets(targetSheetName).ProtectContents = True Then
            ThisWorkbook.Sheets(targetSheetName).Unprotect
        Else
            ThisWorkbook.Sheets(targetSheetName).Protect
        End If
    Next i

End Sub

コードのAlt+F8を押し、マクロ選択画面でSheetTakusanHogo関数を実行します。

【ステップ】:
1. CSVファイルからシート名のリストを取得します。
2. それぞれのシートに対して保護・解除を行います。

 

VBAマクロですべてのシート保護をかける・解除する方法【Protect, Unprotect】

続いては、VBAマクロですべてのシート保護をかける・解除する方法について解説していきます。

ブック内のすべてのシートの対して一括処理します。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。


Sub SubeteNoSheetHogo()

    Dim sheetHensuu As Worksheet

    'すべてのシートに対して処理を行う
    For Each sheetHensuu In ThisWorkbook.Sheets
        If sheetHensuu.ProtectContents = True Then
            sheetHensuu.Unprotect
        Else
            sheetHensuu.Protect
        End If
    Next sheetHensuu

End Sub

コードのAlt+F8を押し、マクロ選択画面でSubeteNoSheetHogo関数を実行します。

【ステップ】:

1. Workbook内のすべてのシートに対して、シート保護の状態を確認します。
2. 保護されているシートは解除し、保護されていないシートは保護します。

まとめ

以上で、ExcelのVBAマクロを使ってシートを保護・解除する方法を学びました。

これを活用して、Excelのシートを効果的に管理してください!