【Excelマクロ】特定の文字列を含む行を抽出して別シートにコピー

データを効率的に抽出したい

Excelで作業していると、「特定の文字列を含む行だけを抜き出して、新しいシートにまとめたい」という場面が出てきます。

たとえば、顧客リストの中から「東京都」という文字を含む行を抜き出して、別のシートにコピーする作業です。手動でやろうとすると、膨大なデータがあった場合にはとても時間がかかります。

しかし、VBAを使うと、この作業を自動化して、数秒で終わらせることができます。

VBAを使って特定の文字列を含む行を抽出し、別のシートにコピーする方法について解説します。

特定の文字列を含む行を抽出する基本的なコード

最初に、基本となるコードを紹介します。今回は「東京都」という文字列を含む行を、新しいシートにコピーする例を作成します。

コード例

Sub ContainingText()

    Dim sourceWs As Worksheet
    Dim targetWs As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim searchText As String

    ' 元のシートとコピー先のシートを設定
    Set sourceWs = ThisWorkbook.Sheets("Sheet1")
    Set targetWs = ThisWorkbook.Sheets("Sheet2")

    ' 検索する文字列
    searchText = "東京都"

    ' 元のシートの最終行を取得
    lastRow = sourceWs.Cells(sourceWs.Rows.Count, 1).End(xlUp).Row

    ' 対象シートの内容をクリア
    targetWs.Cells.Clear

    ' 最初の行にヘッダーをコピー
    sourceWs.Rows(1).Copy targetWs.Rows(1)

    ' 行ごとに検索して、文字列を含む行をコピー
    For i = 2 To lastRow
        If InStr(sourceWs.Cells(i, 1).Value, searchText) > 0 Then
            sourceWs.Rows(i).Copy Destination:= _
       targetWs.Rows(targetWs.Cells(targetWs.Rows.Count, 1).End(xlUp).Row + 1)
        End If
    Next i

    MsgBox "処理が完了しました!"

End Sub
  • sourceWstargetWs で、それぞれ元のシートコピー先のシートを指定しています。
  • searchText に「東京都」を指定し、この文字列を含む行を検索します。
  • InStr 関数を使って、対象セルに文字列が含まれているかを調べています。
  • 見つかった行は、新しいシート(Sheet2)にコピーされます。
  • 最後に、処理完了のメッセージを表示します。

複数の文字列を検索する場合の応用

次に、1つではなく複数の文字列を検索したい場合を考えます。

たとえば、「東京都」か「大阪府」を含む行を抽出したいときのコードです。

コード例(複数文字列)

Sub MultipleTexts()

    Dim sws As Worksheet
    Dim tws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim stxt1 As String
    Dim stxt2 As String

    ' 元のシートとコピー先のシートを設定
    Set sws = ThisWorkbook.Sheets("Sheet1")
    Set tws = ThisWorkbook.Sheets("Sheet2")

    ' 検索する文字列
    stxt1 = "東京都"
    stxt2 = "大阪府"

    ' 元のシートの最終行を取得
    lastRow = sws.Cells(sws.Rows.Count, 1).End(xlUp).Row

    ' 対象シートの内容をクリア
    tws.Cells.Clear

    ' 最初の行にヘッダーをコピー
    sws.Rows(1).Copy tws.Rows(1)

    ' 行ごとに検索して、文字列を含む行をコピー
    For i = 2 To lastRow
        If InStr(sws.Cells(i, 1).Value, stxt1) > 0 Or _
        InStr(sws.Cells(i, 1).Value, stxt2) > 0 Then
            sws.Rows(i).Copy tws.Rows(tws.Cells(tws.Rows.Count, 1).End(xlUp).Row + 1)
        End If
    Next i

    MsgBox "処理が完了しました!"

End Sub
  • stxt1stxt2 に「東京都」と「大阪府」を指定しています。
  • InStr 関数を使って、いずれかの文字列をOR条件で検索しています。
  • どちらかの文字列が含まれている行は、新しいシート(Sheet2)にコピーされます。

実装するメリット

特定の文字列を含む行を別シートに抽出するマクロを実装することで、次のようなメリットがあります。

主なメリット

  • 手動での作業がなくなる
    例えば数百行、数千行のデータがある場合、手動で「東京都」を含む行を探すのは大変です。VBAで自動化することで、一瞬で処理できます。
  • 間違いを防げる
    複数のデータをチェックしながらコピーする際に、人為的なミスが発生することがありますが、VBAで処理すればその心配はありません。
  • データの整理が簡単になる
    条件にあった行だけを別シートにコピーすれば、整理や分析がしやすくなります。
  • レポート作成がスムーズになる
    特定の条件に合ったデータだけを抽出し、そのままレポートに利用できるので、仕事の効率が大幅に向上します。

まとめ

特定の文字列を含む行を抽出して別のシートにコピーするマクロを使うことで、膨大なデータを扱う際にも作業が簡単に、迅速に、正確に行えるようになります。

今回は「東京都」や「大阪府」といった条件で抽出する例を紹介しましたが、条件を変更することで、さまざまなデータ抽出が可能です。

ぜひ、このマクロを活用して、業務の効率化を実現してください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール