- ベストアンサー
セルのデータを使って、ファイルを参照する方法
現在aaa.xlsというファイルを開いていて、 そのセルA1には20070620という数値が入っています。 別にbbb_20070620.xlsというファイルがあって、 そのファイルのshhe1内の、B1の値を参照したいと思います。 こんな感じかなと想像したのですが、うまくいきません。。 ↓ =["bbb_" "& A1 &"".xls"]sheet1!B1 初歩的な質問ですいませんが、 どなたかよろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
=INDIRECT("[bbb_"&A1&".xls]Sheet1!B1") で参照できます。
その他の回答 (2)
参照するファイルが固定であれば、 ・数式を文字列として生成してから数式に変換 http://oshiete1.goo.ne.jp/qa3002935.html というアプローチでなんとかなります。 しかし、参照するファイルが頻繁に増えたり変わったりする場合は 上記の方法では、その都度リンクを貼り直す必要がありますから、 やはりマクロを使用する他ないように思われます。 例えばこんな感じでしょうか。 動作の概要 (下記マクロが記述されているシートの)A列が変更されたとき、 「myStrで指定した数式雛形の"【Date】"の部分を、変更されたA列のセルの値で置き換えた数式」 を、変更されたセルの右隣(B列)のセルに貼る。 Private Sub Worksheet_Change(ByVal Target As Range) '↓参照するファイルの場所に応じて書き直す(フルパスで) myStr = "='C:\Documents and Settings\USER\My Documents\[bbb_【Date】.xls]Sheet1'!$B$1" For Each myCell In Target If Target.Column = 1 Then '←数値の入っている列の列番号 myCell.Offset(0, 1).Formula = Replace(myStr, "【Date】", myCell.Value) End If Next myCell End Sub なお、INDEX関数が閉じたブックに対して使用できるというのは事実ですが、 そもそも、INDEX関数は引数として「セル参照」を必要とします。 ご質問での課題は「文字列からセル参照を取得するには?」ということですから、 「文字列からセル参照を取得する」関数INDIRECTを、 「セル参照から特定のセルを取得する」関数INDEXで代用することはできません。
お礼
丁寧なご回答ありがとうございます! INDEX関数をあきらめて、マクロに取り組んでいる最中だったのですが、やはり一つずつファイルを開くしかないのかな・・・、と思っていたところでした。 おかげさまで、とても役に立ちました。^^
- imogasi
- ベストアンサー率27% (4737/17069)
答えは既に出ていますが、アドレスを指定するので、文字列だけで表してもダメで、 (1)可変部分A1を使いつつ文字列を作る (2)その文字列に対し、アドレスとして採ってもらうため、INDIRECT関数を使います。 (1)において=["bbb_" "& A1 &"".xls"]sheet1!B1 []と!を使ったところは良いのですが 2箇所の””はおかしい。 正しくは=INDIRECT("[社員" & A1 & ".xls]社員表1!C5") のような書き方になります。
補足
丁寧なご回答ありがとうございます! 参照先のファイルが山のようにあるので、開かなくても使えるindex関数を使用したいところです。。 INDIRECTと同じような使い方は難しいでしょうか。。 やはりマクロになりますでしょうか。。
お礼
早速ありがとうございます! 言葉足らずで申し訳なかったのですが、INDIRECTだとファイルを参照先ファイルを開いていないといけませんよね。。 でも大きなヒントになり、過去ログで調べてみて解決しました。 =INDEX("[bbb_"&A1&".xls]Sheet1!A1:C20,1,2") こんな感じで解決しました。 本当にありがとうございました!
補足
・・下の御礼を書いた後で申し訳ありません。。 私の勘違いで、INDEX関数では、下記のような書き方はエラーになりました。。 ・・[bbb_"&A1&".xls]・・ 何か良い方法はないものでしょうか。。