見出し画像

VBAの要点-9/検索フォームの作成

こんにちは、ロック204チャンネルです。
今回は、「VBAの要点9 検索フォームの作成」についてお送りします。
この資料では、会員名簿から特定の条件で検索を行うフォームを作成する手順を示しています。
具体的には、メニューフォームから検索フォームを呼び出し、入力された条件で会員名簿を検索し、結果を表示するコードを解説しています。

今回、会員名簿プログラムに追加した機能として、メニューと検索フォームを追加しました。
またメニューを呼び出すため、シート上にフォームコントロールのコマンドボタンを配置しています。

MenuFormには、コマンドボタンとして「KaiinTouroku」,「Kensaku」,「Tojiru」ボタンが配置されています。
そして、これらのボタンより各フォームを表示するコードが右のような記述となります。

それでは、「KensakuForm」のコードについて説明します。
最初に、KensakuTextがクリックされたときのコードです。
1行目の、Private Sub KensakuText_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) の引数は、
KeyCode: 押されたキーのコードを表します。
Shift: シフトキーの状態を表します(使われていません)。
2行目の「If KeyCode = vbKeyReturn Then Exit Sub 」は、押されたキーがEnterキー(vbKeyReturn)でない場合、サブルーチンを終了します。Enterキーが押された場合は次の処理に進みます。
4行目は、リストボックスのクリアを行っています。
6行目移行が、検索処理となります。
7行目の「With Worksheets(“Sheet1”)」で、 Sheet1というシートを対象にします。
8行目の「For i = 2 To .Cells(Rows.Count, “A”).End(xlUp).Row」で、シートのA列の2行目から最終行までループします。
10行目の「If StrComp(.Cells(i, 1), KensakuTextBox.Text) = 0 Then」で、 A列のセルの値と検索テキストボックスの値を比較し、A列のセルの値に検索テキストボックスの値が含まれる場合に次の処理を行います。
11~12行目の「ListBox1.AddItem .Cells(i, 1).Value & “, ” & .Cells(i, 2).Value」で、一致したセルの値(漢字氏名)に、その隣のA列の値(会員番号)を「.」で結合しリストボックスに追加します。

16行目の「If ListBox1.ListCount > 0 Then 」は、ListBox1のアイテム数が0より大きい場合に次の処理を行います。つまり、リストボックスに検索結果がある場合の処理です。
18行目は、「ListBox1.SetFocus 」でリストボックスにフォーカスを設定します。これにより、ユーザーがリストボックス内のアイテムをすぐに操作できるようになります。
19行目の「ListBox1.ListIndex = 0 で、ListBox1の最初のアイテムを選択します。ListIndexプロパティを0に設定することで、リストボックスの最初のアイテムが選択状態になります。
20行目の「Else」は、 リストボックスにアイテムがない場合の処理を開始します。
21行目は、 キーコードをリセットで「KeyCode = 0 」によりキーコードを0にリセットします。これにより、Enterキーが押されたことによる他の処理を防ぎます。
22行目は、データがないことを通知でメッセージボックスを表示し、「No DATA」というメッセージをユーザーに通知します。これにより、検索結果がないことをユーザーに知らせます。

このコードは、閉じるボタンがクリックされた時に実行されるもので、
KensakuFormを閉じ、MenuFormを表示するコードとなっています。

操作画面・動画


ダウンロードしたファイルは下記の方法で[ブロック解除]してください。
1.Windows ファイル エクスプローラーを開き、ファイルを保存したフォルダーに移動します。

2.ファイルを右クリックし、コンテキスト メニューから [プロパティ] を選択します。
3.[全般] タブの下部で、[ブロック解除] チェック ボックスを選択して、[OK] を選択します。


この記事が気に入ったらサポートをしてみませんか?