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

【マクロ・VBA】オートフィルタで抽出した表を右隣りのシートの文末に貼り付ける

エクセル、マクロ、VBAでオートフィルタで抽出した表を右隣りのシートの文末に転記する方法 VBA

オートフィルタ/可視セル/右隣りシート/文末に貼り付け

現在のアクティブシートの特定の列(列A)にフィルターをかけ、そのフィルターで表示される行を別のシートにコピーして転記し、元のシートから削除する方法

Sub オートフィルタ_可視セル_別シート_右隣り_文末転記()

Dim ws1 As Worksheet
Set ws1 = ThisWorkbook.ActiveSheet
Dim LastRow1 As Long
LastRow1 = ws1.Cells(Rows.Count, 1).End(xlUp).Row
Dim LastCol1 As Long
LastCol1 = ws1.Cells(2, Columns.Count).End(xlToLeft).Column
Dim MyCell As Range
Set MyCell = ws1.Range("A1", Cells(LastRow1, LastCol1))

'オートフィルタ
MyCell.Select
MyCell.AutoFilter 1, "*埼玉*"

Dim ws2 As Worksheet
Set ws2 = ThisWorkbook.ActiveSheet.Next
Dim LastRow2 As Long
LastRow2 = ws2.Cells(Rows.Count, 1).End(xlUp).Row
Set rng = ws2.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
 
MyCell.SpecialCells(xlCellTypeVisible).Copy _
Destination:=rng
rng.EntireRow.Delete Shift:=xlUp


Application.CutCopyMode = False
ws1.AutoFilterMode = False
        
ws1.Range("A1").Select
ActiveWorkbook.Save
    
MsgBox "完了" & vbLf & "基=" & LastRow1 & vbLf & "先=" & LastRow2 & vbLf & "Copy後=" & LastRow1 + LastRow2

End Sub

解説

  1. ws1には、現在アクティブなシートが代入されます。
  2. LastRow1には、列Aで最終行の行番号が代入され、LastCol1には最後の列の列番号が代入されます。
  3. MyCellには、シートws1内のA1セルから最後の行・列までを含む範囲が代入されます。
  4. MyCellの1列目をフィルターし、「埼玉」を含む行のみを表示します。
  5. ws2には、現在アクティブなシートの次のシートが代入されます。
  6. LastRow2には、ws2内で最後の行の行番号が代入され、rngには、ws2内で次に書き込むべきセルが代入されます。
  7. フィルターされた行をコピーして、rngに貼り付けます。
  8. MyCellのフィルターで表示された行をws2に転記した後、元のシートからその行を削除します。
  9. フィルターをクリアします。
  10. 現在のブックを保存します。
  11. 完了メッセージを表示します。基は元のシートの最終行、先は転記先シートの最終行、Copy後は元のシートと転記先シートの行数の合計です。

ダミーデータのダウンロード

コメント

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