Excel VBA 指定したファイルを読み込む

ファイル/フォルダ操作

今回は指定したファイルを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

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