プロが教えるわが家の防犯対策術!

コードの書き方が分からないのですが、

一つもともとあるexcelファイル(file1)にマクロを保存しておいて

それを使うときに新しく必要な情報が入った上のとは別のexcelファイル(file2)を作ります

そしてfile1を開いた状態でfile2から値を参照するにはどうすればよいのでしょうか?


つまり今file2はありません

しかしfile2を作りそこから参照したいときににコードをさわらなくてもいいように書きたいのです

file2は毎回同じように作るので値は変わっても場所は毎回同じセルに入ります



説明が下手で質問が分かりづらいとは思うのですがどうかよろしくお願いいたしますm(__)m

A 回答 (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)でファイル名を追加するだけです。
    • good
    • 0
この回答へのお礼

すごい!!
完全に求めていたものです!(^^)!

何度も回答していただき最後まで付き合ってくださりありがとうございました<(_ _)>

お礼日時:2014/06/05 14:32

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



すみません。慌てて回答したので意味不明な事を書いてしまいました。先の回答は忘れてください。

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を開くと書きかかったのですがむちゃくちゃ半端でした、すみません。

この回答への補足

file1のマクロに名前を指定しておいて、file2を作る人にこういう名前で作ってね!
と伝えておけばよいのでしょうが、
できればfile2を適当な名前で作った時にも値を持ってこられるようにしたいのですが、、、

参照という言い方が悪かったかもしれません(・・;)
新たに作るfile2にはfile1で必要な値がいくらかあり、
それを持ってきたいのです

伝わりにくいかもですがよろしくお願いします!

補足日時:2014/06/04 10:36
    • good
    • 0

file2を同じファイ名にしておけばいだけだと思われます。



また、file2を開くのでしたら

For i = 1 To Workbooks.Count
tmp = Workbooks(i).Name
Next i

ファイルエイ名が参照できますので同じファイル名時に開けばいいのでないでしょうか。

この回答への補足

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

補足日時:2014/06/03 08:31
    • good
    • 0

どのみちFile1を開いているのなら、File1からFile2へ値を送ればよいのではないでしょうか?



或いはマクロをPersonal.xlsbに保存しておいて、新規書類(ここではFile2)を作成して、File1とのリンク設定をするマクロをする、、というようなやり方もあります。

この回答への補足

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

補足日時:2014/06/03 08:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!