VBAで他のエクセルファイルから指定した範囲を2次配列で取得する

他のブックを開いてデータを持ってきたい事はよくあるけど、

毎回ブック開くときどう書くんだっけってなるので使いやすいコードを作った。

動き

4つの情報を指定すれば範囲にあるデータを2次配列として取得してくれる。

  • パス
  • ファイル名
  • シート名
  • 取得範囲(開始行、開始列、終了行、終了列)

読み込むエクセル

ファイル名:test.xlsx

シート名:Sheet1

こんな感じで適当なデータを準備する。

A B C
1 No ヘッダ1 ヘッダ2
2 1 2,2 2,3
3 2 3,2 3,3
4 3 4,2 4,3

コードを実行

ファイル名:ブックから配列.xlsm

Sub test()
    パス = ThisWorkbook.Path & "\"
    ファイル名 = "test.xlsx"
    シート名 = "Sheet1"
    開始行 = 1
    開始列 = 1
    終了行 = 10
    終了列 = 5
    
    取得したデータ = ブックから2次配列を返す(パス, ファイル名, シート名, 開始行, 開始列, 終了行, 終了列)
    
    For x = 1 To UBound(取得したデータ, 1)
        For y = 1 To UBound(取得したデータ, 2)
            Debug.Print 取得したデータ(x, y)
        Next
    Next
End Sub
Function ブックから2次配列を返す(パス, ファイル名, シート名, 開始行, 開始列, 終了行, 終了列)
    Dim ブック As Workbook
    Set ブック = Workbooks.Open(パス & ファイル名)
    With ブック.Worksheets(シート名)
        ブックから2次配列を返す = .Range(.Cells(開始行, 開始列), .Cells(終了行, 終了列))
    End With
    ブック.Close (False)
End Function

testプロシージャはファイル名などの指定を行う。

データ取得部分は「ブックから2次配列を返す」という関数で処理する。

関数内では対象のブックを開き、A1からC4の範囲を2次配列として呼び出し元へ返す。

testプロシージャでは「取得したデータ」という配列で受け取っている。

「取得したデータ」は2次配列なのでforを2つ重ねて値を取り出す。

ここでは取り出したデータをdebug.printでデバッグへ出してみた。

デバッグの結果

No
ヘッダ1
ヘッダ2
 1 
2,2
2,3
 2 
3,2
3,3
 3 
4,2
4,3

最後に

複数のブックから情報を取り出したい時に重宝すると思い作った。

かなり使えるんじゃないかな!

コメント

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