Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 選択されているシートの保護を一括解除するExcelマクロ

選択されているシートの保護を一括解除するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

「excel 選択したシートの保護 一括解除」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

Excelで、さまざまな計算式を入れたり、条件付き書式を設定したり、データの入力規則を設定したりした、業務用ワークシートを作成したあとに、折角作ったそのワークシートを他の人に壊されることを防ぐために、[シートの保護]を行うことがあります。

そんな保護したシートを修正するには、保護を解除する必要があります。

先の検索をした方は、選択したシートの保護を一括解除する方法を探していらしたのでしょう。

残念ながら、シートの保護・保護解除は、複数のシートをまとめて一気に行うことができません。

[スポンサードリンク]

選択されているシートの保護を一括解除するサンプルマクロ

そのため、このサイト・インストラクターのネタ帳では、全シートの保護解除を行うマクロをご紹介しています。

「excel 選択したシートの保護 一括解除」
という検索をした方は、すべてのシートではなく、選択しておいたシートの保護解除を行いたかったのでしょう。

今回は、そんなマクロをご紹介します。

Sub 選択されたシートの保護を一括解除する()

 Dim cnt As Long ' 選択されているシートの数
 Dim sh_name() As String ' 選択されているシートのName
 Dim sh As Object ' WorksheetまたはChart
 Dim i As Long

 cnt = ActiveWindow.SelectedSheets.Count
 ReDim sh_name(1 To cnt)

' 選択されているシートのNameを配列に格納
 i = 1
 For Each sh In ActiveWindow.SelectedSheets
  sh_name(i) = sh.Name
  i = i + 1
 Next

' 選択されているシートの保護を順番に解除
 For i = 1 To cnt
  With Sheets(sh_name(i))
   .Select
   .Unprotect
  End With
 Next i

' 元々選択されていたシートを選択し直す
 For i = 1 To cnt
  Sheets(sh_name(i)).Select Replace:=False
 Next i

End Sub

上記のマクロを実行すると、シートの保護解除を一気に行うことができます。

サンプルマクロの解説

保護解除を行うUnprotectメソッドは、複数シートが選択されている状態で実行しようとすると実行時エラーが発生しまいます。

そのため上記のマクロでは、選択されているシート名を配列に格納しておいてから、一枚ずつ順番に保護解除を行い、保護解除が終わったら元々選択されていたシートを選択し直しています。

まず、選択されているシートの枚数を取得して、配列のサイズを決めます。
 cnt = ActiveWindow.SelectedSheets.Count
 ReDim sh_name(1 To cnt)

その配列に順番に選択されているシート名を格納します。
 i = 1
 For Each sh In ActiveWindow.SelectedSheets
  sh_name(i) = sh.Name

シート名の格納が終わったら、そのシート名を使って保護解除を行い、
 For i = 1 To cnt
  With Sheets(sh_name(i))
   .Select
   .Unprotect

保護解除が終わったら、元々選択されていたシートを選択し直しています。
 For i = 1 To cnt
  Sheets(sh_name(i)).Select Replace:=False

上記のマクロは、配列に慣れていない方でもわかりやすいように、配列にIndexではなくシート名を格納する作りにしています。

ローカルウィンドウを表示させてステップ実行しながら配列にシート名が格納されるところなどを是非ご確認ください。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 選択されているシートの保護を一括解除するExcelマクロ

「Sheets・Worksheet」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.
.