1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Q15.別のブックのセルを参照するには?

Last updated at Posted at 2020-01-22

今回は別のエクセルファイルから値を参照していく方法を考えていきます。
以前は別のシートから値を参照する方法を扱いました。
それの少し応用したバージョンです。

Q15.png

このようにデータ.xlsxとマクロテスト.xlsmというファイルを用意しました。
マクロテストが読み込みを行うファイルで、データ.xlsxが読み込むデータが記載して
あるファイルとなります。

データ.xlsxの中身は以下のようになっています。

Q15-2.png

これを読み込んでマクロテストの中にある全体シートに追記していくには?というのを
考えていきましょう。
マクロテストの全体シートはこんな感じです。

Q15-3.png

ちょうどB16セルが開いているので16行目にデータを反映させたいですね。

■ポイント

別のブックからセルを参照する場合、すでに開いているのと何も開いていないのでは
処理がことなります。
すでに開いている場合はそのまま
Range("B16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("B3").Value
のように記述することができますが、この場合は対象となるブックが開いていない場合、
読み込めなくてエラーとなってしまいます。

例えば、開いているかいないかというのを前もって確認してそれに
合わせて処理を記述する方法などありますが、今回はシンプルに
もともと開いていない場合を想定して、
対象のブックを開く → 特定のセルの値を参照する
という流れでマクロを作っていきましょう。

ブックを開くのは簡単です。
Workbooks.Open Filename:="絶対パス"
となります。ディレクトリによってはファイル名だけでも開くことができますので、
状況によって使い分けていきましょう。

■回答

Sub Q15_Answer()
    Dim wb As Workbook
    Set wb = ThisWorkbook
    Dim ws As Worksheet
    Set ws = wb.Worksheets("全体")
    
    Workbooks.Open FileName:=("C:\Users\user\Desktop\work\VBAマクロ\データ.xlsx")
    ws.Range("B16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("B3").Value
    ws.Range("C16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("C3").Value
    ws.Range("D16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("D3").Value
    ws.Range("E16").Value = Workbooks("データ.xlsx").Worksheets(1).Range("E3").Value
    
    ws.Activate
    
    Set wb = Nothing
    Set ws = Nothing
    
End Sub

■解説

まず、 ワークブックとワークシートを格納する変数を宣言し、読み込み先である
全体シートを代入しています。
これは、シートを参照する記述をするときに短く見やすくする為です。
読み込み元も同様に変数に入れるとさらに見やすくなります。

次に Workbooks.Open FileName:=("C:\Users\user\Desktop\work\VBAマクロ\データ.xlsx")
で、読み込み対象となるブックを開いています。
パスは適宜、環境に合わせて変更してください。

ちなみに、すでに対象のブックを開いている状態で、この開く処理が実行されたと
してもエラーで止まるということはありません。そのまま後続の処理が流れます。

あとは、直接、対象のセルを参照するだけです。
最後のws.Activateは、データを代入したあとはデータ側のセルがアクティブになってしまうからです。
この1文を入れることで、最終的に全体シートをアクティブにしています。

実行結果はこのとおりです。無事にコピーできました。

Q15-4.png

1
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?