VBAでデータを転記する処理を作りたいな・・・
シンプルな方法だけでなく、いくつかのパターンを知りたい・・・
Excelのちょっとした操作を自動化したいと思ったときに作るのが、データ転記ですよね。ただ、データ転記と一口に言ってもやり方はさまざまです。自分が実現したいデータ転記の方法を調べることが難しい・・・と思っている方も多いのではないでしょうか。
こんにちは!フリーランスエンジニア兼テックライターのワキザカです。
この記事では、VBAでデータ転記処理を作る5つの方法を徹底的に解説します!
この記事はこんな人のために書きました。
- VBAでできることについて詳しく知りたい人
- VBAの基礎・機能・作れるツールなどを知りたい人
VBAでデータ転記する方法とは?
はじめに、VBAでデータ転記する方法について簡単に解説します。
データ転記と聞くとコピペをイメージする人もいると思いますが、Copyメソッドは使いません。値を転記する場合は、A = Bのように転記する値をイコールでつないで、処理を書きます。
これだけではイメージがしづらいと思うので、5つのサンプルを用いて具体的な使い方を解説しますね。
VBAでデータ転記する5つのサンプル
それでは、データを転記する5つのサンプルをご紹介します。
■VBAでデータ転記する5つの方法
- 1行のデータ
- 複数行・列のデータ
- 連続したデータ
- 別シートのデータ
- 別ブックのデータ
それぞれ詳しく解説しますね。
1行のデータ
1つ目は、1行のデータを転記する方法です。
1行のデータを転記する方法は、次のとおりです。
実行前:
サンプルコード:
Sub Sample1() Range("A1").Value = Range("A2").Value End Sub
実行結果:
A1セルの値をA2セルに転記しています。このように、簡単にデータ転記をすることができます。データ転記の基本なので、ぜひ実際に書いて覚えてみてくださいね。
複数行・列のデータ
2つ目は、複数行・列のデータを転記する方法です。
複数行・列のデータを転記する方法は、次のとおりです。
実行前:
サンプルコード:
Sub Sample2() Range("A8:C10").Value = Range("A2:C4").Value End Sub
実行結果:
このように、Rangeのセル範囲を「開始セル:終了セル」のように範囲指定するだけで、指定範囲を一括で転記することができます。データを一括で転記する場合はおすすめです!
連続したデータ
3つ目は、連続したデータを転記する方法です。
連続したデータを転記する方法は、次のとおりです。
実行前:
サンプルコード:
Sub Sample3() '①データの最終行を取得 Dim maxRow As Long maxRow = Cells(Rows.Count, 1).End(xlUp).Row '②データ範囲を一括で転記 Range("E3:G" & maxRow).Value = Range("A3:C" & maxRow).Value End Sub
実行結果:
連続したデータを転記する場合は、転記元のデータの行数が変動するケースもありますよね。そのため、最大行の行番号を取得して、取得した行番号を使ってデータ転記する方法を覚えておくことがおすすめです。
ちなみに、以下で最大行の取得方法について詳しく解説しています。最大行を取得する方法の解説を見たい方は、ぜひ見てみてくださいね!
別シートのデータ
4つ目は、別シートのデータを転記する方法です。
別シートのデータを転記する方法は、次のとおりです。
実行前 (Sheet1):
実行前 (Sheet2):
サンプルコード:
Sub Sample4() '①シートを変数にセット Dim ws1 As Worksheet Dim ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") '②シートを指定してデータを転記 ws2.Range("A1:C4").Value = ws1.Range("A1:C4").Value End Sub
実行結果:
このように、Rangeの前にシートを指定するだけで、シートをまたいでデータ転記をすることができます。シートを指定するときは1文が長くなってしまうため、シートを変数にセットしてから使うことがおすすめです。
別ブックのデータ
5つ目は、別ブックのデータを転記する方法です。
別ブックのデータを転記する方法は、次のとおりです。
実行前 (Test.xlsx):
実行前 (マクロ実行ファイル):
サンプルコード:
Sub Sample5() '①ブックを開いて変数にセット Dim wb1 As Workbook Workbooks.Open ThisWorkbook.Path & "Test.xlsx" Set wb1 = ActiveWorkbook '②Test.xlsxのデータをマクロファイルに転記 wb1.Worksheets("Sheet1").Range("A1:C4") = _ ThisWorkbook.Worksheets("Sheet1").Range("A1:C4") '③ブックを閉じる Application.DisplayAlerts = False wb1.Close Application.DisplayAlerts = True End Sub
実行結果:
「Workbooks.Open ThisWorkbook.Path & "Test.xlsx"」の処理で、マクロを実行しているブックと同じフォルダにある「Test.xlsx」のブックを開いています。その後、「ブック.シート.Range」でデータ転記元、転記先を指定してデータを転記しています。
このように、「ブック.シート.Range」の順で位置を指定することで、ブックをまたいでデータ転記することができます。
ちなみに、今回サンプルで使用したWorkbook.openを使って別ブックを操作する方法は、以下で詳しく解説しています。詳しく知りたい方は、以下を見てみてくださいね!
VBAで書式も含めてコピペする方法
ここまで、データ転記の方法について解説してきました。
ただ、値だけでなく書式も含めてデータをコピペしたいときもありますよね。
データ転記のみの例:
書式含めてコピペする例:
書式を含めてコピペしたいときは、Copyメソッドがおすすめです。
具体的な使い方は以下で詳しく解説しているので、ぜひ見てみてくださいね!
まとめ
今回は、VBAでデータ転記処理を作る5つの方法について、解説しました。
データ転記処理は、今回解説した方法で簡単に作ることができます。
ぜひ、自動化処理をVBAで作ってみてくださいね!