Excel VBAでコピペする(同一シート内)
「毎月、データを手動でコピペして集計するのが面倒……」
「コピペの作業、マクロを使えばボタン一発で終わるのでは?」
実は、VBAのコピペはたった1行のコードを書くだけで自動化できます!
今回は、教科書的な難しい理屈は抜きにして、今すぐ実務で使える一番簡単な「VBAでコピペ」するコードの書き方をご紹介します。
練習用ファイルを準備しましたので、ダウンロードして活用してくださいね。
ダウンロードしたファイルは、通常のExcel形式(.xlsx)になっています。
そのままマクロを書いて保存すると、せっかく書いたコードがすべて消えてしまいます!
💡練習用ファイルを使う前の準備
- ファイルをダウンロードして開く
- マクロ有効ブック(.xlsm)形式で保存し直す
単一セルをコピペする
Excelの基本中の基本である「コピペ」ですが、実は効率よく操作するための大事なコツがあります。
まずは最もシンプルな「1行だけ」のコピー&ペーストから、正しい手順をサクッと確認していきましょう!
1行で完結するコピペコード(単一セル)
Sub Copy()
Cells(1, 1).Copy Cells(1, 3)
End Sub
コードの解説
- 左側 Cells(1, 1).Copy:コピー元(1行目・1列目のセル「A1」)を指定してコピーします。
- 右側 Cells(1, 3):コピー先(1行目・3列目のセル「C1」)を指定します。
- ポイント: 間に.Copyを挟んで、右側にスペースを空けてコピー先を書くだけです。

セル範囲をコピペする
複数のセル(範囲)をまとめてコピーするときは、指定の仕方を工夫するのが実務でラクをするコツです。
【重要】セルの指定方法(CellsとRange)の使い分け
Excel VBAでセルを指定する方法には、大きく分けて「Cells」と「Range」の2種類があり、複数のセル(範囲)をまとめてコピーするときは、指定の仕方を「Range」に切り替えるのが一番スマートです。
実は、先ほど使った「Cells」のままで「A1からA3まで」という範囲を指定しようとすると、以下のように書かなければなりません。
Range(Cells(1, 1), Cells(3, 1))
これだと「Range」の中に「Cells」を2つも詰め込む必要があり、コードが異常に長くなって見づらいですよね。パッと見でどこのセルを指しているのかも分かりづらいです。
ですが、最初から「Range」を主役にすれば、Excelで見慣れた「A1:A3」という表現をそのまま使って、以下のように直感的に書くことができます。
Range("A1:A3")
実務で一番ラクをして、後から見返しやすいコードにするために、賢く使い分けていきましょう!
1行で完結するコピペコード(セル範囲)
Sub Copy()
Range("A1:A3").Copy Range("C1")
End Subコードの解説
- 左側 Range(“A1:A3”):コピー元(A1~A3セル)を指定してコピーします。
- 右側 Range(“C1”):コピー先(C1セル)を指定します。
※C1セルを指定すれば、範囲すべてが自動で貼り付けられます。 - ポイント: 間に.Copyを挟んで、右側にスペースを空けてコピー先を書くだけです。

まとめ
今回は、同じシート内で最も簡単にコピペを自動化する基本の書き方をご紹介しました。
実務でコードを書くときは、以下の2つの特徴を押さえて賢く使い分けるのがコツです。
- 単一セルのコピペ: 行と列を数字で指定できる「Cells」を使う
- セル範囲のコピペ: 見慣れた範囲を直感的に指定できる「Range」を使う
どちらの場合も、間に .Copy を挟んで、右側にスペースを空けてコピー先を書くだけの「1行」で完結します。
手動でのコピペ作業が毎日たくさんあって心が折れそうになっている方は、まずこの基本の1行コードをベースに、大切なデータを一瞬で動かす快感を体験してみてくださいね!
💡 実務でのちょっとした本音
ここだけの話、私は実務でコードを書くとき、ほとんどの場面で「Range」を使っています。
一番の理由は、単純に「毎回使い分けるのが面倒だから」です(笑)。
あちこちで使い分けるよりも、基本は「Range」に統一してある方が、PCの大きな画面でコードを上から下まで流し読みしたときに、圧倒的にスッキリして見やすいというメリットもあります。
「じゃあ、なぜ「Cells」も覚える必要があるの?」と思いますよね。
それは、この先のステップで登場する「データの量に合わせて自動で範囲を変えるマクロ(最終行の取得やFor文でのループ処理)」を作るときに、どうしても必要になるからです。
なので、今の段階では
「基本は使い慣れた「Range」で書けばOK!変数を使うときだけ「Cells」の出番が来るんだな」
くらいの気楽な気持ちで大丈夫ですよ!