【EXCEL:VBA】他のEXCELファイルのデータを取り込みたい

他のEXCELファイルのデータを取り込みたい

この記事では、VBAを使って他のEXCELファイルのデータを読み込み、自EXCELのシートに貼り付ける機能の作り方を説明します。

 

読み込みするEXCELファイルのシートを指定可能、貼り付け先のEXCELファイルのシートも指定可能となっています。

 

このVBAはいろいろな便利な機能を作るときに、利用できますのでぜひご覧ください。

 

困っている女性

他のEXCELファイルのデータを簡単に取り込む方法を知りたいな・・・。
VBAで他のEXCELファイルのデータを取り込む自作関数を作ればいいよ。

解決する男性

困っている女性

本当?それって簡単?
簡単だよ。いますぐ使える!!

解決する男性

困っている女性

それじゃあ、早く教えてよ。

 

◆似たような作業で、指定されたフォルダに存在するすべてのCSVファイルを一気に取り込みする方法については、以下の記事を参照してください。

 

◆似たような作業で、単純に1つのCSVファイルを取り込みする方法については、以下の記事を参照してください。

 

手っ取り早く当ツールを使いたい方は、以下で「ダウンロード購入」できます。

BOOTH)他のEXCELファイルのデータを取り込みたい:【ExcelVBAツール】

 

Youtube動画に「他のEXCELファイルのデータを取り込みするVBAツール」の作り方をアップしました。

よかったら、見てください。

 

それでは、他のEXCELファイルを取り込む機能の作り方を順番に説明していきます。

1.取り込まれるEXCELファイル(xlsx)を準備する

なにはともあれ、取り込まれるEXCELファイルを準備します。

取り込み対象のEXCELファイル

取り込み対象のEXCELファイル

適当なファイル名でEXCELを作成し、「Sheet1」にデータを入力しておきます。

 

2.取り込み機能を実装するEXCELファイル(xlsm)を準備する

VBAを記述しますので、xlsm形式でEXCELファイルを作成します。

取り込むEXCELファイルを指定するセルを用意する

取り込むEXCELファイルを指定するセルを用意する

「Sheet1」に以下を指定するセルを用意します。

  • 取り込むEXCELファイルのパス(セルB1)
  • 取り込むEXCELファイルのデータが存在するシートNO(セルB2)
  • 取り込んだデータを出力するシートNO(セルB3)
  • 取り込んだデータを出力を開始するセル(セルB4)

 

3.EXCEL取り込み機能をVBAで作成する

「取り込むEXCELファイルのパス」と「取り込むEXCELファイルのデータが存在するシートNO」を引数に持つEXCEL関数を作成します。

EXCELデータ取り込み関数

EXCELデータ取り込み関数

Public Function GetExcelData(ByVal FilePath As String, ByVal SheetNo As Integer) As Variant
    Dim wb As Workbook
    Dim ws As Worksheet
    
    'ワークブックを開く
    Set wb = Workbooks.Open(FilePath)
    
    'シートを取得
    Set ws = wb.Worksheets(SheetNo)
    
    'データ入力されている範囲を取得する
    GetExcelData = ws.UsedRange
    
    'ワークブックを閉じる
    wb.Close
    
    'メモリー開放
    Set ws = Nothing
    Set wb = Nothing
    
End Function

上記の関数は、EXCELファイルから取り込んだデータを配列に格納して返します。

 

次に、先程のEXCELデータ取り込み関数を利用する関数を作成します。

EXCELデータ取り込み関数を利用する関数

EXCELデータ取り込み関数を利用する関数

Public Sub Test1()
    Dim var As Variant
    Dim FilePath As String
    Dim InSheetNo As Integer
    Dim OutSheetNo As Integer
    Dim OutCell As String
    
    With ThisWorkbook.Sheets(1)
        FilePath = .Range("B1")
        InSheetNo = .Range("B2")
        OutSheetNo = .Range("B3")
        OutCell = .Range("B4")
    End With

    
    '他のEXCELファイルデータを取り込む
    var = GetExcelData(FilePath, InSheetNo)
    
    Dim MaxRow As Long
    Dim MaxCol As Long
    
    '最大行数を取得する
    MaxRow = UBound(var, 1)
    
    '最大列数を取得する
    MaxCol = UBound(var, 2)
    
    '自ワークブックの1番目のシートのセルA1を基点に取り込んだデータを出力する
    ThisWorkbook.Sheets(OutSheetNo).Range(OutCell).Resize(MaxRow, MaxCol).Value = var
    
End Sub

この関数は、「Sheet1」に指定されている以下を読み込み、利用します。

  • 取り込むEXCELファイルのパス(セルB1)
  • 取り込むEXCELファイルのデータが存在するシートNO(セルB2)
  • 取り込んだデータを出力するシートNO(セルB3)
  • 取り込んだデータを出力を開始するセル(セルB4)

 

4.作成したVBAプログラムを動かす

「開発」タブの「マクロ」をクリックします。

マクロから自作関数を呼び出す

マクロから自作VBAプログラムを呼び出す

 

先ほど作成したVBAプログラムを選択し、「実行」をクリックします。

自作した関数を実行する

自作した関数を実行する

 

作成したVBAプログラムが動き、指定したEXCELファイルからデータを取り込み、指定したシートにデータが出力されました。

他のEXCELファイルのデータが読み込まれた

他のEXCELファイルのデータが読み込まれた

取り込みEXCELファイルのデータを変更して、試してみてください。

以上です。

 

 

手っ取り早く当ツールを使いたい方は、以下で「ダウンロード購入」できます。

BOOTH)他のEXCELファイルのデータを取り込みたい:【ExcelVBAツール】

 

📘 Noteで完全解説版を公開中

この記事の「完全解説版」をNoteで公開しています。

  • エラーハンドリング付きの完全なソースコード
  • 「取り込み先のシートを選択できる」応用パターン
  • 複数ファイルを一括取り込みする発展コード
  • よくあるエラーと対処法まとめ

ExcelVBA:他のファイルのデータをワンクリックで取り込む完全解説(500円)

最後まで読んでいただきありがとうございました。
この記事をシェアしていただけると喜びます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です