(7)商品マスター検索
(a)商品コード入力
商品コードを入力すれば商品名が表示するプログラムを作ります。
・商品コード入力の判断は検索シートの2列目が変化した時の行Target.Rowを取得します。
・検索はsyouhinkensakuf関数を作って使っています。
・検索方法は条件付き繰り返しを使います。
シートモジュールに記述
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Long
If Target.Column = 1 Then
x = Target.Row
Cells(x, 2) = syouhinkensakuf(Cells(x, 1))
End If
End Sub
Function syouhinkensakuf(scode As Long) As String
Dim lastrow As Long
Dim i As Long
lastrow = Worksheets("商品名").Cells(Rows.Count, 1).End(xlUp).Row
For i = 2 To lastrow
If scode = Worksheets("商品名").Cells(i, 1) Then
syouhinkensakuf = Worksheets("商品名").Cells(i, 2)
Exit Function
End If
Next
syouhinkensakuf = ""
MsgBox "商品コードがみつかりません"
End Function
(b)リストボックスから検索
検索ボタンをクリックすると商品検索のリストボックスが表示され該当する商品をダブルクリックするかOKボタンをクリックするとアクティブセル(選択しているセル)
に商品コードと商品名が代入されます。
・商品名を代入するときはActiveCellの1列右側ですのでOffset(0, 1)を使っています。
・リストボックスの2列目の取得はlstSyouhin.List(lstSyouhin.ListIndex, 1)を使います。
フォームモジュールに記述
Private Sub cmdOk_Click()
ActiveCell = lstSyouhin.Text
ActiveCell.Offset(0, 1) = lstSyouhin.List(lstSyouhin.ListIndex, 1)
Unload Me
End Sub
Private Sub lstSyouhin_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
ActiveCell = lstSyouhin.Text
ActiveCell.Offset(0, 1) = lstSyouhin.List(lstSyouhin.ListIndex, 1)
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim lastrow As Long
Dim i As Long
lastrow = Worksheets("商品名").Cells(Rows.Count, 1).End(xlUp).Row
lstSyouhin.ColumnCount = 2
For i = 2 To lastrow
With lstSyouhin
.AddItem
.List(i - 2, 0) = Worksheets("商品名").Cells(i, 1)
.List(i - 2, 1) = Worksheets("商品名").Cells(i, 2)
End With
Next
End Sub
Private Sub cmdCancel_Click()
Unload Me
End Sub
標準モジュールに記述
Sub kensaku()
frmSyouhin.Show
End Sub