例文を使って繰り返し業務を時短

【マクロ・VBA】データベースサーチ

エクセル、マクロ、VBAでシート間でデータベースの検索を行う VBA

データベースサーチ

Excelのシート間でデータベースの検索を行い、条件に合致する結果を抽出する

Sub データベースサーチ()

Dim Lastrow1  As Long, LastCol1 As Long
Dim sStr As String
Dim dataDB As Variant

'DB(検索するシート)を指定する
With ActiveSheet.Next
 Lastrow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
 LastCol1 = .Cells(1, Columns.Count).End(xlToLeft).Column
 dataDB = .Range(.Cells(1, 1), .Cells(Lastrow1, LastCol1)).Value
End With

'抽出するシートを指定する
With Worksheets("検索")
sStr = .Range("A2").Value

'検索結果削除
Lastrow1 = .Cells(.Rows.Count, 1).End(xlUp).Row
If Lastrow1 >= 4 Then
.Range(.Rows(4), Rows(Lastrow1)).Delete
End If

'項目取得
With .Range(.Cells(4, 1), Cells(4, UBound(dataDB, 2)))
.Value = dataDB
.Interior.Color = RGB(255, 255, 0)
End With

'検索結果
Lastrow1 = 4
For i = 2 To UBound(dataDB, 1)
    Dim memo As String: memo = ""
    For j = 1 To UBound(dataDB, 2)
        memo = memo & dataDB(i, j)
    Next j
    
    If memo Like "*" & sStr & "*" Then
        Lastrow1 = Lastrow1 + 1
    
        For j = 1 To UBound(dataDB, 2)
        .Cells(Lastrow1, j) = dataDB(i, j)
        Next j
    End If
Next i

'表の枠組み
.Range(.Cells(4, 1), Cells(Lastrow1, UBound(dataDB, 2))) _
.Borders.LineStyle = xlcontinous

End With

MsgBox "完了"
End Sub

解説

  • 3-5行目:変数の宣言
    • Lastrow1、LastCol1、dataDB、sStrの各変数を宣言しています。
    • Lastrow1は、データベースの最終行を格納する変数です。
    • LastCol1は、データベースの最終列を格納する変数です。
    • dataDBは、検索対象のデータベースを格納するための配列です。
    • sStrは、検索条件の文字列を格納する変数です。
  • 7-12行目:データベースの取得
    • With ActiveSheet.Nextの部分で、検索対象のデータベースが格納されているシートを指定しています。
    • Lastrow1とLastCol1を取得して、データベースの範囲を設定します。
    • dataDBにデータベースの範囲を格納します。
  • 14-27行目:検索結果の抽出
    • With Worksheets(“検索”)の部分で、検索結果を出力するシートを指定します。
    • sStrに検索条件の文字列を格納します。
    • 検索結果の削除を行います。
    • データベースの項目を取得して、検索結果シートに出力します。
    • データベースの各行を検索して、条件に合致する場合には検索結果シートに出力します。
  • 29-32行目:表の枠組み
    • 表の枠組みを設定しています。

コメント

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