今回は指定したファイルをVBAの書かれたファイルに読み込む方法をご説明します。
別のファイルに入力されているデータを転記するのではなく、シートをそのままコピーします。
他のファイルを集計する際などに、別ファイルを操作するよりもVBAが書かれたファイルのみで操作が出来るため、コードが簡素になります。
本記事のファイルを開く部分については、「ファイル名を指定してファイルを開く方法」をご覧ください。
その他のファイルを読み込む方法については、次の記事をご覧ください。
1.指定したファイルを開く
まずは、指定したファイルを開きます。
別ファイルを開く場合は「Openメソッド」を使用します。
指定したファイルが存在しない場合はエラーとなりますので、「Dir関数」でチェックします。
詳細は「ファイル名を指定してファイルを開く方法」をご覧ください。
Sub Sample1()
If Dir("C:\Sample\Book1.xlsx") <> "" Then
Workbooks.Open "C:\Sample\Book1.xlsx"
End If
End Sub
2.開いたファイルを読み込む
指定したファイルを開いたら、VBAの書かれたファイルに読み込みます。
読み込むには「Copy」メソッドを使用します。
別ファイルのシートをコピーして、VBAの書かれたファイルに貼り付けます。
もし同じシート名を読み込んでしまったり、何度も読み込むとエラーになりませんがシート名に(1)、(2)などのカウントが付与されます。
1シートのみ読み込む
次のコードは指定されたファイルを開き、1番目のシートを指定してVBAの書かれている、ファイルの一番最後に貼り付けます。
「Worksheets(1).Copy」で読み込みたいシートをコピーします。
「after:=ThisWorkbook.Worksheets(貼り付け位置)」で貼り付ける場所を指定します。
最後に開いているファイルを「Close savechanges:=False」で保存しないで閉じます。
Sub Sample2()
Dim Filename As String
Dim ShCount As Long
ShCount = ThisWorkbook.Worksheets.Count
If Dir("C:\Sample\Book1.xlsx") <> "" Then
Filename = Dir("C:\Sample\Book1.xlsx")
Workbooks.Open "C:\Sample\Book1.xlsx"
Worksheets(1).Copy after:=ThisWorkbook.Worksheets(ShCount)
Workbooks(Filename).Close savechanges:=False
End If
End Sub
すべてのシートを読み込む
次に全てのシートを読み込む方法です。
方法と言っても、1つのシートを読み込むのとまったく方法は一緒です。
「Worksheets(1).Copy」の部分を「Worksheets.Copy」とすることですべてコピーできます。
注意点として、参照先のファイルに非表示のシートがあると読み込み後も非表示です。
結構気づけないのでご注意ください。
Sub Sample3()
Dim Filename As String
Dim ShCount As Long
ShCount = ThisWorkbook.Worksheets.Count
If Dir("C:\Sample\Book1.xlsx") <> "" Then
Filename = Dir("C:\Sample\Book1.xlsx")
Workbooks.Open "C:\Sample\Book1.xlsx"
Worksheets.Copy after:=ThisWorkbook.Worksheets(ShCount)
Workbooks(Filename).Close savechanges:=False
End If
End Sub
3.非表示を表示する方法
読み込んだシートの中に非表示があると、そのまま非表示になるため、念のためすべて再表示します。
シートを表示/非表示を切り替えるには「Visible」プロパティをTrue/Falseで切り替えます。
Sub Sample4()
Dim Filename As String
Dim ShCount As Long
Dim Sh As Worksheet
ShCount = ThisWorkbook.Worksheets.Count
If Dir("C:\Sample\Book1.xlsx") <> "" Then
Filename = Dir("C:\Sample\Book1.xlsx")
Workbooks.Open "C:\Sample\Book1.xlsx"
Worksheets.Copy after:=ThisWorkbook.Worksheets(ShCount)
Workbooks(Filename).Close savechanges:=False
For Each Sh In Worksheets
Sh.Visible = True
Next
End If
End Sub