VBAで他ブックのセルを取得・格納する
今回の目標
- 他のエクセルファイルの値を取得できるようになる
- 他のエクセルファイルのセルへ値を格納できるようになる
説明
事前準備
- 指定したシートのセルの値を取得方法が分からない場合、こちらから学習ください。
- サンプルプログラムを実行する場合は、新規作成から新しくブックを作成、"Book2.xlsx"として保存し、閉じずに保存してください。
マクロを実行しているエクセルファイルのセルの値を取得する
「何を言っているんだ?普段、何を指定しなくても取得できているではないか?」と思われるかもしれません。しかし、その考えは違います。ExcelVBAではブックを指定しないとき、アクティブなブックをセルの値を取得します。
2つ以上のブックにまたがるマクロを作りたいときは必ずブックの指定を行いましょう。油断しているとバグとしてあなたを襲ってくるかもしれません。
では、基本構文です。
' マクロを実行しているエクセルファイルのセルの値を取得する
buf = ThisWorkBook.WorkSheets("Sheet1").Cells( 1, 2)
シートの指定の前に、”ThisWorkBook.”とつけるとマクロを実行しているブックから値を取得できます。ブックを指定する場合は、必ずシートを指定する必要があるので注意してください。ブック⇒シート⇒セルの順番で指定ください。忘れそうな方は次の画像を見てください。
外から順に、ブック⇒シート⇒セルとなっており、ブックの中にシートがあり、どのセルかを指定するイメージです。
他のエクセルファイルのセルの値を取得する
基本構文です。
' 他のエクセルファイル(Book2.xlsx)のSheet1のセルB1の値を取得する
buf = WorkBooks("Book2.xlsx").WorkSheets("Sheet1").Cells( 1, 2)
マクロを実行しているブックでないブックからセルの値を取得するときは、[WorkBooks("ブック名").]とシートの前につけます。
他のエクセルファイルのセルへ値を格納する
基本構文です。
' 他のエクセルファイルのセルへ値を格納する
WorkBooks("Book2.xlsx").WorkSheets("Sheet1").Cells( 1, 2) = "ABC"
マクロを実行しているブックでないブックへセルの値を格納するときは、[WorkBooks("ブック名").]とシートの前につけます。
誤ったマクロを実行してしまうと、マクロの仕様上、Undo(Ctrl+Z)が効きません。注意してシートを指定しましょう。
他のエクセルファイル(Book2.xlsx)のSheet1のセルB1に値を格納する
基本構文です。復習として簡単に載せておきます。
' マクロを実行しているブックのシート1のセルA2の値をBook2.xlsxのSheet1のセルB1に格納する
WorkBooks("Book2.xlsx").WorkSheets("Sheet1").Cells( 1, 2) = _
ThisWorkBook.WorkSheet("Sheet1").Cells( 2, 1)
いかがでしたか。エクエルマクロを本格的に学ぶ人にとって、他ブックの操作は避けては通れない道です。ブックの指定をする場合、シートの指定も必須になるため、入力する文字が多くなります。
この入力の手間は「With構文」や「Set」を使用すると軽減できます。With構文を使うと、コードの見通しが良くなります。詳しくは「With構文をマスターする!便利な使い方と注意点まとめ」をご覧ください。
また、Setを使うとブックを変数に代入できるのですが、Setはクセがあります。
Setは若干難しいため、Withから使えるようになると良いでしょう。