EXCEL VBAでEXCELファイルにシートコピーする方法(Copyメソッド)

EXCEL
この記事は約7分で読めます。

・EXCEL VBAを使ってシートのコピーをやりたい
・シートのコピーをしようと思ったらうまくいかない

このような問題を解決できます。

今回紹介する内容は

「開いているEXCELファイルに、別のEXCELファイルのシートをコピーする方法」です。

WorksheetのCopyメソッドを使います。

前提として、以下の2つのEXCELファイルを用意しました。

EXCELファイル①”開いているファイル”
EXCELファイル②”移行したいファイル”

本記事で解説する内容として、EXCELファイル①”開いているファイル”を開いている状態で、EXCELファイル②”移行したいファイル”の“移したいシート”としているシートを移行したいと思います。

少し本題から道が逸れる場合があります。結論部分をすぐにご覧いただきたい場合は、目次の目的題目を押してください。

移したいファイルを、開いているファイルに移行させる方法

実際のサンプルコードをご覧ください。
※注意点:サンプルコード内で[‘]が先頭にきている行がありますが、これはコメント部分のことですので実際のコード進行には影響ありません。

Sub Bookcopy()

  'wbはWorkbookの頭文字
  Dim wb1 As Workbook

  '移したいブックのこと
  Dim Wbimport As Workbook
  'パスはファイル名を指定する為
  Dim FilePath As String

  '開いているWorkbook
  Set wb1 = ThisWorkbook

  '移行したいファイルのパスを文字列として取得し変数に格納
  FilePath = "C:\Users\TOYOMU\Desktop\移行したいファイル.xlsx"

  'データを移行させる(シートの内容をコピーして指定したシートの前後(AfterとBeforeで位置調整する))
  Set Wbimport = Workbooks.Open(FilePath)
  Wbimport.Worksheets("移したいシート").Copy before:=wb1.Worksheets("TEST1")

  '移行元のファイルを閉じる
  Wbimport.Close

End Sub

ではコードを少しずつ解説していきます。

あらためて今回のコードの内容を明確にしておきますが、

現在”開いているファイル”に対して、”移行したいファイル”の”移したいシート”を移行させることです。

なので、”開いているファイル”は、その名の通り開いておかなければなりません。
(マクロを実行するので当然と言われれば当然です)

これを前提として理解しておきましょう。

では開いているファイルを開き、マクロを実行させていきましょう。

次章はコードの解説です。

コードの解説

サンプルコードの内容を解説していきます。

変数の宣言をしましょう

Dim wb1 As Workbook
Dim Wbimport As Workbook
Dim FilePath As String

※宣言とは、変数に「どの種類の値を入れるかを決めておく」と覚えておきましょう。

例えば、As Workbookであれば種類としてはワークブックを入れれますし、As Stringであれば文字列を入れるといった具合です。(データ型と言われます)

開いているファイルを変数に入れましょう

WorkbookやWorksheetはオブジェクト型と呼ばれています。

この形(オブジェクト型)で宣言をしたオブジェクト変数に値を格納したい場合は、「Set」を使って変数に入れると覚えておくと便利です。

開いているファイルを変数に入れます。

Set wb1 = ThisWorkbook

現在開いているファイルを指定する場合は、Thisworkbookで指定できます。
(開いた状態であることが大事です)

これで変数「wb1」に現在開いているワークブック(Excelファイル)を代入したことになります。

移行したいブックを別の変数に格納します

移行したいブックを変数に格納しますが、ここではString型を指定しています。

移したいのはファイルだからオブジェクト型じゃないのか。といった疑問が生じるかもしれませんが、ファイルパスというのは「どこにファイルが保存されているのか」を示すものです。

String型にしている理由は、ファイルそのものではなく(オブジェクト型)、ファイル名のみ(String型)を代入しているからです。

FilePath = "C:\(ユーザ名)\Desktop\移行したいファイル.xlsx"

最初に用意しておいた”移行したいファイル”をしています。

私は、デスクトップ上にファイルを用意しておいたので、上記のようなパスになります。

※ファイルのパスを取得したい場合は、Shift+右クリックでパスをコピーできます。

このサンプルコードは

「Cドライブ→(ユーザ名)フォルダ→Desktopフォルダ→移行したいファイル」という階層で目的のファイルまでたどり着けますよ。

という意味になります。

これで準備が整いましたので、次章で移行させます。

実際にデータを移行させる

wbimportに先ほどのファイル名を入れたブックを開きます。

Set Wbimport = Workbooks.Open(FilePath)
Wbimport.Worksheets("移したいシート").Copy before:=wb1.Worksheets("TEST1")

移行したいファイルの中に、移したいシートを用意しました。

開いた後は、そのブックの移行元のシート名を選択し、移行先のどこに移行させるかを指定します。

このコードはWbimportに代入したブックの移したいシートを、wb1に代入したブックのTEST1というシートの前に移行させる。といった内容になります。

移行先のどこにコピーをするかはbeforeもしくはafterで選択することができます。

beforeを使ったときは、シートを移行先の先頭にコピーします。

またafterを使ったときは、シートを移行先の末尾にコピーすることができます。

今回はbeforeを使用しているので、このコードだと開いているファイルのTEST1シートの前にコピーされます。

※開いているファイルの「マクロ実行ボタン」を押します。
※「マクロ実行ボタン」には、本記事で解説したマクロを予め登録しています。

実行後は以下のようになります。

移したいシートがTEST1シートの前にコピーされたことがわかると思います。

最後に移行元のファイルを閉じます

コピーを行った後は、新しくコピーされたブック(シート)がアクティブになります。

※アクティブとは、選択された状態のことです。

なので、移行元のブックはコピーも終わり必要がないので閉じてしまいましょう。

Wbimport.Close

文字の通り、このコードでファイルを閉じることができます。

これを行うことで、開いているファイルが移行先ファイルのみになるので、デスクトップ上がちゃんと整理されます。

移行元と移行先のファイルが混ざってしまい混乱してしまう人は、このコードを追加しておくと混乱がなくスムーズだと思います。

以上でコピー完了です。

移行先のシートに名前を付けたい場合は、こんな方法もあります

移行したシート名を、コードで変更しておくことも可能です。

前章で少し触れましたが、コピーされたブックのシートがアクティブになっている状態なので次のコードでシート名を変更することもできます。

Activesheet.Name = "○○○○"

○○○○の箇所に変更したい名前を入れるだけです。

あとからシート名を変更することが面倒な人は、この一行を追加しておいても良いと思います。

まとめ

本記事では移行元のシートを移行先のシートにコピーするまでの流れとサンプルコードを紹介しました。

本記事の内容は、変数名が変だったりインデントが変だったりしますが、その辺はうまく調整してください。

データ分析や、集計の時にはコピーが必要な時があるので覚えておくと便利だと思います。

記載内容に訂正箇所、不明箇所がございましたら、問い合わせフォームよりご一報いただけますと誠に幸いです。
すぐに確認し、適切な対応をさせていただきます。
今後も本サイトを何卒よろしくお願い致します。

コメント