【ExcelVBA】オートフィルタで抽出したデータをコピー&ペースト
目次
テスト対象のテーブル

テスト対象テーブルを使いたい場合は、↓テーブルをコピーしてエクセルの A1 に貼り付けてください。
| 商品名 | 個数 |
|---|---|
| りんご | 4 |
| みかん | 3 |
| めろん | 5 |
| いちご | 2 |
| みかん | 1 |
抽出したデータを他シートへコピー
Sub Sample()
Dim FilterWS As String
Dim TargetWS As String
FilterWS = "Sheet1"
TargetWS = "Sheet2"
ThisWorkbook.Worksheets(FilterWS).Range("A1:B1").AutoFilter _
Field:=1, _
Criteria1:="みかん"
With ThisWorkbook
.Worksheets(FilterWS).Cells(1, 1).CurrentRegion.Copy
.Worksheets(TargetWS).Cells(1, 1).PasteSpecial Paste:=xlPasteColumnWidths '列幅貼り付け
.Worksheets(TargetWS).Cells(1, 1).PasteSpecial Paste:=xlPasteAll 'すべて貼り付け
End With
End Sub
※xlPasteAll は列幅を含まないため、xlPasteColumnWidths で列幅を事前に貼り付けしています。結果(Sheet2)

実行前のテーブル(Sheet1)

抽出したデータを他シートへコピー(汎用例)
「個数1 の みかん」および「個数4 の りんご」の条件で抽出して他シートへ貼り付けするサンプルです。
Sub Main()
Dim TableWS As String, PasteWS As String
TableWS = "Sheet1" 'テーブルシート
PasteWS = "Sheet2" '貼り付け先シート
ThisWorkbook.Sheets(PasteWS).Cells.Clear
Call HeaderPaste(TableWS, PasteWS)
Call DataPaste(TableWS, PasteWS, "みかん", "=1")
Call DataPaste(TableWS, PasteWS, "りんご", "=4")
End Sub
Sub HeaderPaste(TableWS, PasteWS)
ThisWorkbook.Sheets(TableWS).Range("A1:B1").Copy
ThisWorkbook.Sheets(PasteWS).Range("A1:B1").PasteSpecial Paste:=xlPasteAll
End Sub
Sub DataPaste(TableWS, PasteWS, V1, V2)
ThisWorkbook.Sheets(TableWS).Cells(1, 1).AutoFilter _
Field:=1, _
Criteria1:=V1
ThisWorkbook.Sheets(TableWS).Cells(1, 1).AutoFilter _
Field:=2, _
Criteria1:=V2
ThisWorkbook.Sheets(TableWS).Cells(1, 1).CurrentRegion.Offset(1).Copy
With ThisWorkbook.Sheets(PasteWS).Cells(Rows.Count, 1).End(xlUp).Offset(1, 0)
.PasteSpecial Paste:=xlPasteColumnWidths '列幅
.PasteSpecial Paste:=xlPasteAll 'すべて
End With
ThisWorkbook.Sheets(TableWS).AutoFilterMode = False
End Sub
結果(Sheet2)

実行前のテーブル(Sheet1)

オートフィルタでデータ抽出のあれこれを知りたい場合は、こちらです。
PasteSpecialメソッドの説明
オプション一覧
単純な貼り付け作業のみをさせたいのであれば、Paste オプションだけで足ります。| オプション | 説明 |
|---|---|
| Paste | XlPasteAllやxlPasteValuesなど、貼り付ける範囲の部分を指定します。 |
| Operation | XlPasteSpecialOperationAddなどの貼り付け操作。 |
| SkipBlanks | Trueを指定すると、クリップボードの範囲内の空白セルが貼り付け先の範囲に貼り付けられません。 既定値は False です。 |
| Transpose | Trueを指定すると、行と列が貼り付けられます。 既定値は False です。 |
With Worksheets("Sheet1")
.Range("C1:C5").Copy
.Range("D1:D5").PasteSpecial Operation:=xlPasteSpecialOperationAdd
End With
Pasteオプションの定数
値のみを貼り付けしたい場合は、xlPasteValues を使い、書式も一緒に貼り付けたしたい場合は、xlPasteAll を使います。その他もろもろの定数一覧は下になります。
| 定数 | 説明 |
|---|---|
| xlPasteAll(既定) | すべて |
| xlPasteFormulas | 数式 |
| xlPasteValues | 値 |
| xlPasteFormats | 書式 |
| xlPasteComments | コメント |
| xlPasteValidation | 入力規則 |
| xlPasteAllExceptBorders | 罫線を除く全て |
| xlPasteColumnWidths | 列幅 |
| xlPasteFormulasAndNumberFormats | 数式と数値の書式 |
| xlPasteValuesAndNumberFormats | 値と数値の書式 |
| xlPasteAllUsingSourceTheme | コピー元のテーマを使用してすべて貼り付け |
| xlPasteAllMergingConditionalFormats | すべての結合されている条件付き書式 |
Operationオプションの定数
| 名前 | 説明 |
|---|---|
| xlPasteSpecialOperationNone(既定) | 貼り付け操作で計算は行われません。 |
| xlPasteSpecialOperationAdd | コピーしたデータは、貼付先セルの値に加算します。 |
| xlPasteSpecialOperationSubtract | コピーしたデータは、貼付先セルの値を減算します。 |
| xlPasteSpecialOperationMultiply | コピーしたデータで、貼付先セルの値を乗算します。 |
| xlPasteSpecialOperationDivide | コピーしたデータで、貼付先セルの値を除算します。 |




ディスカッション
コメント一覧
まだ、コメントがありません