Excel VBAで別のシートにデータを自動反映。SourceRangeとDestinationRangeを活用する#0006

VBA

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列も一緒に)するというようなプログラミングコードにすることで、手作業でやっていたものが、あっという間に自動化することが可能になります。ぜひ試してみてください。

コメント

タイトルとURLをコピーしました