エクセルマクロ(EXCEL VBA)

エクセルマクロ(EXCEL VBA) その21 別ファイルを参照してコピー

別ファイルを参照してコピー

ここまでで、セルからセルへのコピー、別シートのセルからのコピーなどをやってきましたが、別ファイルにあるセルからコピーすることはできるのでしょうか?

結論としては「できる」ので、そのやり方についてご紹介します。

こんなエクセルファイルがあったとします。(その20の宿題で使ったファイルです。)

観劇リスト

エクセルファイルをダウンロード

これをダウンロードして、一つのフォルダの中に入れておきます。
同じフォルダで、新規のマクロ有効ブック yomikomi.xlsm を作っておきます。

同じフォルダに入れる

yomikomi.xlsm の方を開いて、いつものように開発→Visual Basic、
挿入→標準モジュールからプロシージャを作りましょう。

2つのファイルを指定する

今回は2つのエクセルファイルを扱うので、区別するために名前を付けておきましょう。
今開いているエクセルファイルをwb1とするためには、以下のように書いてください。

Set wb1 = ThisWorkbook

エクセルファイルを変数に入れる場合には、Setというのが必要です。

同様に、参照先のファイルを指定しましょう。
参照先のファイルはまだ開いていない閉じてる状態なので、開く(Open)必要があります。
ちょっと長いですが、こんな風に書いてください。

Set wb2 = Workbooks.Open(ThisWorkbook.Path & "¥hw20_sakuhin_list.xlsx")

パスを指定してファイルを開く

赤線が「エクセルファイルを開く」という命令、
青線が「このマクロファイルがあるフォルダ」という部分で、緑線は、新たに開きたいファイル名を「&」でつないでいるという部分です。¥は、フォルダの階層を降りるときの記号ですので、ファイル名の前につけておく必要があります。

今回はThisWorkbook.Pathという風に書きましたが、フルパスで書くこともできます。
ファイルを右クリックしてプロパティを開くと、場所: というところにそのファイルのフルパス(完全な住所)が書いてあるのでそれをコピペしても大丈夫です。その場合も、パスとファイル名は「¥」でつないでください。

フルパスでも大丈夫

 

ファイル間でコピー

これで2つのファイルを扱う準備ができたので、hw20_sakuhin_list.xlsx の「観劇リスト」のA8にある「リチャード三世」を、
今のファイルのA1に入れてみましょう。

wb1.Sheets("sheet1").Cells(1, 1) = wb2.Sheets("観劇リスト").Cells(8, 1)

と書いてください。

参照元のセルからコピペ

これを実行すると、

参照先のファイルから「リチャード三世」を取り出すことができました!

 

ファイルを閉じておく

参照元のファイルは閉じておきましょう。

wb2.Close

こちらを追加してください。

これで、参照元のファイルは一度開いて、その後閉じられるようになります。

 
今回の最終的なコード

Sub yomikomi()
Set wb1 = ThisWorkbook
Set wb2 = Workbooks.Open(ThisWorkbook.Path & "¥hw20_sakuhin_list.xlsx")

wb1.Sheets("sheet1").Cells(1, 1) = wb2.Sheets("観劇リスト").Cells(8, 1)
wb2.Close
End Sub

※追記
Mac版エクセルでこのコードを実行してみたところ、パスがうまく通りませんでした。
「¥」となっているところを「:」に置き換えると上手くいきましたのでMacユーザーの方は修正してお使いください。
 
 

宿題-21

先程の hw20_sakuhin_list.xlsx を参照し、
「観劇リスト」のA列を新規ファイルのA列にコピーし、
「良かった公演」のA列を新規ファイルのB列にコピーしてください。

エクセルマクロ(EXCEL VBA) その22 今日の日付を取得(NowとDate)
 
(文:森脇孝/エントレ)

関連記事一覧