Excel VBAでコピペする(別シート間)

同じシート内でのコピペは1行でできたけど、実務の本番はここからですよね。

「別のシートにある売上データを、集計シートへ順番に転記したい……」

「毎月、別シートから手動でデータをコピペして集める作業から解放されたい!」

実務でマクロを使う目的のほとんどは、こうした「異なるシート間でのデータのやり取り」ではないでしょうか。
一見難しそうに思えますが、実はこれも前回の知識にほんの少し「ある言葉」を付け足すだけで、たった1行で自動化できます。

今回は、実務で絶対に避けては通れない「別シートとのコピペ」を、初心者が100%つまずく罠の回避ルートと一緒にご紹介します!

練習用ファイルを準備しましたので、ダウンロードして活用してくださいね。

マクロを動かすための重要なお願い

ダウンロードしたファイルは、通常のExcel形式(.xlsx)になっています。
そのままマクロを書いて保存すると、せっかく書いたコードがすべて消えてしまいます!

💡練習用ファイルを使う前の準備

別シートへコピペする(基本の書き方)

まずは最も基本となる「いま開いているシートのデータを、別のシートへ転記する」書き方からマスターしていきましょう。

別シートへのコピペコード

Sub CopyToAsideSheet()
    Worksheets("Sheet1").Range("A1").Copy Worksheets("Sheet2").Range("A1")
End Sub

コードの解説

  • 左側 Worksheets(“Sheet1”).Range(“A1”).Copy:コピー元となる「Sheet1」の「A1セル」を指定してコピーします。

  • 右側 Worksheets(“Sheet2”).Range(“A1”):コピー先となる「Sheet2」の「A1セル」を指定します。

  • ポイント: 前回のコードの頭に、それぞれ Worksheets(“シート名”). を付け足しただけです。
別シートへコピペする(基本の書き方)
別シートへコピペする(基本の書き方)

【重要】別シートのコピペで絶対にやってはいけない失敗と対策

ここで、別シートのコピペに初めて挑戦するときに、気づかないうちに陥りやすい「落とし穴(バグ)」についてお話しします。これを知らないと、思わぬシートのデータが書き換わってしまうなど、実務でのトラブルの原因になってしまいます。

なぜシート名を省略するとエラーになるのか?

VBAには「シート名を省略すると、いま画面上で一番手前に見えているシート(アクティブシート)を対象にする」という超お節介な暗黙のルールがあります。

もし、以下のように片方のシート名をサボって書いたとします。

Range("A1").Copy Worksheets("Sheet2").Range("A1")

これでも、マクロを書いた直後は動いてしまうのが厄介なところです。
でも、数日後に「Sheet2」の画面を開いた状態でこのマクロを実行すると、Excelは

「いま見えているSheet2のA1をコピーして、Sheet2のA1に貼る」

という、意味のない自己ループ処理を始めてしまいます。

さらに最悪なのは、全く関係のない「Sheet3」を開いているときに実行すると、Sheet3の大切なデータが勝手にコピーされてSheet2へ上書きされてしまいます。

「シート名は絶対に省略せず、コピー元もコピー先もフルネームで書く」
これが、実務でマクロを安全に動かして定時で帰るための絶対鉄則です。

毎回フルネームで書くのってめんどくさいですよね。
実はそれをスマートに解決する技(With)もあるんです。
でも、まずは基本を覚えてからで大丈夫!
※With の記事は準備中です

まとめ

今回は、実務の自動化で必須となる「別シート間のコピペ」の正しい書き方をご紹介しました。

  • 別シートのコピペ: コピー元とコピー先の両方に Worksheets(“シート名”). を必ずセットで書く。

  • 省略は絶対NG: サボると「今開いているシート」が勝手に指定され、データが書き換わるなどのトラブル原因になる。

  • 基本構造は同じ: 別シートからデータを「持ってくる」ときも、コピー元とコピー先の名前を入れ替えるだけで1行で書ける。

最初は文字数が多くなって難しく見えるかもしれませんが、構造はシンプルです。面倒くさがらずにシート名をしっかり書くことこそが、エラーの出ない美しいマクロを作る一番の近道ですよ!

💡 実務でのちょっとした本音
ここだけの話、実務でマクロを運用していると、

データの行数が毎回変わる(先月は50行だったのに今月は100行ある)

という問題に必ずぶち当たります。

毎回コードを開いて「今回はRange(“A1:A100”)に書き換えて……」なんて手動で直していたら、それこそ自動化した意味がなくなってしまいますよね(笑)

まずは今回の「シート名をサボらずにフルネームで書く!」という1行の基本を、練習用ファイルを使ってしっかり指になじませてあげてください。

これができれば準備は万端!
次回の記事では、実務の現場で本当に役立つ「データの量に合わせて、コピーする範囲が自動で変わる魔法のようなコピペ技」を詳しくご紹介しますね!