Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterキー以外は、終了
If KeyCode <> vbKeyReturn Then Exit Sub
ListBox1.Clear 'リストボックスをクリア
ListBox1.ColumnCount = 2 '2列にする
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
'検索値を含む場合
If InStr(Cells(i, "B"), TextBox1.Value) > 0 Then
With ListBox1
.AddItem "" '行を追加
.List(.ListCount - 1, 0) = Cells(i, "A") 'Noを取得
.List(.ListCount - 1, 1) = Cells(i, "B") '商品を取得
End With
End If
Next
'検索値が見つかった場合
If ListBox1.ListCount > 0 Then
ListBox1.SetFocus 'リストボックスをフォーカス
ListBox1.ListIndex = 0 '0行目を選択'見つからなかった場合
Else
'テキストボックスをフォーカスしたままにする
KeyCode = 0
End If
End Sub
検索値を入力して、Enterを押します。
検索値を入力して、Enter
データベースから値を検索できます。
データベースから値を検索できた
データベースから値を検索できました。
データベースの値を取得
データベースの値を取得する機能を追加していきます。
データベースの値を取得
こちらのリストボックスにVBAコードを登録します。
登録するVBAコードです。
キーボードを入力したタイミングで実行する「KeyDown」イベントを使います。
Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode <> vbKeyReturn Then Exit Sub 'Enterキー以外は終了
If ListBox1.ListIndex = -1 Then Exit Sub '選択されていない場合は終了
Dim A
With ListBox1
'選択行のNoを取得
A = Val(.List(.ListIndex, 0))
End With
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
'Noが一致した場合
If Cells(i, "A") = A Then
TextBox2.Value = A 'Noを取得
TextBox3.Value = Cells(i, "B") '商品を取得
TextBox4.Value = Cells(i, "C") '価格を取得
TextBox5.Value = Cells(i, "D") '数量を取得
End If
Next
End Sub
リストボックスの値を選択して、Enterを押します。
値を選択して、Enter
データベースから値を取得できます。
データベースから値を取得できた
データベースから値を取得できました。
データベースの値を変更
データベースの値を変更する機能を追加していきます。
データベースの値を変更する
こちらのボタンにVBAコードを登録します。
登録するVBAコードは、こちらになります。
Private Sub CommandButton1_Click()
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
'同じNoの場合
If Cells(i, "A") = Val(TextBox2.Value) Then
Cells(i, "B") = TextBox3.Value '商品を入力
Cells(i, "C") = TextBox4.Value '価格を入力
Cells(i, "D") = TextBox5.Value '数量を入力
End If
Next
End Sub
価格を変更して、変更ボタンをクリックしてみます。
価格を変更して、変更ボタンをクリック
価格の値を変更してみます。
変更のボタンをクリックします。
これで、ユーザーフォームから、データベースの値を変更できます。
データベースの値を変更できた
ユーザーフォームから、データベースの値を変更できました。
ユーザーフォームの値をクリア
ユーザーフォームの値をクリアする機能を追加していきます。
ユーザーフォームの値をクリア
こちらのボタンにVBAコードを登録します。
登録するVBAコードは次のようになります。
Private Sub CommandButton4_Click()
'テキストボックスとリストボックスをクリア
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
ListBox1.Clear
End Sub
クリアボタンをクリックしてみます。
クリアボタンをクリック
ユーザーフォームの値をクリアできます。
ユーザーフォームの値をクリアできた
ユーザーフォームの値をクリアできました。
データベースの値を新規登録
データベースの値を新規登録する機能を追加してみます。
データベースの値を新規登録
こちらのボタンにVBAコードを登録します。
登録するVBAコードは、次のようになります。
Private Sub CommandButton2_Click()
'最終行
With Cells(Rows.Count, "A").End(xlUp)
.Offset(1, 0) = WorksheetFunction.Max(Range("A:A")) + 1 '新規でNoを入力
.Offset(1, 1) = TextBox3.Value '商品を入力
.Offset(1, 2) = TextBox4.Value '価格を入力
.Offset(1, 3) = TextBox5.Value '数量を入力
End With
'テキストボックスとリストボックスはクリア
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
ListBox1.Clear
End Sub
値を入力して、新規登録のボタンをクリックします。
値を入力して、新規登録のボタンをクリック
テキストボックスに値を入力します。
新規登録のボタンをクリックします。
データベースに新規で登録して、ユーザーフォームの値はクリアできます。
データベースに新規登録できた
データベースに新規で登録して、ユーザーフォームの値はクリアできました。
データベースの値を削除
データベースの値を削除する機能を追加していきます。
データベースの値を削除
こちらのボタンにVBAコードを登録します。
登録するVBAコードは、次のようになります。
Private Sub CommandButton3_Click()
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
'同じNoの場合
If Cells(i, "A") = Val(TextBox2.Value) Then
Rows(i).Delete '行を削除
End If
Next
'テキストボックスとリストボックスをクリア
TextBox1.Value = ""
TextBox2.Value = ""
TextBox3.Value = ""
TextBox4.Value = ""
TextBox5.Value = ""
ListBox1.Clear
End Sub