Excelを使っていて「さあ、データを入力しよう!」と思った瞬間、「変更しようとしているセルやグラフは保護されているシートにあります」というメッセージが出てイラッとした経験はありませんか?
今回は、そんな小さなストレスを解消し、業務を「止まらせない」ためのVBA術をお伝えします。
なぜ事前に「シート保護の確認」が必要なのか?
Excelのシート保護は、大切な数式や設定が誤って壊されないように守る重要な機能になります。
しかし、VBA(マクロ)を使って自動入力させようとすると、シート保護が原因で処理が途中で中断されてしまうことがあります。
マクロが途中で停止してしまうと、どこまで処理が完了したのかが把握しにくくなり、復旧作業に10分〜15分ほどの貴重な時間を費やしてしまうケースも少なくありません。
処理の前に「シートが保護されているか?」を判定するコードを1行挟むだけで、この中断リスクをしっかりと防ぐことができます。
コピペでOK!アクティブシートの保護状態をチェックするVBAコード
初心者の方でも使いやすいよう、メッセージボックスで教えてくれるシンプルなコードを用意しました。
Sub CheckSheetProtection()
' 現在開いているシートが保護されているか確認します
If ActiveSheet.ProtectContents = True Then
MsgBox "このシートは保護されています。解除してから実行してください。", vbExclamation, "確認"
Else
MsgBox "シートは保護されていません。そのまま作業を続けられます。", vbInformation, "確認"
End If
End Sub
ここがポイント!「ProtectContents」プロパティの解説
状態を判別する一番のポイントは ProtectContents というプロパティになります。
- True(真実):シート保護が「有効」になっている状態
- False(間違い):シート保護が「無効(解除)」になっている状態
この判定をIf文(条件分岐)と組み合わせることで、Excelがあなたの代わりにシート保護の有無を瞬時にチェックしてくれます。
応用編:ブック内の全シートを一括チェックする方法
たとえば100枚以上のシートが存在する場合でも、このコードを実行すればわずか一瞬で全シートの確認が完了します。
Sub AllSheetCheck()
Dim ws As Worksheet
Dim msg As String
For Each ws In ThisWorkbook .Worksheets
If ws.ProtectContents = True Then
msg = msg & ws.Name & vbCrLf
End If
Next ws
If msg = "" Then
MsgBox "保護されているシートはありません。"
Else
MsgBox "以下のシートが保護されています:" & vbCrLf & msg
End If
End Sub
VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。
リンク
リンク

コメント