1つのBookに、以下の名前の2つのシートを用意する
・Data
・FileList
シート:FileListには、A1のセルから下に向かって
A1:C:\data01.xls
B1:C:\data02.xls
C1:D:\data03.xls
という具合にファイル名のパスを記述する(ここで記述するファイル名のパスは、このBookを利用する毎に入れ替える)
シート:Dataには、A1のセルから下に向かって
A1: FileList!A1で指定したファイルパス(=C:\data01.xls)のSheet1のA1のセルの値
B1: FileList!B1で指定したファイルパス(=C:\data02.xls)のSheet1のA1のセルの値
C1: FileList!C1で指定したファイルパス(=C:\data03.xls)のSheet1のA1のセルの値
を埋め込みたい。
この場合、Data!A1やData!B1等に埋め込むセルの式はどのようにしたらよいでしょうか?
Excelの式だけでは、ブック名への外部参照をダイナミックに変えることはできません。→ と、思います。
つまり、[C:\data01.xls]Sheet1!$A$1のうち、[ファイル名]部分に参照の式が書けないということです。
●逃げ手
FileListに記載するファイルが少なく、参照セルも少ないのであれば、FileListシートに作らず、最初からDataシートにファイル名を書いて、それを修正すればいいと思います。
きっと私ならそうします。
FileList!A1に書くのも、Data!A1に書くのも同じことだからです。
参考: http://oshiete1.goo.ne.jp/qa425552.html
●マクロなら
ファイル数が多かったり、1個のファイルから複数セルを参照していて個別に書き換えができないときは、次のマクロで希望のことが実現できます。
1.Data!A1へ入れる式
=eval("[" & FileList!A1 & "]Sheet1!A1")
2個目も同様に書きます。FileList!B1の感じで。
2.マクロ
関数を書き、式の結果を受け取れるようにします。難点は、このように別シートに値があると、自動更新されない点です。同一シートなら自動更新されました。
そのために、RefreshCellsというマクロを載せておきました。
内容が変わったときは、Dataシートで適当な範囲選択して、RefreshCellsマクロを動かすと、セルが全部正しい内容に変わります。
Option Explicit ' (1)文字列を式とみなすようにするマクロ Public Function Eval(eValStr As String) As Variant Eval = Evaluate(eValStr) End Function ' (2)リフレッシュするマクロ Public Sub RefreshCells() Dim P As Range For Each P In Selection SendKeys "{F2}", True SendKeys "{ENTER}", True Next P End Sub
P.S.
>FileListには、A1のセルから下に向かって A1:C:\data01.xls B1:C:\data02.xls・・・
→ これは右に向かってますね。下ならA1,A2・・・ですね。
Excelで文字列を使用した参照をする場合「INDIRECT関数」というものがあります。
これは参照元のブックが開かれていないとエラーになってしまいますが、
逆に参照元のブックの名称に重複がなく、全てを開けておく事が可能なら、
FailListにはパスでなく、ブック名のみを記入し、
Dateシートには
A1=INDIRECT("["&FailList!A1&"]Sheet1!A1")
の数式で参照することが出来ます。
http://office.microsoft.com/ja-jp/excel/HP052091391041.aspx
以上ご参考まで。
回答者 | 回答 | 受取 | ベストアンサー | 回答時間 | |
---|---|---|---|---|---|
1 | mj99 | 138回 | 127回 | 38回 | 2007-06-17 02:03:56 |
コメント(0件)