Excel VBAを使い、シート間にデータを自動反映する方法をご紹介。SourceRanegeとDestinationRange プログラミング。
はじめに
Excelを使った業務で、データを別のシートにコピーするという作業は頻繁に発生しますよね。特に大量のデータを扱う場合や、特定の条件でデータをフィルタリングして移動させたいとき、複数のマスターデータを1枚のシートにまとめたいとき、など、今回は、Excel VBAを使って自動化をし、作業の効率化を図ってみましょう。こちらの記事では、SourceRangeとDestinationRangeを使用し、別のシートにデータを自動反映する方法 を題材に、解決をします。実用で役立つようなプログラミングコードも公開しておりますので、ぜひ最後まで読んで頂けますと嬉しいです。
Excel VBAで別のシートにコピーをする
VBAで使用中のシートにあるデータをコピーし、別シートにデータを自動的に反映するには。以下のSourceRangeとDestinationRangeを使用します。
SourceRange.Copy DestinationRange
- SourceRange: コピー元のセルや範囲を指定します。
- DestinationRange: コピー先のセルや範囲を指定します。
範囲を指定して別のシートにコピーする
コピー元のA2からC4までのデータをコピーし、コピー先のA2から貼り付るという動作を確認します。

完成 VBA プログラミングコード
Sub 別のシートへコピー()
' コピー元のシートを指定
Dim sourceSheet As Worksheet
Set sourceSheet = Worksheets("コピー元")
' コピー先のシートを指定
Dim targetSheet As Worksheet
Set targetSheet = Worksheets("コピー先")
' コピー元のA2からC4をまでのデータを取得し、コピー先のA2から反映
sourceSheet.Range("A2:C4").Copy Destination:=targetSheet.Range("A2")
MsgBox "データが反映されました"
End Sub
作成したプログラミングコードを実行すると。

VBAコードの解説:
Worksheetsの次の部分で、参照するコピー元とコピー先のシートを指定します。
コピー元のシート名を、sourceSheet と読み替えます。
コピー先のシート名を、targetSheet と読み替えます。
Set sourceSheet = Worksheets("コピー元")
Set targetSheet = Worksheets("コピー先")
sourceSheet(コピー元シート)のA2セルからC4セルまでのデータをコピーします。
sourceSheet.Range("A2:C4").Copy
targetSheet.Range(コピー先シート)のA2セルから書式と数式を貼り付けます。
Destination:=targetSheet.Range("A2")
値だけ貼り付けたい。そんな場合には、PasteSpecial xlPasteValuesを使用します。
値だけ貼り付けたい(PasteSpecial xlPasteValues)
Destination:= では、書式と数式をすべて貼り付けていましたが、PasteSpecial xlPasteValuesを用いることで、値だけを貼り付けることも出来ます。業務によっては、元のエクセルには、罫線や文字色などあったりなかったりする箇所も。。。コピー先は、値だけあれば良い。そんな場合などに役立ちます。

完成 VBA プログラミングコード
Sub 別のシートへコピー()
' コピー元のシートを指定
Dim sourceSheet As Worksheet
Set sourceSheet = Worksheets("コピー元")
' コピー先のシートを指定
Dim targetSheet As Worksheet
Set targetSheet = Worksheets("コピー先")
' コピー元のA2からC4をまでのデータを取得し、コピー先のA2から反映
sourceSheet.Range("A2:C4").Copy
targetSheet.Range("A2").PasteSpecial Paste:=xlPasteValues
MsgBox "データが反映されました"
End Sub

値だけ反映したい。
targetSheet.Range("A2").PasteSpecial Paste:=xlPasteValues
書式も数式も反映したい。
Destination:=targetSheet.Range("A2")
条件付きでデータをコピーする
次に、特定の条件に基づいてデータを別のシートにコピーする方法です。この例では、C列にあるデータのうち、値が100以上のものだけを別のシートにコピーします。

完成 VBA プログラミングコード
Sub 条件付で別のシートへコピー()
Dim sourceSheet As Worksheet
Dim targetSheet As Worksheet
Dim lastRow As Long
Dim i As Long
Dim targetRow As Long
' コピー元とコピー先のシートを設定
Set sourceSheet = Worksheets("コピー元")
Set targetSheet = Worksheets("コピー先")
' コピー元の最終行を取得
lastRow = sourceSheet.Cells(sourceSheet.Rows.Count, "C").End(xlUp).Row
' コピー先の開始行を指定
targetRow = 2
' C列のデータを確認し、100以上の値だけをコピー
For i = 2 To lastRow
If sourceSheet.Cells(i, 3).Value >= 100 Then
sourceSheet.Rows(i).Copy Destination:=targetSheet.Rows(targetRow)
targetRow = targetRow + 1
End If
Next i
MsgBox "C列で100以上のデータをコピーしました"
End Sub

VBAコードの解説:
sourceSheet.Cells(i, 3).Value >= 100 C列の値が100以上であれば、その行をコピーします。
その行というのが、sourceSheet.Rows(i) で、1行まるまる指定しています。
sourceSheet.Cells(i, 3).Value >= 100 Then
sourceSheet.Rows(i).Copy Destination:=targetSheet.Rows(targetRow)
targetRowで、行管理をしています。コピー先シートの2行目から条件があったものを反映します。
targetRow = 2
まとめ
今回の記事はいかがでしたでしょうか。Excel VBAで 別のシートにコピーする処理 を自動化することで、手作業でのミスを防ぎ、業務効率を大幅に向上させることができます。SourceRange で、コピー元のセルデータをコピーする。DestinationRangeでコピー先の指定セルから、罫線や数式なども含めたデータを反映する。応用例として、もし値だけの反映で良いとなったら、PasteSpecial xlPasteValues を使用する。さらに特定条件、例えば、データ元で、数値が100以上のデータだけをコピー先に反映させたい。という場合には、IF関数を組み合わせた、sourceSheet.Cells(i, 3).Value >= 100 Then で、3(データの参照先)にあたる部分を書き換える。また、Rows(i)で、条件を満たした行をまるまる反映(A列もB列も一緒に)するというようなプログラミングコードにすることで、手作業でやっていたものが、あっという間に自動化することが可能になります。ぜひ試してみてください。


コメント