【VBA】別ファイルのシートをコピー(挿入)する方法

VBAを使って普段の作業を自動化し、少しでも楽をしようという人は多いでしょう。今回は、『別の場所に保存されているファイルから、特定のワークシートをコピーして挿入する方法』について書きたいと思います。

流れとしては・・・

 

1.各ファイルの変数宣言

2.ファイルを取得して開く

3.ワークシートをコピー(挿入)

 

となります。

 

因みにですが、ここで紹介するVBAのコードは、

 

プロ顔負けといったすごいものではなく、こうすれば「一応できる」という初心者レベルでの解説となります。

あくまで個人レベルで作業することを想定していますのでご了承ください。

「スポンサーリンク」

全体像

今回の作業における、ファイル同士の位置関係は下記を想定しています。

ファイルの位置関係_全体像

 

手順1 各ファイルと保存場所の変数宣言

ではまず、各ファイル(コピー元及びコピー先のファイル)の変数を宣言します。

 

宣言に使うのは、Dimステートメント

 

ここでは、上図(全体像)にあるように、コピー元とコピー先(VBAを記述)のファイルについて下記のように宣言します。

コピー元 → motoF

コピー先 → sakiF

 

<サンプルコード>

Sub 別ファイルのシートをコピー()

Dim motoF As Workbook, sakiF As Workbook

End Sub

因みに、今回のように2つ以上宣言する場合は、間に『 ,(カンマ)』を入れます。

 

次に、ファイルの保存場所をThisWorkbookのPathプロパティを使って追記します。

これを使うことで、ブックの保存場所を取得できるので便利です。

 

<サンプルコード>

Sub 別ファイルのシートをコピー()

Dim motoF As Workbook, sakiF As Workbook

Dim wbPath As String

wbPath = ThisWorkbook.Path

End Sub

ThisWorkbookの変数は、『wbPath』としています。

 

 

 

手順2 ファイルを取得して開く 

『Workbooks.Open』でファイルを指定した値をコピー元、コピー先それぞれの変数にセットします。

 

因みに、ファイルの取得は「コピー先」・「コピー元」の順に縛られません。

プログラムは、基本的に上のセンテンスから順に実行されますが、記述する際にはどちら(下記サンプルコードのオレンジ部分の2文)が先でも構いません。

 

<サンプルコード>

Sub 別ブックのシートをコピー()

Dim motoF As Workbook, sakiF As Workbook

Dim wbPath As String

wbPath = ThisWorkbook.Path

 

Set sakiF = Workbooks.Open(wbPath & “\売上全店(集計).xlsx”)

Set motoF = Workbooks.Open(wbPath & “\売上店舗\売上(大阪店).xlsx”)

 

 

手順3 ワークシートをコピー(挿入)

ここでは、一番左のシートをコピー(挿入)したいと思います。

 

コピーで使うのは、Copyメソッドです。

このcopyメソッドには、下記2つの引数があります。

 

第1引数(before : 指定したワークシートの前にコピー)

 第2引数(after : 指定したワークシートの後ろにコピー)

 

引数は、カンマ区切りで設定できますが、『 引数名:= 』とすることで、どの引数を設定しているのかわかりやすくなります(下記サンプルコード参照)。

 

 

因みにワークシートは、左から順に1.2.3...と番号が振られます。

これをインデックス番号と言い、Worksheets(1)などと記述します。

シートのインデックス説明図

 

<サンプルコード>

Sub 別ブックのシートをコピー()

Dim motoF As Workbook, sakiF As Workbook

Dim wbPath As String

wbPath = ThisWorkbook.Path

 

Set sakiF = Workbooks.Open(wbPath & “\売上全店(集計).xlsx”)

Set motoF = Workbooks.Open(wbPath & “\売上店舗\売上(大阪店).xlsx”)

motoF.Worksheets(1).Copy before:=sakiF.Worksheets(1)

End Sub

もし、2番目のシートをコピー(挿入)したい場合は、『motoF.Worksheet(2).Copy』にすればOKです。

 

補 足

なお、コピー(挿入)先シートの、末尾にシートを入れ込みたい場合は、『Worksheet.Count』を使って下記のように記述します。

 

motoF.Worksheets(1).Copy after:=sakiF.Worksheets(Worksheets.Count)

 

 

さて、これで目的(コピー・挿入)は達成できますが、最後に下記2点を記述しておきます。

 

【コピー元ブックを閉じる】

motoF.close

 

【セットしたオブジェクト参照を解除する】

set sakiF=nothing: set motoF=nothing

 

※変数にオブジェクトを格納した場合は、変数を使い終わった時点で変数に「nothing」を代入します。

これで、オブジェクトへの参照を解除できます。

この記述、意外と忘れがちですので気を付けてください。

 

<最終サンプルコード>

Sub 別ブックのシートをコピー()

Dim motoF As Workbook, sakiF As Workbook

Dim wbPath As String

wbPath = ThisWorkbook.Path

 

Set sakiF = Workbooks.Open(wbPath & “\売上全店(集計).xlsx”)

Set motoF = Workbooks.Open(wbPath & “\売上店舗\売上(大阪店).xlsx”)

 

motoF.Worksheets(1).Copy before:=sakiF.Worksheets(1)motoF.close

set sakiF=nothing: set motoF=nothing

End Sub

 

補 足

今回は、コピー先ファイルにシートをコピー(挿入)しましたが、VBAを記述したファイル自体に挿入することもできます。

サンプルコードはコチラ。

 

<サンプルコード>

Sub 別ブックのシートをコピー()

Dim motoF As Workbook

Dim wbPath As String

wbPath = ThisWorkbook.Path

 

Set motoF = Workbooks.Open(wbPath & “\売上店舗\売上(大阪店).xlsx”)

motoF.Worksheets(1).Copy _

before:=Workbooks(“売上集計.xlsm”).Worksheets(1)motoF.Close

Set motoF = Nothing

End Sub

 

以上です。

 

ページ先頭へ戻る

「スポンサーリンク」

最新情報をチェックしよう!