大体でIT

-ちょっと使えるネタを紹介-

大体でIT

Excel VBAで、テーブルをコピーするには「.Copy」を使います。テーブルや、行・列単位、特定の行をコピーする方法について、解説していきます。VBAでのテーブル操作をマスターしていきましょう。

はじめに

この記事では、テーブルをコピーする方法について、ご紹介します。

テーブルをコピーしたい場合は、「.Copy」を使います。

「特定の行のみ」コピーしたい場合は、オートフィルタでフィルタして、「SpecialCells」を使って、表示セルのみをコピーするとできます。

「書式なし」でコピーしたい場合は、一旦、テーブルのスタイルを削除してから、コピーするとできます。

VBAでのテーブル操作をマスターしていきましょう。

では、テーブルをコピーする方法について、解説していきます。

この記事を読むメリット

  • テーブルをコピーする方法がわかります

目次から見たい項目へ移動すると便利ですよ。

目次

テーブルをコピーする

テーブルをコピーしてみます。

テーブルをコピー

やりたい内容は、「テーブルをコピーしたい」、ということになります。

テーブルをコピーしたい

テーブルをコピーしてみます

テーブルをコピーするVBAコードは、次のようになります。

テーブルをコピー

「ListObjects」を使う場合は、次のようになります。

Sub TEST1()
    
    '見出しを含めてテーブルをコピー
    ActiveSheet.ListObjects("テーブル1").Range.Copy Range("F2")
    
End Sub

「構造化参照」で、テーブルをコピーする場合は、次のようになります。

Sub TEST2()
    
    '見出しを含めてテーブルをコピー
    Range("テーブル1[#ALL]").Copy Range("F2")
    
End Sub

実行すると、テーブルをコピーできます。

テーブルをコピーできた

テーブルをコピーできました

テーブルをコピーできました。

データの範囲をコピー

次は、「データの範囲」をコピーしてみます。

テーブルのデータ範囲をコピーしたい

テーブルのデータ範囲をコピーしてみます

テーブルのデータ範囲をコピーするVBAコードは、次のようになります。

データの範囲をコピー

「ListObjects」を使った場合は、次のようになります。

Sub TEST3()
    
    'データの範囲をコピー
    ActiveSheet.ListObjects("テーブル1").DataBodyRange.Copy Range("F3")
    
End Sub

「構造化参照」を使う場合は、次のようになります。

Sub TEST4()
    
    'データの範囲をコピー
    Range("テーブル1").Copy Range("F3")
    
End Sub

実行すると、テーブルのデータ範囲をコピーできます。

テーブルのデータ範囲をコピーできた

テーブルのデータ範囲をコピーできました

テーブルのデータ範囲をコピーできました。

テーブルを行、列単位でコピーする

次は、テーブルを行もしくは列単位でコピーしてみます。

2行目をコピー

テーブルの2行目をコピーしてみます。

テーブルの2行目をコピーしたい

テーブルの2行目をコピーしてみます

テーブルの2行目をコピーするVBAコードは、次のようになります。

2行目をコピー

「ListObjects」を使う場合は、次のようなります。

Sub TEST5()
    
    '「2」行目をコピー
    ActiveSheet.ListObjects("テーブル1").ListRows(2).Range.Copy Range("F3")
    
End Sub

「構造化参照」を使う場合は、つぎのようになります。

Sub TEST6()
    
    '「2」行目をコピー
    Range("テーブル1").Rows(2).Copy Range("F3")
    
End Sub

実行すると、テーブルの2行目をコピーできます。

テーブルの2行目をコピーできた

テーブルの2行目をコピーできました

テーブルの2行目をコピーできました。

1列目をコピー

次は、テーブルの1列目をコピーしてみます。

1列目をコピーしたい

テーブルの1列目をコピーしてみます

テーブルの1列目をコピーするVBAコードは、次のようになります。

1列目をコピー

「ListObjects」を使う場合は、次のようになります。

Sub TEST7()
    
    '「1」列目をコピー
    ActiveSheet.ListObjects("テーブル1").ListColumns(1).Range.Copy Range("F2")
    'もしくは
    ActiveSheet.ListObjects("テーブル1").ListColumns("名前").Range.Copy Range("F2")
        
End Sub

「構造化参照」を使う場合は、次のようなります。

Sub TEST8()
    
    '「1」列目をコピー
    Range("テーブル1[[#ALL],[名前]]").Copy Range("F2")
    
End Sub

実行すると、テーブルの1列目をコピーできます。

テーブルの1列目をコピーできた

テーブルの1列目をコピーできました

テーブルの1列目をコピーできました。

1列目のデータ範囲をコピー

つぎは、1列目のデータ範囲をコピーしてみます。

1列目のデータ範囲をコピーしたい

1列目のデータ範囲をコピーしてみます

1列目のデータ範囲をコピーするVBAコードは、次のようになります。

1列目のデータ範囲をコピー

「ListObjects」を使う場合は、次のようになります。

Sub TEST9()
    
    '「1」列目のデータ範囲をコピー
    ActiveSheet.ListObjects("テーブル1").ListColumns(1).DataBodyRange.Copy Range("F3")
    'もしくは
    ActiveSheet.ListObjects("テーブル1").ListColumns("名前").DataBodyRange.Copy Range("F3")
    
End Sub

「構造化参照」を使う場合は、次のようになります。

Sub TEST10()
    
    '「1」列目のデータ範囲をコピー
    Range("テーブル1[名前]").Copy Range("F3")
    
End Sub

実行すると、1列目のデータ範囲をコピーできます。

1列目のデータ範囲をコピーできた

1列目のデータ範囲をコピーできました

1列目のデータ範囲をコピーできました。

テーブルの特定行のみをコピーする

次は、「テーブルの特定行のみ」をコピーする、というのをやってみます。

「AutoFilter」でフィルタして「SpecialCells」を使ってコピー

やり方としては、「AutoFilter」でフィルタして「SpecialCells」を使ってコピーするという感じです。

テーブルの「"A"」のみをコピーしてみます。

「"A"」のみをコピーしたい

テーブルの「

手順は、次のようになります。

  • 「"A"」でフィルタする
  • 表示セルのみコピー
  • テーブルのフィルタを解除

VBAコードは、次のようになります。

Sub TEST11()
    
    With ActiveSheet.ListObjects("テーブル1").Range
        .AutoFilter 1, "A" '「1」列目を、「"A"」でフィルタ
        .SpecialCells(xlCellTypeVisible).Copy Range("F2") '表示セルのみコピー
        .AutoFilter 1 'フィルタを解除
    End With
    
End Sub

では、実行してみます。

手順

テーブルの1列目を、「"A"」でフィルタします。

テーブルの1列目を、「

表示セルのみをコピーします。

表示セルのみをコピーします

テーブルのフィルタを解除します。

テーブルのフィルタを解除します

これで、テーブルで、1列目が「"A"」の行のみをコピーできます。

「"A"」のみをコピーできた

テーブルで、1列目が「

テーブルで、1列目が「"A"」の行のみをコピーできました。

テーブルを書式なしでコピーする

次は、テーブルを「書式なし」でコピーする、といのをやってみます。

「書式なし」でデータ範囲をコピー

やりたい内容は、「書式なし」で、データ範囲をコピーする、ということになります。

「書式なし」で、データ範囲をコピーしたい

「書式なし」で、データ範囲をコピーしてみます

手順は、次のようになります。

  • テーブルのスタイルを保存
  • テーブルのスタイルを削除
  • テーブルのデータ範囲をコピーする
  • テーブルのスタイルを戻す

VBAコードは、次のようになります。

Sub TEST12()
    
    Dim A
    '書式なしで、データ範囲をコピー
    With ActiveSheet.ListObjects("テーブル1")
        A = .TableStyle 'テーブルのスタイルを保存
        .TableStyle = "" 'テーブルスタイルを削除
        .DataBodyRange.Copy Range("F3") 'テーブルのデータ範囲をコピー
        .TableStyle = A 'テーブルスタイルを戻す
    End With
    
End Sub

では、実行してみます。

「書式なし」で、データ範囲をコピーする

テーブルのスタイルを保存しておきます。

テーブルのスタイルを保存しておきます

テーブルのスタイルを削除します。

テーブルのスタイルを削除します

テーブルのデータ範囲をコピーします。

テーブルのデータ範囲をコピーします

最後に、テーブルのスタイルを戻します。

テーブルのスタイルを戻します

これで、「書式なし」で、テーブルのデータ範囲をコピーできます。

「書式なし」でデータ範囲をコピーできた

「書式なし」で、テーブルのデータ範囲をコピーできました

「書式なし」で、テーブルのデータ範囲をコピーできました。

「書式なし」でテーブルをコピー

次は、「書式なし」で、テーブルをコピーしてみます。

「書式なし」でテーブルをコピーしたい

「書式なし」で、テーブルをコピーしてみます

手順は、次のようになります。

  • テーブルのスタイルを保存
  • テーブルのスタイルを削除
  • テーブルをコピーする
  • コピー先のテーブルを、範囲に変換
  • テーブルのスタイルを戻す

VBAコードは、次のようになります。

Sub TEST13()
    
    Dim A
    '書式なしで、テーブルをコピー
    With ActiveSheet.ListObjects("テーブル1")
        A = .TableStyle 'テーブルのスタイルを保存
        .TableStyle = "" 'テーブルスタイルを削除
        .Range.Copy Range("F2") 'テーブルをコピー
        Range("F2").ListObject.Unlist '範囲に変換
        .TableStyle = A 'テーブルスタイルを戻す
    End With
    
End Sub

では、実行してみます。

「書式なし」で、テーブルをコピーする

テーブルのスタイルを保存しておきます。

テーブルのスタイルを保存しておきます

テーブルのスタイルを削除します。

テーブルのスタイルを削除します

テーブルをコピーします。

テーブルをコピーします

コピー先のテーブルを、範囲に変換します。

コピー先のテーブルを、範囲に変換します

最後に、テーブルのスタイルを戻します。

テーブルのスタイルを戻します

これで、「書式なし」で、テーブルをコピーできます。

「書式なし」でテーブルをコピーできた

「書式なし」で、テーブルをコピーできました

「書式なし」で、テーブルをコピーできました。

おわりに

この記事では、テーブルをコピーする方法について、ご紹介しました。

テーブルをコピーしたい場合は、「.Copy」を使います。

「特定の行のみ」コピーしたい場合は、オートフィルタでフィルタして、「SpecialCells」を使って、表示セルのみをコピーするとできます。

「書式なし」でコピーしたい場合は、一旦、テーブルのスタイルを削除してから、コピーするとできます。

VBAでのテーブル操作をマスターしていきましょう。

参考になればと思います。最後までご覧くださいまして、ありがとうございました。

関連する記事から探す

カテゴリから探す

カテゴリから見たい項目を探すと便利ですよ。

サイト内を検索する

↓キーワードを入力する

アーカイブから探す