Excel VBAでシート保護や解除のマクロを作成すると、ボタン1つで作業できるため非常に便利です。しかし、解除処理を誰でも実行できてしまうと、重要なデータが誤って変更される可能性があります。
そのような場合は、シート保護解除マクロを実行する前に4桁の暗証番号を入力させ、正しい番号の場合だけ解除処理を行う仕組みを追加できます。この記事では、VBAのInputBoxを利用して暗証番号による確認処理を入れる方法を解説します。
VBAでシート保護解除前に暗証番号を求める基本方法
Excel VBAでは、InputBox関数を使うことでユーザーに文字や数字を入力してもらう画面を表示できます。この機能を利用して、解除マクロの最初に暗証番号の入力処理を追加します。
例えば、解除用の暗証番号を「1234」と設定しておき、入力された番号が一致した場合のみシート保護を解除するようにできます。
基本的な流れは「暗証番号入力」→「番号確認」→「正しければ解除」→「間違っていれば処理終了」という形になります。
4桁の暗証番号付きシート保護解除マクロの例
以下のようなVBAコードを解除マクロに追加することで、実行時に4桁の暗証番号を要求できます。
Sub シート保護解除()
Dim code As String
code = InputBox("4桁の暗証番号を入力してください")
If code = "1234" Then
ActiveSheet.Unprotect Password:="1234"
MsgBox "シート保護を解除しました"
Else
MsgBox "暗証番号が違います"
End If
End Sub
この例では、入力された値が「1234」の場合だけシート保護解除を実行します。異なる番号を入力した場合は解除されません。
実際に使用する場合は、コード内の「1234」を自分で決めた4桁の番号に変更してください。
シート保護用パスワードと解除用暗証番号を別にする方法
より安全に管理したい場合は、VBA実行時に確認する暗証番号と、Excelのシート保護パスワードを別々に設定する方法があります。
例えば、利用者に入力してもらう番号を「5678」とし、実際のシート保護パスワードを「abcd1234」にすることも可能です。
Sub シート保護解除()
Dim inputCode As String
inputCode = InputBox("暗証番号を入力してください")
If inputCode = "5678" Then
ActiveSheet.Unprotect Password:="abcd1234"
MsgBox "解除しました"
Else
MsgBox "暗証番号が違います"
End If
End Sub
この方法では、マクロ利用者がExcelのシート保護パスワードを直接知らなくても解除操作ができます。
入力をキャンセルした場合の処理を追加する
InputBoxはキャンセルボタンを押すこともできます。その場合、処理を終了するようにしておくと使いやすくなります。
Sub シート保護解除()
Dim code As String
code = InputBox("4桁の暗証番号を入力してください")
If code = "" Then
MsgBox "処理をキャンセルしました"
Exit Sub
End If
If code = "1234" Then
ActiveSheet.Unprotect Password:="1234"
Else
MsgBox "暗証番号が違います"
End If
End Sub
このようにしておくと、入力途中でキャンセルした場合でも不要な処理が実行されません。
VBAで暗証番号を設定するときの注意点
VBAコード内に暗証番号を直接記載する方法は簡単ですが、Excelに詳しい人がマクロの中身を見ることができる場合は番号を確認される可能性があります。
重要なデータを保護する目的で利用する場合は、VBAプロジェクト自体にパスワードを設定したり、ユーザーフォームを利用して入力処理を作成したりする方法もあります。
また、シート保護は誤操作防止を目的とした機能であり、強固なセキュリティ対策ではありません。機密情報を扱う場合はファイル自体のパスワード設定なども検討すると安心です。
まとめ
Excel VBAのシート保護解除マクロには、InputBoxを利用することで4桁の暗証番号入力を追加できます。
暗証番号が正しい場合だけ解除する仕組みにすることで、誤操作や不要な解除を防ぐことができます。さらに安全性を高めたい場合は、シート保護パスワードと入力用暗証番号を分ける方法も有効です。
VBAでは少しコードを追加するだけで、シート解除前の確認処理を作成できるため、業務用Excelファイルの管理にも活用できます。


コメント