VBAでパスワード制御を自作しても、実はほとんど意味がありません。パスワードがコードの中にそのまま書かれているため、VBAの編集画面を開けば誰でも見えてしまいます。情報を守りたいなら、Excelにもともとついているシートやファイルのパスワードのかけ方を使う方が確実です。
この記事では、次の内容を順番に解説します。
- VBAでパスワード制御をするとどんな問題があるか
- なぜVBAのパスワードは簡単に見破られるのか
- 本当に情報を守るためのExcel本来の機能
VBAでパスワード制御するとどんな問題がある?
次のようなコードをたまに見かけます。パスワードを入力させて、合っていれば隠しシートを表示する、という仕組みです。
Sub sh_password()
Dim pass As String
pass = InputBox("パスワードを入力してください")
If pass = "abc123" Then
Sheets("データ").Visible = True
Else
MsgBox "パスワードが違います"
End If
End Sub
一見うまく動いているように見えますが、次の3つの問題があります。
問題①:パスワードがコードの中に丸見え
上のコードでは "abc123" というパスワードがコードの中にそのまま書かれています。VBAの編集画面(Alt+F11)を開けば、誰でもすぐに確認できてしまいます。
「VBAプロジェクトにパスワードをかければ大丈夫では?」と思うかもしれませんが、そのパスワードを解除する方法がインターネット上に多数出回っているため、完全には守れません。
問題②:マクロが無効だとそもそも動かない
Excelでファイルを開いたとき「セキュリティの警告:マクロが無効にされました」というメッセージが出ることがあります。この状態ではVBAの処理が一切動きません。
つまり、マクロを有効にしなければパスワードチェック自体が始まらないので、制御の仕組みとして成り立っていません。
問題③:シートの表示は手動で簡単に変えられる
VBAで Sheets("データ").Visible = False としてシートを隠していても、次のコードをVBAの編集画面のイミディエイトウィンドウに入力するだけで表示できてしまいます。
Sheets("データ").Visible = True
少しVBAを知っている人であれば、簡単に解除できてしまいます。
本当に情報を守るにはどうすればいい?
情報を守りたい場合は、VBAで自作するのではなく、Excelにもともと備わっているパスワードの機能を使いましょう。マクロの有効・無効に関係なく機能します。
① シートの保護(パスワード付き)
「校閲」タブ →「シートの保護」から設定できます。セルの編集を制限したり、数式を隠したりできます。パスワードを設定すれば、知らない人には解除できません。
② ブックの保護
「校閲」→「ブックの保護」から設定できます。シートの追加・削除・名前の変更などをパスワードでできないようにします。ファイルの構造を壊されたくない場合に使います。
③ ファイルを開くパスワード
「名前を付けて保存」→「ツール」→「全般オプション」から設定できます。ファイルを開くときにパスワードが必要になります。この設定はマクロの有無に関係なく機能するため、3つの中で最も確実です。
まとめ
VBAで自作したパスワード制御は見た目だけで、実際にはほとんど意味がありません。本当に情報を守りたいなら、Excelの保護機能を使いましょう。
- VBAパスワード制御の問題:コードにパスワードが丸見え・マクロ無効だと動かない・シート表示は手動で変えられる。
- シートの保護:「校閲」→「シートの保護」でセル編集を制限できる。
- ブックの保護:「校閲」→「ブックの保護」でシートの追加・削除を制限できる。
- ファイルパスワード:「名前を付けて保存」→「ツール」→「全般オプション」で設定。マクロに関係なく機能する最も確実な方法。
よくある質問
シートの保護とブックの保護は何が違う?
シートの保護は「そのシートの中のセルを編集させない」ための機能です。ブックの保護は「シートを追加・削除・移動させない」ための機能です。どちらもパスワードで設定でき、目的に合わせて使い分けます。両方同時に設定することもできます。
シートの保護をかけても、特定のセルだけ入力できるようにしたい場合は?
できます。入力を許可したいセルを選択して、右クリック→「セルの書式設定」→「保護」タブで「ロック」のチェックを外してからシートの保護をかけると、そのセルだけ入力できる状態にできます。
VLookupを使っている数式を他の人に見られたくない場合は?
シートの保護をかけるときに「ロックされたセル範囲の選択」のチェックを外すと数式バーに数式が表示されなくなります。さらに確実に隠したい場合は、セルの書式設定の「保護」タブで「表示しない」にチェックを入れてからシートの保護をかけます。
パスワードを忘れてしまったらどうすればいい?
Excelの保護機能のパスワードを忘れた場合、基本的には解除できません。パスワードはメモしておくか、パスワード管理ツールを使って保管しましょう。シートの保護のパスワードよりも、ファイルを開くパスワードの方が特に重要です。
VBAでシートの保護をかけることはできる?
できます。Sheets("シート名").Protect Password:="パスワード" でVBAからシートの保護をかけられます。解除は Sheets("シート名").Unprotect Password:="パスワード" です。ただしこの場合もパスワードがコードに書かれることになるので注意が必要です。
動画で学びたい方へ
「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。
VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。



