• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:excel VBAについて)

Excel VBAで別ファイルの値を参照する方法

このQ&Aのポイント
  • Excel VBAでは、別のExcelファイルの値を参照する方法があります。マクロを保存しておいたファイル(file1)を開いた状態で、新しいファイル(file2)から値を参照することができます。毎回同じように作るfile2には、値が変わってもセルの場所は毎回同じになります。
  • 具体的には、Excel VBAのコードでfile2を作成し、file2に値を書き込むことによって、file1でそれらの値を参照することができます。これにより、毎回同じセルに値が入るようになります。
  • この方法を使えば、file2を毎回手動で作成する必要がなくなります。コードを書いておけば、自動的にfile2が作成され、file1から値を参照することができるようになります。

質問者が選んだベストアンサー

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.4

> できればfile2を適当な名前で作った時にも値を持ってこられるようにしたいのですが、、、 もし、エクセルのファイルをfile1とfile2の2個しか開いていないのでしたら For i = 1 To Workbooks.Count If ThisWorkbook.Name <> Workbooks(i).Name Then file2 = Workbooks(i).Name End If Next i とすることで、どのようなファイル名でも対応できます。 複数開いている場合には、何をもってfile2だと判断できるのかによって対応が違ってきます。 たとえば、ファイル名に一定のワードを必ず入れてもらうようにするのでしたら、同じような感じで For i = 1 To Workbooks.Count If Workbooks(i).Name Like "*一定のワード*" Then file2 = Workbooks(i).Name End If Next i で対応できます。 もし、フォルダの中で一番新しいファイルと決まっているのでしたら i = 1 ChDir ThisWorkbook.Path f = Dir("*.*") file2 = f Do While f <> "" buf = f If FileDateTime(file2) < FileDateTime(buf) Then file2 = buf End If i = i + 1 f = Dir() Loop などのような手段があります。 > 参照という言い方が悪かったかもしれません(・・;) > 新たに作るfile2にはfile1で必要な値がいくらかあり、 > それを持ってきたいのです Range("A1") = Workbooks(file2).Sheets("Sheet1").Range("A1") みたいな感じでfile2の内容をfile1に持ってこれます。同一ファイルのセルの値をセルに代入するのと同じでWorkbooks(file2)でファイル名を追加するだけです。

lostsymbol
質問者

お礼

すごい!! 完全に求めていたものです!(^^)! 何度も回答していただき最後まで付き合ってくださりありがとうございました<(_ _)>

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.3

> 同じ名前のファイルを同時に開くことができるのでしょうか? すみません。慌てて回答したので意味不明な事を書いてしまいました。先の回答は忘れてください。 file2から値を参照したいという事は、file2のセルに=[file1]Sheet1!$A$1のような式をfile1のマクロで書き込みたいということだと思ったので、それでしたらfile2のファイル名を同じにしておけばfile1のマクロは変更する必要がないのではないでしょうかと伝えたかったのですが、意味不明なことを書いてしまいました。 ただ、file1のデータが変更されないとか、その時点でのデータが必要なのでしたら、file2からfile1を参照するよりfile1のデータをfile2に書き込むようにしてしまった方が、いいのかなとは思います。 file2のSheeet1のA1にfile1のモジュールの存在するシートのA1のデータを書き込む Workbooks("file2").Sheets("Sheet1").Range("A1") = Range("A1") で、file1のマクロを実行するときにfile2が開いていないとエラーになるので For i = 1 To Workbooks.Count If file2 = Workbooks(i).Name Then flg = True End If Nexti で開いているファイ名を取得してfile2がなければfile2を開くと書きかかったのですがむちゃくちゃ半端でした、すみません。

lostsymbol
質問者

補足

file1のマクロに名前を指定しておいて、file2を作る人にこういう名前で作ってね! と伝えておけばよいのでしょうが、 できればfile2を適当な名前で作った時にも値を持ってこられるようにしたいのですが、、、 参照という言い方が悪かったかもしれません(・・;) 新たに作るfile2にはfile1で必要な値がいくらかあり、 それを持ってきたいのです 伝わりにくいかもですがよろしくお願いします!

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

file2を同じファイ名にしておけばいだけだと思われます。 また、file2を開くのでしたら For i = 1 To Workbooks.Count tmp = Workbooks(i).Name Next i ファイルエイ名が参照できますので同じファイル名時に開けばいいのでないでしょうか。

lostsymbol
質問者

補足

同じ名前のファイルを同時に開くことができるのでしょうか?

  • shut0325
  • ベストアンサー率40% (490/1207)
回答No.1

どのみちFile1を開いているのなら、File1からFile2へ値を送ればよいのではないでしょうか? 或いはマクロをPersonal.xlsbに保存しておいて、新規書類(ここではFile2)を作成して、File1とのリンク設定をするマクロをする、、というようなやり方もあります。

lostsymbol
質問者

補足

値を送るとは具体的にどうすればいいのでしょうか??

関連するQ&A