Like演算子を使って部品の検索フォームを作っていく 【VBA在庫管理#26】

Excel VBA 部品在庫管理アイキャッチ画像部品在庫管理

女性が目を合わせてくれない、どうもoReです。

今回は、部品の検索フォームを作っていきます。

部品検索フォーム作成

新たにユーザーフォームを挿入して、
TextBox1ListBox1を配置しましょう。

 

部品検索フォームのオブジェクト名は、Kensakuとしますか。

  ↓こんな感じ

部品検索フォーム挿入

 

そうしたら、Mainフォームに部品検索フォームを表示させる
コマンドボタンを配置しましょう。

部品検索コマンドボタン挿入

 

配置したコマンドボタンに、
部品検索フォームを表示させるコードを書きます。

'Kensaku表示
Private Sub CommandButton5_Click()
  Kensaku.Show
End Sub

動作確認しましょう。
ちゃんと、部品検索フォームが表示されますか?

oReのぞき見

部品検索フォーム初期化

リストボックスに表示するものは

・部品管理№
・バーコード
・メーカー
・品名
・型式

としましょう。

 

リストボックスの列数は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に入力した際、
入力した文字列のようなものを全てリストボックスに表示させたい。

 

まず、トリガーを作りましょう。

テキストボックス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

 

動作確認してみてください。
ちゃんと、全て表示されましたか?

oReのぞき見

まとめ

Like演算子 *(アスタリスク)で囲んだ、0文字以上の文字と一致したらTrueを返す
TextBox1_Change() テキストボックス1が変化した時に処理する

oReイケメン?

次回 リストボックス登録プログラムの説明などなど

ExcelVBA部品在庫管理【目次】へ戻る

コメント

タイトルとURLをコピーしました