女性が目を合わせてくれない、どうもoReです。
今回は、部品の検索フォームを作っていきます。
部品検索フォーム作成
新たにユーザーフォームを挿入して、
TextBox1とListBox1を配置しましょう。
部品検索フォームのオブジェクト名は、Kensakuとしますか。
↓こんな感じ
そうしたら、Mainフォームに部品検索フォームを表示させる
コマンドボタンを配置しましょう。
配置したコマンドボタンに、
部品検索フォームを表示させるコードを書きます。
'Kensaku表示
Private Sub CommandButton5_Click()
Kensaku.Show
End Sub
動作確認しましょう。
ちゃんと、部品検索フォームが表示されますか?
部品検索フォーム初期化
リストボックスに表示するものは
・部品管理№
・バーコード
・メーカー
・品名
・型式
としましょう。
リストボックスの列数は5列となるので
'部品検索フォーム初期化
Private Sub UserForm_Initialize()
ListBox1.ColumnCount = 5 '5列だよ
ListBox1.ColumnWidths = "100;100;100;100;100" '←ここは調整してね
End Sub
ColumnCount? ColumnWidths?の方はこちら→【VBA在庫管理#09】
Like演算子
・Like ライク
Likeは、『好き』という意味みと、
『~のような』という意味の2通りあるようです。
今まで、検索する場合Findを使ってきましたが、
今回はLikeを使用していきます。
試しに、使ってみましょう。
Sheet1モジュールに下記のように書いて実行してみてください。
Sub test()
Dim i As Integer
For i = 6 To 9
If Cells(i, 4) Like "*三*" Then 'メーカー検索
MsgBox Cells(i, 4)
End If
Next i
End Sub
メッセージボックスに『三和酒類株式会社』と表示されましたか?
*(アスタリスク)で囲んだ、0文字以上の文字と一致したらTrueを返します。
“*三酒*” に変更して実行するとメッセージボックスは表示されません。
“*株式*” に変更すると、『アサヒビール株式会社』と『三和酒類株式』が
表示されます。
詳しい使い方はググってね。
※確認できたら、消しといてください。
部品検索プログラム作成
実際にLike演算子を使って作っていきましょう。
動作条件として
入力した文字列のようなものを全てリストボックスに表示させたい。
まず、トリガーを作りましょう。
テキストボックス1が変化した時に発動するものを使います。
Kensakuフォームの
・オブジェクトはTextBox1を選択
・プロシージャはChangeを選択
'部品検索処理
Private Sub TextBox1_Change()
'ここに検索処理を書くよ
End Sub
トリガーが出来たので、プログラミングしていきましょう。
とりあえず、テキストボックス1に入力した文字列のような
型式の部品を、リストボックスに表示していきます。
↓こんな感じ
'部品検索処理
Private Sub TextBox1_Change()
Dim LastRow As Long, i As Long
ListBox1.Clear 'リストボックスクリア
With Sheet1
LastRow = .Cells(Rows.Count, 2).End(xlUp).Row
For i = 6 To LastRow
If TextBox1 = "" Then '空白の場合
Exit Sub '処理から抜ける
ElseIf .Cells(i, 6) Like "*" & TextBox1 & "*" Then 'セルの型式とTextBox1の文字を比較
ListBox1.AddItem .Cells(i, 6) 'リストボックスに登録
End If
Next i
End With
End Sub
型式を入力してみてください。
ちゃんと、一致した型式がリストボックスに表示されますか?
それでは、一致した型式の
・部品管理№
・バーコード
・メーカー
・品名
・型式
を表示させましょう。
↓こんな感じに変更
'部品検索処理
Private Sub TextBox1_Change()
Dim LastRow As Long, i As Long, j As Long
ListBox1.Clear 'リストボックスクリア
With Sheet1
LastRow = .Cells(Rows.Count, 4).End(xlUp).Row
For i = 6 To LastRow
If TextBox1 = "" Then '空白の場合
Exit Sub '処理から抜ける
ElseIf .Cells(i, 6) Like "*" & TextBox1 & "*" Then 'セルの型式とTextBox1の文字を比較
ListBox1.AddItem ""
For j = 2 To 6
ListBox1.List(ListBox1.ListCount - 1, j - 2) = .Cells(i, j)
Next j
End If
Next i
End With
End Sub
動作確認してみてください。
ちゃんと、全て表示されましたか?
まとめ
次回 リストボックス登録プログラムの説明などなど
コメント