Excel

Excel】VBAマクロでフィルタをかけコピー(可視セルのみ:別シートにペースト・貼り付け・転記・非表示セルの場合も)の方法【AutoFilter, SpecialCells, Copy, Paste】の方法

当サイトでは記事内に広告を含みます
いつも記事を読んでいただきありがとうございます!!! これからもお役に立てる各情報を発信していきますので、今後ともよろしくお願いします(^^)/

この記事では、VBAマクロでフィルタをかけコピー(可視セルのみ:別シートにペースト・貼り付け・転記・非表示セルの場合も)の方法【AutoFilter, SpecialCells, Copy, Paste】の方法について解説していきます。

ポイントとしては

`AutoFilter`、

`SpecialCells`、

`Copy`、

`Paste`

を使用することです。

なお、下記の解説では完全な初心者でもわかりやすいようにあえて変数名を少々変わった名称にしております。そのため、あなた自身がご活用の際には、ここを適切な(英語表記でしっくりくるものが一般的)ものに変更してご活用くださいね。

それでは詳しく見ていきましょう!

VBAマクロでフィルタをかけコピー(可視セルのみ:別シートにペースト:フィルタをかけ、B列の文字列が”散歩大好き”に一致する場合、可視セルのみをシート2に転記)

それではまず、フィルタをかけて特定の条件に一致するデータを別のシートにコピーする方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。

Sub FilterAndCopyVisibleCells()
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim lastRow As Long
    Dim filterRange As Range

    Set wsSource = ThisWorkbook.Sheets("Sheet1")
    Set wsDest = ThisWorkbook.Sheets("Sheet2")
    
    lastRow = wsSource.Cells(wsSource.Rows.Count, "B").End(xlUp).Row
    Set filterRange = wsSource.Range("A1:B" & lastRow)
    
    ' フィルタをかける
    filterRange.AutoFilter Field:=2, Criteria1:="散歩大好き"
    
    ' 可視セルのみをコピー
    filterRange.SpecialCells(xlCellTypeVisible).Copy Destination:=wsDest.Range("A1")
    
    ' フィルタを解除
    wsSource.AutoFilterMode = False
End Sub

コードのAlt+F8を押し、マクロ選択画面でFilterAndCopyVisibleCells関数を実行します。

このコードは、シート1のB列をフィルタリングし、”散歩大好き”に一致する行のデータをシート2にコピーします。

最初に作業対象のシートを指定し(wsSource、wsDest)、最終行を求めて範囲(filterRange)を設定します。

AutoFilterメソッドで条件に合致するデータをフィルタリングし、SpecialCellsメソッドを使用して可視セルのみを選択、Copyメソッドでコピーし、Destinationを指定してシート2に貼り付けます。

最後にAutoFilterModeをFalseに設定してフィルタを解除します。

 

VBAマクロでフィルタをかけ非表示セルもコピー(別シートに貼り付け:フィルタがかかっているシート1にて非表示セルも含めて、別シートに転記)

続いては、フィルタがかかっている状態で非表示セルを含めてデータをコピーする方法について解説していきます。

Alt + F11にてVBE画面を開いて、以下コードをコピペしましょう。

Sub CopyIncludingHiddenCells()
    Dim wsSource As Worksheet
    Dim wsDest As Worksheet
    Dim copyRange As Range
    Dim cell As Range

    Set wsSource = ThisWorkbook.Sheets("Sheet1")
    Set wsDest = ThisWorkbook.Sheets("Sheet3")
    Set copyRange = wsSource.UsedRange

    wsDest.Cells.ClearContents

    For Each cell In copyRange
        If Not cell.EntireRow.Hidden Then
            cell.Copy Destination:=wsDest.Cells(cell.Row, cell.Column)
        End If
    Next cell
End Sub

コードのAlt+F8を押し、マクロ選択画面でCopyIncludingHiddenCells関数を実行します。

このコードでは、シート1の使用済み範囲(フィルタによって非表示になったものも含めデータがある部分すべて)をループし、各セルが非表示でない(こちらは再表示・非表示の設定の方)場合に限りシート3にコピーします。

最初にシートを設定し(wsSource、wsDest)、コピー範囲(copyRange)を定義します。

その後、シート3の内容をクリアし、シート1の各セルをループ処理します。

このループ内で、もしセルの行が非表示(Hidden)でなければ、そのセルをシート3の同じ位置にコピーします。

これにより、フィルタがかかっているシートでもフィルタでの非表示セルを含めた全データの転記が可能になります。

 

まとめ VBAマクロでフィルタをかけコピー(別シートにペースト・貼り付け・転記・非表示セルの場合も)の方法【AutoFilter, SpecialCells, Copy, Paste】の方法

この記事では、VBAマクロでフィルタをかけコピー(可視セルのみ:別シートにペースト・貼り付け・転記・非表示セルの場合も)の方法【AutoFilter, SpecialCells, Copy, Paste】の方法について確認しました。

マクロをマスターして、さらに快適に過ごしていきましょう!!