他のブックを開いてデータを持ってきたい事はよくあるけど、
毎回ブック開くときどう書くんだっけってなるので使いやすいコードを作った。
動き
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
VBAはどうやって覚える?
プログラムのコードが読めないと、参考にしているコードの理解や自分でプログラムを書くときに時間がかかってしまいます。そんな時は基礎から学ぶと応用もできるようになり自分の作りたいプログラムがスムーズに作れるようになります。
無料でやるならネット上の学習サイトを参考にするといいです。
こちらはVBAの基礎から説明している無料のWEBサイトになります。
>>基礎から学べるWEBサイトを見てみる
過去にネットでの学習でつまずいた方には専門書をオススメします。
本なら基礎から学べる事はもちろん、読者視点で分かりやすい解説になっています。
一人で集中してコツコツ進めたい方は書籍を試してください。
本を読んでもわからない所が多すぎたり、誰かに質問したい場合はオンラインスクールを見てみましょう。
カウンセリングから目的に応じた学習プランと教材を提供してくれるので、プログラミングの敷居がとても低くなります。
誰かに相談できるのは心強いです。
>>オンラインスクールを無料体験で始める
最後に
複数のブックから情報を取り出したい時に重宝すると思い作った。
かなり使えるんじゃないかな!