VBAで自動化 VBA一覧 コピー&ペースト セル・値の取得と貼り付け

【VBA】別シートのデータを転記する方法|コピー&貼り付けを自動化する実務テクニック

Excelで日々の業務をしていると、「別シートにデータを転記する」作業は非常に頻繁に発生します。
売上データの集約、入力シートから管理表への転記、テンプレートへの貼り付けなど、手作業で行うには手間がかかり、ミスも起きやすい処理です。

こうした作業はVBAで自動化することで、作業時間の短縮・ミスの削減・業務の標準化が一気に進みます。

この記事では、別シートへのデータ転記をVBAで実装する方法を、実務で使える設計意図とともに解説します。

✅ VBAで別シートにデータを転記する基本の考え方

VBAでの転記処理はシンプルに見えますが、「とりあえずコピーして貼る」だけで書いてしまうと、後から仕様変更に対応できず、すぐに壊れるコードになります。
特に、どのシートからどこへ転記するのかを曖昧にしたまま書くと、ActiveSheet依存の危険なコードになりやすいです。
また、転記範囲を固定値で書いてしまうと、データ件数が変わったときに対応できません。
さらに、コピーと値貼り付けの違いを理解していないと、意図しない書式や数式が残る原因にもなります。
実務では、「どこから」「どこへ」「どの形式で」を明確に設計することが重要です。
この章では、そうしたトラブルを防ぐための基本設計を押さえます。

・転記処理の基本フロー

  1. 元シートと転記先シートを指定
  2. 転記する範囲を決定
  3. コピーまたは値取得
  4. 転記先に貼り付け

この流れをベースに、すべての転記処理を構築します。


✅ 別シートにデータを転記する基本コード

まずは最も基本となるコードを紹介します。
ここをしっかり理解しておかないと、応用が効かず、少し条件が変わるだけで使えなくなります。
特に、変数設計とオブジェクト指定を意識しないと、後からバグの原因になります。
この章では、実務で使える形のコードをベースに解説します。

・例:指定範囲を別シートへ値転記する

Sub CopyDataToAnotherSheet()

    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    Dim copyRange As Range

    ' シートの指定
    Set sourceSheet = ThisWorkbook.Sheets("元データ")
    Set targetSheet = ThisWorkbook.Sheets("転記先")

    ' 最終行を取得
    lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row

    ' コピー範囲を設定(A列~C列)
    Set copyRange = sourceSheet.Range("A2:C" & lastRow)

    ' 値のみ転記
    targetSheet.Range("A2").Resize(copyRange.Rows.Count, copyRange.Columns.Count).Value = copyRange.Value

End Sub

・なぜこの書き方にしているのか(設計意図)

このコードは、コピー&ペーストではなく、値代入で転記しているのが最大のポイントです。

  • クリップボードを使わない
  • 処理が高速
  • 安定性が高い

さらに、Resizeを使うことで、転記先のサイズを自動調整しています。
これにより、データ件数が増減しても対応できる設計になっています。

・別の書き方との違い(なぜこの方法が良いのか)

よくあるのが以下の書き方です。

sourceSheet.Range("A2:C" & lastRow).Copy
targetSheet.Range("A2").PasteSpecial xlPasteValues

この方法でも動きますが、

  • クリップボード依存で不安定
  • 処理が遅い
  • 余計な処理が入る

というデメリットがあります。

今回の方法は、実務で安定して動くことを最優先にした設計です。

・実務で気をつけるポイント

  • ヘッダー行を含めるかを明確にする
  • 貼り付け先の初期位置を固定する
  • 上書きするのか追記するのかを決める

このあたりを曖昧にすると、後からトラブルになります。

実務で転記処理を拡張していく場合、列の指定を固定で書いてしまうと、仕様変更に対応できなくなります。保守性の高いコードにするためにも、「【VBA】Columnsの使い方完全ガイド|複数列指定・変数指定・最終列取得まで」で柔軟な列操作を押さえておきましょう。


✅ 行単位で条件付き転記を行う方法(応用)

単純な転記だけでなく、「条件に合うデータだけ転記したい」というケースも多いです。
しかしここで安易にコピー処理を入れると、処理速度が大きく低下します。
また、出力位置の管理をしないと、データが上書きされるリスクもあります。
この章では、実務でよく使う「条件付き転記」を安全に実装する方法を解説します。

・例:条件に合うデータのみ転記

Sub CopyFilteredData()

    Dim sourceSheet As Worksheet
    Dim targetSheet As Worksheet
    Dim lastRow As Long
    Dim rowIndex As Long
    Dim outputRow As Long

    Set sourceSheet = ThisWorkbook.Sheets("元データ")
    Set targetSheet = ThisWorkbook.Sheets("転記先")

    lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, 1).End(xlUp).Row
    outputRow = 2

    For rowIndex = 2 To lastRow

        If sourceSheet.Cells(rowIndex, 1).Value = "営業" Then

            targetSheet.Range("A" & outputRow).Resize(1, 3).Value = _
                sourceSheet.Range("A" & rowIndex & ":C" & rowIndex).Value

            outputRow = outputRow + 1

        End If

    Next rowIndex

End Sub

・設計の考え方(なぜこの構造にするのか)

  • 1行ずつ判定して転記
  • 出力行を別変数で管理
  • 条件変更に柔軟対応

これにより、実務でよくある「条件が増える」ケースにも対応可能になります。

・実務での応用例

  • ステータス別転記
  • 担当者別リスト作成
  • 日付条件での抽出転記

実務では、文字列の判定が曖昧なまま条件付き転記を行うと、気づかないうちに誤ったデータが混ざるリスクがあります。安定した処理を設計するためにも、「【VBA】文字列の完全一致の処理(IF文)|実務で壊れない条件分岐の基本設計」で判定ロジックをしっかり固めておきましょう。


✅ 転記処理を高速化する実務テクニック

データ量が増えると、転記処理は一気に重くなります。
特にCopy処理を多用すると、処理時間が大幅に増加します。
また、画面更新や再計算が走ることで、さらに遅くなるケースもあります。
この章では、実務で必須となる高速化のポイントを紹介します。

・基本の高速化

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

' 処理

Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True

・なぜ重要なのか

この設定だけで、数倍の速度改善が見込めることもあります。

実務で大量データを扱う場合、セル単位の処理ではどうしても処理速度に限界があります。安定した高速処理を実現するには、配列を前提とした設計に切り替えることが重要です。より実践的な手法は、「【VBA】セルの値を変数配列に取得:ループ処理を実務で使いこなす方法」で詳しく解説しています。


✅ 実務で使える転記処理の設計ポイント

転記処理は単なるコピーではなく、業務フローの一部です。
適当に書くと、後から修正できないコードになります。
逆に、設計を意識すれば長く使える資産になります。

・意識すべき設計

  • シートを明示的に指定する
  • 範囲は動的に取得する
  • 値転記を基本とする

・よくある失敗

  • ActiveSheet依存
  • 固定範囲
  • Copy多用

実務で長く使える転記処理を設計するには、アクティブセルやアクティブシートに依存しないコードを書くことが欠かせません。ここを曖昧にすると、予期せぬ動作やバグの原因になります。安定した処理を構築したい方は、「【VBA】アクティブセル・アクティブシートの考え方と安全な指定方法」も必ず押さえておきましょう。


 

✅ まとめ:VBAで別シート転記を効率化する

  • VBAで転記すれば作業を自動化できる
  • 値代入を使うと高速で安定する
  • 条件付き転記も柔軟に対応可能
  • 高速化設定で処理時間を短縮できる
  • 設計を意識することで再利用性が上がる

別シートへの転記処理は、VBA自動化の中でも最も使用頻度が高い処理の一つです。
ここをしっかり押さえておくことで、日々のExcel業務を大幅に効率化できます。

さらにレベルアップしたい場合は、
配列を使った一括転記や、大量データの高速処理にも挑戦してみてください。

    -VBAで自動化, VBA一覧, コピー&ペースト, セル・値の取得と貼り付け