【VBAリファレンス|実務向け】シート保護のパスワードに「入力不能文字」を組み込み、セキュリティを強化するテクニック

スポンサーリンク

なぜこの技術が重要なのか

Excelのシート保護機能は非常に便利ですが、通常のパスワード設定だけでは、悪意あるユーザーや誤操作によってパスワードを推測されたり、解除されたりするリスクがゼロではありません。実務において「特定の担当者以外には絶対に解除させたくない」という場合、通常のキーボード入力では打てない「制御文字」をパスワードに組み込むことで、手動での解除を物理的に不可能にするという強力なセキュリティ対策が可能になります。

基礎知識:Chr関数と制御文字とは

VBAには、文字コードから文字を生成するChr関数というものがあります。通常、キーボードから入力できる文字(英数字や記号)以外にも、コンピュータには「制御コード」と呼ばれる特殊な文字が存在します。
例えば、Chr(9)は「タブ」を意味し、通常のキー入力でパスワード欄にタブを挿入することはできません。パスワードの一部にこの文字を混ぜることで、ユーザーが手作業でダイアログボックスにパスワードを入力しようとしても、絶対に一致させることができなくなります。

実装の考え方

シートを保護するProtectメソッドに対し、パスワードとして「任意の文字列 + Chr(9)」を指定します。こうすることで、保護をかけるのはプログラムから一瞬で行えますが、解除の際にも同様の文字コードをプログラムから渡さない限り、Excelの保護解除画面からは一生開くことができなくなります。

サンプルプログラム

以下のコードは、指定したシートにタブ文字を含んだパスワードを設定し、解除する例です。

●シート保護用コード
Sub ProtectSheetWithInvisibleChar()
Dim sheetPassword As String
‘ パスワードにタブ文字(Chr(9))を結合して設定
sheetPassword = “MySecurePassword” & Chr(9)

‘ 指定シートを保護
Worksheets(“Sheet1”).Protect Password:=sheetPassword
MsgBox “シートを保護しました。手動での解除は不可能です。”
End Sub

●シート保護解除用コード
Sub UnprotectSheetWithInvisibleChar()
Dim sheetPassword As String
‘ 保護時と同じパスワードを指定
sheetPassword = “MySecurePassword” & Chr(9)

‘ シートの保護を解除
Worksheets(“Sheet1”).Unprotect Password:=sheetPassword
MsgBox “シートの保護を解除しました。”
End Sub

応用・注意点:運用上のリスクと回避策

このテクニックは非常に強力ですが、「自分がパスワードを忘れた場合」や「コードを紛失した場合」は、二度と保護を解除できなくなるという最大のリスクを伴います。

・バックアップの徹底:VBAコードが含まれるブック自体を別の場所にバックアップしてください。
・コードの隠蔽:パスワードが書かれたVBAプロジェクト自体を閲覧されないよう、「VBAプロジェクトのプロパティ」からパスワードをかけてロックしておくことを強く推奨します。
・誤操作の防止:もしこのコードを他人に配布する場合、パスワードの仕様(タブ文字を含んでいること)を適切にドキュメントとして残しておかないと、将来的なメンテナンスができなくなるため注意が必要です。

この手法は、社内の重要な計算式が組まれたシートを、意図しない変更から守るための「最後の砦」として活用してください。

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