top of page

コード生成グループ「シート保護コード」の解説

概要

 書籍「Excel VBA開発を超効率化するプログラミングテクニック」の特典であるIkiKaiso2.xlamのリボン登録マクロの解説のための特設ページです。


出版社の書籍のページ⇒https://gihyo.jp/book/2024/978-4-297-14023-6


リボン登録マクロ全体解説ページ⇒https://www.softex-celware.com/post/ikikaiso2


 本ページではIkiKaiso2.xlamの「コード生成」グループの「シート保護コード」ボタンの使い方を解説します。

シート保護コード

解説

 用途

  表示シートの保護状態を認識して、そのシート保護状態を再現するVBAコードを自動生成する


 使い方

 実際に使っている様子の動画を下記でご確認ください。


 手順は次の通りです

①:対象のシートに任意の設定のシート保護を設定する

②:「シート保護コード」ボタンをクリック

③:設定したシート保護の状態を認識して、そのシート保護状態を再現するコードを自動生成+クリップボードに格納(一緒にシート保護解除のコードも生成しておく)

④:コードウィンドウに適当な所にコードを貼り付け


 動画では良く行うシート保護の設定を行っています。

  • 値の入力は出来ないようにしておく

  • 列幅、行高さの変更は出来るようにしておく

 


 シート保護、保護解除のVBAでの扱い

 事前知識として、VBAでシート保護、保護解除をどのような場面で扱うか?について説明しておきます。


 そもそもシート保護を行う大きな理由として

  • ユーザーに想定外の使い方でExcelシートを壊されないようにする

  • シートの内容はユーザーが変更不可能にする

    というのがあります。

 

 上記のような理由を前提に、保護を設定したシートにVBAで何かしらの書き込みなど内容の変更を行おうとしたときに、その前後でシート保護解除、保護設定を行う必要があります。


 実際のVBAコードの例だと次のようになります。

 下記コードは簡単な例でA1セルだけ値を入力するようにしていますが、実務では対象シートに様々な変更処理を加えたりします。

シート編集前後でのシート保護解除と保護設定

 

 「①シート保護解除⇒②内容変更⇒③シート保護設定」の手順で行っていますが、上記コードの③の処理は結果的に下記のデフォルトのシート保護状態となってしまいます。


 もっとわかりやすく、先ほどのコードの各段階でシートの状態を示すと、次のようになります。

 実行前は人が設定した理想のシート保護状態でしたが、コードを実行後はデフォルトのシート保護状態に戻ってしまいます。さらに、最初に設定したシート保護状態の情報は完全に失われてしまいます。

コードの各段階での保護状態

 「では、どうしたら最初に設定した「列幅、行高さが変更可能なシート保護状態」を設定できるのか?」となりますが、下記画像の様に、Worksheetオブジェクト.Protectメソッドの引数を正しく与える必要があります。

 しかし、このProtectメソッドの引数はあまりにも多くて、これを正確に記述するのはもはや人間技ではありません。

シート保護コードの作成は無理

 この時の「Worksheetオブジェクト.Protectメソッド」の引数を正しく与えるVBAコードを「シート保護コード」によって自動生成できるようになります。

 実際に「シート保護コード」で自動生成されたコードを利用して先ほどのコードを置き換えたものは次のようになります。

自動生成されたコードを利用した場合

 


 「シート保護コード」に頼らない方法

 上記のようなシート保護のVBAコードはVBA開発では避けては通れないような処理ですが、一般的にこれらのシート保護のコードの作成方法も説明しておきます。

 

 具体的な方法は「マクロの記録」を利用する方法で、実際に上記例のような「列幅、行高さ変更可能」なシート保護の設定を行う仮定をマクロの記録でも記録すると、次のようなコードが生成されます。

マクロ記録で生成されたコード

 これで生成されたコードの一部を変更したりして実際にマクロとして利用したりします。

マクロ記録で生成されたコードの編集後

 上記が一般的な「任意のシート保護状態を設定するVBAコードの作成方法」ですが、この方法だと「マクロの記録」「記録されたコードの編集」の作業の手間が発生しますが、今回紹介している「シート保護コード」機能はこの手間なくボタン1つでコードを生成するので、少し効率化に繋がります。

コメント


softex-celware

​インボイス登録番号:T5810983887134

  • Facebook
  • Twitter
  • YouTube

©2023 softex-celware。Wix.com で作成されました。

bottom of page