Excel VBAを利用した業務効率化: 特定の文字列を含むデータをフィルタリングする方法

Excel VBAを使った業務効率化の中で、特定の文字列を含むデータをフィルタリングする処理は非常に一般的です。この記事では、初心者にもわかりやすいようにVBAコードでこのタスクを実現する方法とその応用例を説明します。

目次

Excel VBAの基本

Excel VBA(Visual Basic for Applications)は、Microsoft Excelに組み込まれたプログラミング言語です。これを用いると、単純作業の自動化だけでなく、高度なデータ分析やレポート作成も可能になります。

そもそも、どこにVBAコードを書いて、どう実行すれば良いのか分からない場合は、以下の記事をご参照ください。

基本的なフィルタリングコード

Excel VBAで特定の文字列を含むデータをフィルタリングする基本的なコードを以下に示します。


Sub BasicFilter()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("A1:C10").AutoFilter Field:=1, Criteria1:="*特定の文字列*"
End Sub

コードの解説

このコードでは、`Sheet1`の`A1:C10`範囲のデータをフィルタリングしています。`Criteria1:=”*特定の文字列*”` で、1列目に特定の文字列を含む行だけがフィルタリングされます。

補足:ワイルドカードの使用

上記のコードでは、アスタリスク(*)がワイルドカードとして使われています。これにより、”特定の文字列”が前後に何か文字があってもマッチします。

応用例

特定の文字列をフィルタリングする基本のコードを応用して、さまざまなシナリオで使用する方法を考察します。

例1: 複数のシートでフィルタリング


Sub MultiSheetFilter()
    Dim wsNames As Variant
    Dim ws As Worksheet
    wsNames = Array("Sheet1", "Sheet2", "Sheet3")
    For Each ws In ThisWorkbook.Sheets(wsNames)
        ws.Range("A1:C10").AutoFilter Field:=1, Criteria1:="*特定の文字列*"
    Next ws
End Sub

例2: 複数の条件でフィルタリング


Sub MultiCriteriaFilter()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("A1:C10").AutoFilter Field:=1, Criteria1:="*特定の文字列*", Operator:=xlOr, Criteria2:="*別の文字列*"
End Sub

例3: 日付範囲でフィルタリング


Sub DateRangeFilter()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("A1:C10").AutoFilter Field:=2, Criteria1:=">=2023/01/01", Operator:=xlAnd, Criteria2:="<=2023/12/31"
End Sub

例4: フィルタリング後のデータを新しいシートにコピー


Sub CopyFilteredData()
    Dim ws As Worksheet, newWs As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    Set newWs = ThisWorkbook.Sheets.Add
    ws.Range("A1:C10").AutoFilter Field:=1, Criteria1:="*特定の文字列*"
    ws.Range("A1:C10").SpecialCells(xlCellTypeVisible).Copy Destination:=newWs.Range("A1")
End Sub

例5: フィルタリングされたデータをCSVで出力


Sub ExportFilteredDataToCSV()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Range("A1:C10").AutoFilter Field:=1, Criteria1:="*特定の文字列*"
    ws.Range("A1:C10").SpecialCells(xlCellTypeVisible).Copy
    Workbooks.Add
    ActiveSheet.Paste
    ActiveWorkbook.SaveAs Filename:="filtered_data.csv", FileFormat:=xlCSV
    ActiveWorkbook.Close
End Sub

まとめ

Excel VBAを使って特定の文字列を含むデータを効率よくフィルタリングする方法について詳しく見てきました。基本的なコードから応用例まで、多様なケースでの使用方法を考えました。これらの知識を使って、日々の業務をより効率的にしてください。

コメント

コメントする

目次