Excel VBAを使えば、ユーザーフォームのテキストボックスに入力した複数のキーワードをもとに、Sheet1のデータを検索し、条件に合う行だけを新しいシートに抽出することが可能です。キーワードの数が変動しても対応できる柔軟な方法をご紹介します。
処理の基本の流れ
この処理では主に以下のステップで実装します。
- ユーザーフォームのテキストボックスからキーワード文字列を取得
- 全角スペースで区切り、配列としてキーワードを準備
- Sheet1の各行をループし、すべてのキーワードが含まれるかチェック
- 条件を満たす行を新しいシートにコピー
サンプルVBAコード
Private Sub CommandButton1_Click()
Dim wsSrc As Worksheet, wsDest As Worksheet
Dim lastRow As Long, destRow As Long
Dim keywords() As String, i As Long, j As Long
Dim textBoxValue As String, rowMatches As Boolean
' 元データのシート
Set wsSrc = ThisWorkbook.Sheets("Sheet1")
' 新しいシートを作成
Set wsDest = ThisWorkbook.Sheets.Add
wsDest.Name = "抽出結果"
' キーワード取得(全角スペースで分割)
textBoxValue = Me.TextBox1.Value
keywords = Split(textBoxValue, " ") ' 全角スペース
' 最終行取得
lastRow = wsSrc.Cells(wsSrc.Rows.Count, "A").End(xlUp).Row
destRow = 1
' ヘッダーをコピー(必要なら)
wsSrc.Range("A1:E1").Copy wsDest.Range("A1")
destRow = destRow + 1
' データ行をループ
For i = 2 To lastRow
rowMatches = True
' キーワードごとに行内のA〜E列をチェック
For j = LBound(keywords) To UBound(keywords)
If Application.WorksheetFunction.CountIf(wsSrc.Range("A" & i & ":E" & i), "*" & keywords(j) & "*") = 0 Then
rowMatches = False
Exit For
End If
Next j
' 条件を満たす場合、コピー
If rowMatches Then
wsSrc.Range("A" & i & ":E" & i).Copy wsDest.Range("A" & destRow)
destRow = destRow + 1
End If
Next i
MsgBox "抽出完了!"
End Sub
ポイントの解説
・Split関数で全角スペースを区切り文字として使用しているため、複数キーワードの数に応じて自動で配列化できます。
・CountIf関数を使い、行内のA〜E列にキーワードが含まれるかをチェックしています。すべてのキーワードが含まれる場合のみコピーされます。
・新しいシートに抽出する際は、ヘッダー行をコピーしておくと見やすくなります。
まとめ
このVBAコードを利用すれば、ユーザーフォームから入力した任意の数のキーワードでSheet1を検索し、すべてのキーワードが含まれる行だけを新しいシートに抽出できます。キーワードの増減にも柔軟に対応可能で、初心者でも比較的簡単に実装できる方法です。


コメント