【VBA】可視セル(フィルタ結果)を配列を使って高速に転記する方法
日々の業務で大量のデータを手作業でフィルタ結果だけを別のシートに移動させることは大変な労力と時間を要します。しかし、この記事ではExcel VBAを使ってその作業を高速化し、効率的に処理する方法を紹介します。
サンプルコード
VBA
Option Explicit
Sub CopyVisibleCells()
Dim wsSource As Worksheet, wsTarget As Worksheet
Dim lastRowSrc As Long, lastColSrc As Integer
Dim data() As Variant
Dim i As Long, j As Integer
' ソースとターゲットシートを指定
Set wsSource = ThisWorkbook.Sheets("Sheet1")
Set wsTarget = ThisWorkbook.Sheets("Sheet2")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
' ソースシートの最終行と最終列を取得
lastRowSrc = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
lastColSrc = wsSource.Cells(1, wsSource.Columns.Count).End(xlToLeft).Column
' 配列にデータを読み込む
data = wsSource.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
' ターゲットシートの最初の行を取得
Dim firstRowTarget As Long
firstRowTarget = wsTarget.Cells(wsTarget.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
' 配列からデータをターゲットシートに書き込む
For i = LBound(data) To UBound(data)
For j = LBound(data, 2) To UBound(data, 2)
wsTarget.Cells(firstRowTarget + i - 1, j).Value = data(i, j)
Next j
Next i
Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Subよくある質問
Q 元に戻せますか?
A.
VBAの実行結果は「元に戻す」が効きません。必ずバックアップを取ってから実行してください。
Q エラーが出たら?
A.
シート名や列番号が正しいか確認してください。