Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterキー以外は終了
If KeyCode <> vbKeyReturn Then Exit Sub
MsgBox "ABC"
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterキー以外は終了
If KeyCode <> vbKeyReturn Then Exit Sub
'シートを初期化
Sheets("検索").Range("A3:H1000").ClearContents
'テキストボックスの値で、フィルタする
Sheets("DB").Range("A1").AutoFilter 2, "*" & TextBox1.Text & "*"
'フィルタ結果をコピー
Sheets("DB").Range("A1").CurrentRegion.Copy Sheets("検索").Range("A3")
'フィルタを解除
Sheets("DB").Range("A1").AutoFilter
End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterキー以外は終了
If KeyCode <> vbKeyReturn Then Exit Sub
'シートを初期化
Sheets("検索").Range("A4:H1000").ClearContents
'テキストボックスの値で、フィルタする
Sheets("DB").Range("A1").AutoFilter 2, "*" & TextBox1.Text & "*"
'フィルタ結果のデータ部分をコピー
With Sheets("DB").Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("検索").Range("A4")
End With
'フィルタを解除
Sheets("DB").Range("A1").AutoFilter
End Sub
見出しを入力しておきます。
見出しを入力しておく
検索値を入力して、Enterを押すことで、実行してみます。
検索値を入力して、Enterを押す
ユーザーフォームを表示します。
検索値を入力して、Enterキーを押してみます。
実行すると、データ部分のみを抽出できます。
データ部分のみ抽出できた
データ部分のみを抽出できました。
フィルタ結果がある場合に抽出
フィルタ結果がない場合にコピーしてしまうと、すべてのデータが抽出されてしまいます。
なので、フィルタ結果がある場合に、フィルタ結果のデータ部分をコピーします。
すべて抽出されちゃう場合をやってみます。
データベースにない値だと、すべてを抽出しちゃう
データベースにない値で、検索してみます。
すべてのデータが抽出されちゃいます。
すべてのデータが抽出されちゃいました。
対策として、フィルタ結果がある場合にのみ、コピーするようにします。
フィルタ結果がある場合にのみ抽出する
フィルタ結果がある場合にのみ抽出するVBAコードになります。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterキー以外は終了
If KeyCode <> vbKeyReturn Then Exit Sub
'シートを初期化
Sheets("検索").Range("A4:H1000").ClearContents
'テキストボックスの値で、フィルタする
Sheets("DB").Range("A1").AutoFilter 2, "*" & TextBox1.Text & "*"
'フィルタ結果がある場合
If WorksheetFunction.Subtotal(3, Sheets("DB").Range("A:A")) > 1 Then
'フィルタ結果のデータ部分をコピー
With Sheets("DB").Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("検索").Range("A4")
End With
End If
'フィルタを解除
Sheets("DB").Range("A1").AutoFilter
End Sub
フィルタ結果がない場合は、そのままにできます。
フィルタ結果がない場合は、そのままにできました。
検索値が空欄のときは処理を終了
テキストボックスが空欄の場合に検索してしまうと、すべてのデータを抽出してしまいます。
なので、テキストボックスの値が空欄の場合は、処理を終了するようにします。
空欄の場合で、検索してみます。
空欄で検索だと、すべてを抽出しちゃう
空欄で検索してみます。
すべてのデータが抽出されちゃいます。
すべてのデータが抽出されちゃいました。
対策として、空欄の場合は処理を終了するVBAコードを追加します。
空欄の場合は、処理を終了
検索値が空欄の場合は、処理を終了するVBAコードを追加します。
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
'Enterキー以外は終了
If KeyCode <> vbKeyReturn Then Exit Sub
'シートを初期化
Sheets("検索").Range("A4:H1000").ClearContents
'検索値が空欄の場合は、終了
If TextBox1.Value = "" Then Exit Sub
'テキストボックスの値で、フィルタする
Sheets("DB").Range("A1").AutoFilter 2, "*" & TextBox1.Text & "*"
'フィルタ結果がある場合
If WorksheetFunction.Subtotal(3, Sheets("DB").Range("A:A")) > 1 Then
'フィルタ結果のデータ部分をコピー
With Sheets("DB").Range("A1").CurrentRegion
.Resize(.Rows.Count - 1).Offset(1, 0).Copy Sheets("検索").Range("A4")
End With
End If
'フィルタを解除
Sheets("DB").Range("A1").AutoFilter
End Sub