「あれ、入力できない?」をゼロに!Excel VBAでシート保護を一瞬で見抜く方法

【業務効率化】VBA
スポンサーリンク

Excelを使っていて「さあ、データを入力しよう!」と思った瞬間、「変更しようとしているセルやグラフは保護されているシートにあります」というメッセージが出てイラッとした経験はありませんか?

今回は、そんな小さなストレスを解消し、業務を「止まらせない」ためのVBA術をお伝えします。

【業務効率化】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の記事を見る 


VBAを独学で学び、業務自動化に5年以上携わってきた私が、「本当に実務で役立った!」と感じた2冊を紹介します。 もう本選びで失敗したくない方は、よければ参考にしてみてください。

この記事を書いた人
ぐー

手取り15万円の会社員でしたが、年間100万円以上節約していました。
株式投資で年間360万円以上投資し、iDeCoも併用しています。
総資産はアッパーマス層に到達しました。
資格は日商簿記3級を持っています。

このブログでは、私が実践してきた節約術やリアルな資産運用、生産性を高めるITスキルについて発信しています。

生活を豊かにするため、高配当株投資で年間配当金60万円をめざしています。
現在の年間配当金は30万円ほどです。

ゲーム・漫画・アニメなどが好きです。
一緒に資産形成をがんばりましょう!
よろしくお願いします!

ぐーをフォローする
【業務効率化】VBAITスキル
スポンサーリンク
ぐーをフォローする

コメント

タイトルとURLをコピーしました