導入:なぜログイン認証が必要なのか
業務システムとしてExcelブックを配布する際、誤操作防止や簡易的な閲覧制限をかけたい場面があります。今回解説するのは、ブックを開いた瞬間にユーザーフォームを表示させ、IDとパスワードの入力を求めるログイン認証の実装です。この仕組みを理解することで、ツール起動時の制御や、特定ユーザーのみに機能を開放するような、一歩進んだツール開発が可能になります。
基礎知識:ユーザーフォームの役割とイベント
Excel VBAの「ユーザーフォーム」は、標準のセル入力よりも直感的なインターフェースを提供します。今回は、ブックを開いた時に自動実行される「Workbook_Open」イベントと、フォーム側で定義した「Functionプロシージャー」を組み合わせます。
重要なポイントは、フォーム側でログイン結果(成功か失敗か)を「戻り値」として返し、呼び出し元の処理を制御することです。これにより、メインの処理と認証の処理を疎結合に保つことができ、コードの再利用性が高まります。
実装のポイント:スマートな認証ロジック
今回の実装では、以下の流れを採用します。
1. Workbook_Openでフォームの関数を呼び出す。
2. フォーム内でID・パスワードの照合を行う。
3. 照合結果(True/False)を呼び出し元へ戻す。
4. 失敗が3回続いた場合、ブックを強制終了する。
この構成により、ログイン成功時のみメインブックを開くという、実務で非常に使い勝手の良いフローが実現できます。
サンプルプログラム
以下のコードをコピーして、ユーザーフォーム(frmLogIn)と標準モジュール、ThisWorkbookにそれぞれ配置してください。
【ThisWorkbookモジュール】
Private Sub Workbook_Open()
‘ フォームの認証関数を呼び出し、成功なら終了、失敗ならブックを閉じる
If frmLogIn.ValidIdPass Then Exit Sub
‘ 認証失敗時はブックを閉じる(保存しない)
Me.Saved = True
If Workbooks.Count > 1 Then
Me.Close SaveChanges:=False
Else
Application.Quit
End If
End Sub
【ユーザーフォーム(frmLogIn)のコード】
Option Explicit
Private pReturn As Boolean
Private pWrongCount As Long
‘ ログイン認証を開始する関数
Public Function ValidIdPass() As Boolean
pReturn = False
Me.Show vbModal
ValidIdPass = pReturn
Unload Me
End Function
Private Sub btnLogIn_Click()
‘ IDとパスワードの照合(isValidIdPass関数を呼び出し)
If isValidIdPass(Me.txtID.Value, Me.txtPass.Value) Then
pReturn = True
Me.Hide
Exit Sub
End If
‘ 3回間違えたら終了
pWrongCount = pWrongCount + 1
MsgBox “IDまたはパスワードが違います。残り” & (3 – pWrongCount) & “回です。”
If pWrongCount >= 3 Then Me.Hide
End Sub
Private Function isValidIdPass(aID As String, aPass As String) As Boolean
Dim ws As Worksheet: Set ws = Worksheets(“ID”)
Dim i As Variant
‘ IDシートのA列からIDを検索
i = Application.Match(aID, ws.Columns(1), 0)
If IsError(i) Then Exit Function ‘ IDが見つからない場合
If aPass <> ws.Cells(i, 2).Value Then Exit Function ‘ パスワード不一致
isValidIdPass = True
End Function
応用と注意点:セキュリティの考え方
最後に、実務における重要な注意点をお伝えします。この手法はあくまで「簡易的なガード」です。シート上にIDやパスワードを記述している場合、VBAに精通したユーザーであれば保護を解除して中身を見ることが可能です。
より強固なセキュリティが必要な場合は、データベース接続や外部認証サービスとの連携を検討してください。また、ブックの保護(VBAプロジェクトのパスワードロック)を併用することで、コードの改ざんを防ぐ最低限の対策を施すのが、プロとしての現場の作法です。
