「excel 選択したシートの保護 一括解除」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Excelで、さまざまな計算式を入れたり、条件付き書式を設定したり、データの入力規則を設定したりした、業務用ワークシートを作成したあとに、折角作ったそのワークシートを他の人に壊されることを防ぐために、[シートの保護]を行うことがあります。
そんな保護したシートを修正するには、保護を解除する必要があります。
先の検索をした方は、選択したシートの保護を一括解除する方法を探していらしたのでしょう。
残念ながら、シートの保護・保護解除は、複数のシートをまとめて一気に行うことができません。
選択されているシートの保護を一括解除するサンプルマクロ
そのため、このサイト・インストラクターのネタ帳では、全シートの保護解除を行うマクロをご紹介しています。
「excel 選択したシートの保護 一括解除」
という検索をした方は、すべてのシートではなく、選択しておいたシートの保護解除を行いたかったのでしょう。
今回は、そんなマクロをご紹介します。
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
上記のマクロを実行すると、シートの保護解除を一気に行うことができます。
サンプルマクロの解説
保護解除を行う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ではなくシート名を格納する作りにしています。
ローカルウィンドウを表示させてステップ実行しながら配列にシート名が格納されるところなどを是非ご確認ください。
- Newer:Word VBAでカーソル位置のスタイル名を取得
- Older:Word VBAでカーソル位置を取得する
Home » エクセルマクロ・Excel VBAの使い方 » Sheets・Worksheet » 選択されているシートの保護を一括解除するExcelマクロ