みなさん,こんにちは。
シンノユウキ(shinno1993)です。
Excel VBAでは,ユーザーフォームなどを活用することでユーザーが便利に使用できる様々なを処理を行うことができます.今回はIDとパスワードを入力しないとブックが表示されない「ログイン機能」を実装したいと思います.
ではいきましょう!
完成形はこんな感じ!
はじめに完成形をお見せしたいと思います.ログイン機能の実装されたブックを開くと,以下のようにブックは表示されずにユーザーフォームだけが表示されます.

IDとパスワードが一致→ブックが表示される!
そして,予め設定しておいたIDとパスワードが一致した場合,以下のようにブックが表示されるという仕組みになっています.


IDとパスワードが不一致→表示されない!
もしIDとパスワードが一致しない場合,ブックは表示されません.

ユーザーフォームの☓ボタンで閉じようとすると,ブックまで同時に閉じられる仕組みになっています.

コードはこちら!
では早速,コードを紹介します.まずはユーザーフォームから.なお,今回紹介したユーザーフォームは,こちらからDLできますので,ぜひご利用ください.
ユーザーフォームは,login.frmファイルに格納されています.それをインポートすることで,オブジェクト名をつけなおしたりといった作業も不要になりますので,ぜひ活用してください.
ではコードはこちらです.
Option Explicit
Enum eColIndex
id = 1
pass = 2
End Enum
Private Sub btnLogin_Click()
'IDとパスワードの取得
Dim id As String
Dim pass As String
id = txtId.Text
pass = txtPass.Text
'IDを検索しパスワードと照合
Dim idRow As Long
On Error GoTo failed
idRow = WorksheetFunction.Match(id, wsData.Columns(eColIndex.id), 0)
If pass = wsData.Cells(idRow, eColIndex.pass) Then
MsgBox "ログインしました", vbInformation, "成功"
Application.Visible = True
Unload Me
Else
failed:
MsgBox "ログインに失敗しました", vbCritical, "失敗"
End If
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Dim ret As Variant
ret = MsgBox("フォームを閉じる場合、このブックも同時に閉じられます。よろしいですか?", vbOKCancel, "確認")
If ret = vbOK Then
Application.DisplayAlerts = False
ThisWorkbook.Close
Application.DisplayAlerts = True
ElseIf ret = vbCancel Then
Cancel = True
End If
End If
End Sub
ワークシートにIDとパスワードのリストを入力しています.そのワークシートのオブジェクト名をwsData に変更しています.1列目がID,2列目がパスワードです.
なお,以下のコードをThisWorkbookのonOpenのコードとして貼り付けると,前述のようにブックを開いた際にフォームのみを開くことができます.
Private Sub Workbook_Open()
Application.ScreenUpdating = False
Application.Visible = False
loginForm.Show
End Sub
注意点
IDとパスワードの管理が面倒
もし本Excelファイルを複数の人にコピーして配布する場合,新規にIDを追加したりする場合はそれぞれのファイルに追記しなければなりません.ですので,かなり面倒な作業になってしまいます.
第三者に見られる可能性もある!
IDとパスワードが一致しないとブックが開けないため,一見するとIDとパスワードをしらない第三者には覗かれないと思われがちですが,いくつか抜け道があり,完全にロックすることはできません.ですので,ゆるーくログイン機能を実装したい場合はこちらで問題ありませんが,そうでない場合は使用をオススメしません.
まとめ
今回はExcelVBAでログイン機能を実装する方法を紹介しました.使い所は限られそうですが,少し変更して使うともしかしたら良い働きをしてくれるかもしれませんね.