スポンサーリンク

Excelマクロでコピー&ペーストを自動化する方法

VBA

「Excelのコピペを自動化する方法を知りたい」
という人はぜひ読んでみてください。初心者でも実装できます。

コピーしたいセルや列などを指定して、CopyとPasteSpecialを書けばOKです。

Sub test()

Cells(1, 1).Copy
Cells(1, 2).PasteSpecial

End Sub

ファイルを開く方法閉じる方法も知っておけば、事務作業をすべて自動化することができます。

✓記事の内容は以下の通りです。
・マクロでコピー&ペーストをする方法
・貼り付け方法の指定
・別シート(ファイル)からコピペする方法

マクロでコピー&ペーストをする方法

Copy

Sub test()

Cells(1, 1).Copy

End Sub
A1をコピーした図

Cells(行, 列)でセルを指定してCopyでコピーします。

A1セルをコピーするコード

VBAではオブジェクト(セルなど)を指定してから操作のコードを書きます。
>>Excelマクロでセル,シート,ファイルを指定する方法

PasteSpecial

Sub test()

Cells(1, 1).Copy
Cells(1, 2).PasteSpecial

End Sub
A1セルをB1にコピーした図

貼り付けたいセルを指定して、PasteSpecialで貼り付けます。
つまり、Copy -> PasteSpecialでコピペできます。

Application.CutCopyMode

Sub test()

Cells(1, 1).Copy
Cells(1, 2).PasteSpecial
Application.CutCopyMode = False

End Sub

コピペをした後にコピー状態を示す破線が残ります。

コピーした後の破線が残った図

これを解除したい場合はApplication.CutCopyModeをFalseにしましょう。
破線が残っていると気分が悪い人は消しておくと無難です。

複数セルのコピー&ペースト

Sub test()

Range("A1:C3").Copy
Cells(1, 5).PasteSpecial
Application.CutCopyMode = False

End Sub
A1~C3をE1にコピーした図

このコードで、A1~C3までの9個のセルをE1~G3に貼り付けできます。
セル範囲を指定してCopyし、左上になる貼り付け先を指定してPasteSpecialです。

ただしRange(“セル番地”)の書き方は引数を使いにくいので、以下の書き方をお勧めします。

Sub test()

Range(Cells(1, 1), Cells(3, 3)).Copy
Cells(1, 5).PasteSpecial
Application.CutCopyMode = False

End Sub
RangeとCellsでコピー範囲を決めるコード

それぞれCellsで左上のセルと右下のセルを指定しましょう。
この方法なら、行列の番号をいちいちアルファベットに変換しなくていいので楽です。

行(列)のコピー&ペースト

Sub test()

Rows(1).Copy
Cells(2, 1).PasteSpecial
Application.CutCopyMode = False

End Sub
行をコピーした図

行をコピペする場合、RowsとCopyでコピーし、貼り付け先を左端のセルにします。
列の場合は、ColumnsとCopyでコピーし、1行目となるセルに貼り付けましょう。

貼り付け方法の指定

数値貼り付け

Sub test()

Cells(1, 1).copy
Cells(2, 1).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

End Sub
PasteSpecial Paste := 
 ・通常貼り付け:xlPasteAll
 ・値で貼り付け:xlPasteValues
 ・書式だけ貼り付け:xlPasteFormats

例えば以下のように、C列に関数SUMでA列とB列の合計を入れているとします。

合計の関数列をコピーする図

PasteSpecialだけで、C列をG列にコピペしましょう。

Sub test()

Range("C2:C11").copy
Cells(2, 7).PasteSpecial
Application.CutCopyMode = False

End Sub
合計の関数をコピーすると0になった図

PasteSpecialでコピーすると0になりました。
これは数式ごとコピーしているので、G=E+Fになるからです。

そこで、Paste := xlPasteValues(数値貼り付け)に設定してみましょう。

Sub test()

Range("C2:C11").copy
Cells(2, 7).PasteSpecial Paste:=xlPasteValues
Application.CutCopyMode = False

End Sub
合計の関数列を数値でコピペした図

数値としてコピーされていますね。

行列を入れ替えて貼り付け

Sub test()

Range(Cells(1, 1), Cells(3, 3)).Copy
Cells(1, 5).PasteSpecial Transpose:=True
Application.CutCopyMode = False

End Sub
PasteSpecial Transpose := True or False

行列を入れ替えるには引数Transposeを設定します。
もちろんPasteの引数と一緒に使っても大丈夫です。

別のシート(ファイル)からコピペする方法

別シートからのコピペ

Sub test()

Worksheets(1).Cells(1, 1).Copy
Worksheets(2).Cells(1, 1).PasteSpecial
Application.CutCopyMode = False

End Sub

Worksheets().Cells()で、どのシートのどのセルかを指定できます。
指定できたら、CopyとPasteSpecialでコピペすればOKです。

別ファイルからのコピペ

Sub test()

Workbooks("Book1.xlsx").Worksheets(1).Cells(1, 1).Copy
ThisWorkbook.Worksheets(1).Cells(1, 1).PasteSpecial
Application.CutCopyMode = False

End Sub
コピー先:”Book1.xlsx”の1枚目のA1
貼付け先:プログラム実行ファイルの1枚目のA1
ブック、シート、セルを指定してコピーするコード

ファイル->シート->セルの順に指定して、CopyとPasteSpecialを使います。

まとめ

今回はコピペの方法について解説しました。
重要なのは、コピペしたいセルや貼付け先の位置をどのように取得するかですね。
他にもファイルを開く方法と閉じる方法を解説しているので、ぜひ組み合わせてみてください。

コメント

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