Excel&VBA解説サイト「エクセルの神髄」様出題の問題集、
「VBA100本ノック」に対する私の回答と解説のページです。
100本ノックの出題リストはこちらから
excel-ubara.com
出題:ログインフォームの作成
#VBA100本ノック 75本目
ブックを開いたら「ログイン」フォームを表示しIDとパスワードを入力してもらうVBAを作成します。
IDとパスワードは「ID」シートに登録されています。
IDまたはパスワードを3回間違ったらブックを閉じてください。
正しく入力されたら「ログイン」フォームを閉じてください。

◇ 出題ページはこちら
ソースコード
Formモジュール
Option Explicit ' 100本ノック075:ログインフォームの作成 Private パスワード誤入力回数 As Long Private Sub btnログイン_Click() If IsIDとPWの入力が正しい(txtBoxID入力欄.Value, txtBoxPW入力欄.Value) Then Me.Hide Exit Sub End If パスワード誤入力回数 = パスワード誤入力回数 + 1 If パスワード誤入力回数 < 3 Then MsgBox "IDまたはパスワードが違います。" Else MsgBox "3回入力に失敗したため強制終了します。" ThisWorkbook.Close False End If End Sub Private Function IsIDとPWの入力が正しい(入力ID As String, 入力PW As String) As Boolean If 入力PW = "" Then Exit Function On Error Resume Next Dim 登録PW As String 登録PW = Fx.VLookup(入力ID, WSID.Columns("A:B"), 2, False) On Error GoTo 0 IsIDとPWの入力が正しい = (入力PW = 登録PW) End Function
ThisWorkbookモジュール
Private Sub Workbook_Open() Formログインフォーム.Show vbModal End Sub
汎用関数モジュール
Option Explicit ' WorksheetFunctionの短縮取得 ' 参考:https://www.limecode.jp/entry/utility/shortcall-worksheetfunction Function Fx() As WorksheetFunction Set Fx = WorksheetFunction End Function
解説
ユーザーフォームを扱う問題です。
シンプルなテキストボックスとボタンのみのフォームで、
- 「txtBoxID入力欄.Value」でテキストボックスの値を取得
- 「Private Sub btnログイン_Click」でボタンからマクロを実行
という教科書的なコードで実装しています。
IDとPWのペアのチェックにはVLOOKUP関数を使用しました。
このあたりの処理がWorksheetFunctionで簡単に書けるのが、
ExcelVBAの良いところですね。
ひとつ注意すべき点として、
If 入力PW = "" Then Exit Function
この分岐をしっかり書いておかないと、
IDとPWを共に省略した際に常にログインできるようになってしまいます。
「入力PW = 登録PW」の判定を行う際に、
登録がエラーで""となり、入力の""と一致してしまいますからね。
こういった「初期値の一致」による判定エラーはよく起きますので、
テストの際にしっかり確認しておきましょう。