コピーしたいセルや列などを指定して、CopyとPasteSpecialを書けばOKです。
Sub test()
Cells(1, 1).Copy
Cells(1, 2).PasteSpecial
End Sub
ファイルを開く方法と閉じる方法も知っておけば、事務作業を自動化することができます。
マクロでコピー&ペーストをする方法
Copy
Sub test()
Cells(1, 1).Copy
End Sub

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

PasteSpecial
Sub test()
Cells(1, 1).Copy
Cells(1, 2).PasteSpecial
End Sub

貼り付けたいセルを指定して、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までの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

それぞれ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
例えば以下のように、C列に関数SUMでA列とB列の合計を入れているとします。

PasteSpecialだけで、C列をG列にコピペしましょう。
Sub test()
Range("C2:C11").copy
Cells(2, 7).PasteSpecial
Application.CutCopyMode = False
End Sub

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
行列を入れ替えるには引数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

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