• 締切済み

[EXCEL]外部エクセルの値の参照

複数のエクセルファイルがあり、それぞれパスやファイル名が異なります。それぞれのファイルのパスの一覧の情報値を元に、各ファイルの指定セルを取得する関数はないでしょうか? indirect関数を用いた場合、そのファイルを開いておかなければならい欠点があるため、良い方法があればアドバイスを頂ければと思います。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.1

関数ではないが、 VBE画面を開き、標準モジュールに下記を貼り付け、実行する。 Sub test01() Set moapp = CreateObject("Excel.Application") ' moapp.Visible = True Set wb = moapp.Workbooks.Open("C:\Documents and Settings\XXX\My Documents\社員1.xls") MsgBox wb.Worksheets("Sheet1").Range("A18") End Sub Sheet1のA18のセルの値が表示され、ステータスバーには、2つめのエクセルは出ません。moapp.Visible = True とすると違ってきます。 Open()内のパス・ファイル名を色々変えて、重ねて実験してみて下さい。結果はどうでしょうか。 >そのファイルを開いておかなければならい 上記もあくまで見かけだけのことで、 (1)コンピュターの大原則の、メモリに外部記憶装置のディスクの情報を読み込まないと、中身を知ることができない。 (2)エクセルファイルは、そのファイル・フォーマットを読めるソフト(通常はMSエクセル、またはそのインサイド知識のある技術者がエクセルを読む目的で作ったソフト)を起動しないと、適切に処理(データを再現)できない。 ので、できるという、変な幻想を抱かないこと。 通常のエクセル関数は、質問のような、そこまで考えてはいないと思うので、実現不可能かと思う。 ーーー 上記のユーザー関数化 Function aaa(a) Set moapp = CreateObject("Excel.Application") ' moapp.Visible = True f = "C:\Documents and Settings\OTO\My Documents\" Set wb = moapp.Workbooks.Open(f & a) aaa = wb.Worksheets("Sheet1").Range("A18") End Function (A18の部分は適当なセルに変えること) を標準モジュールに貼り付ける。 開いているワークシートのセルで =aaa("社員1") と入れると、セルの情報がセットされるでしょう。

h-g-s
質問者

お礼

>imogasi様 遅くなりましたが、ありがとうございます。 やはりVBAなりVBSで組み込まなければならないですね。 確かに言われている通り、PCの原則を考えてみればExcelでそこまでを実現していそうにはないですよね。 全てを動的にExcelの関数のみで処理しようとしたのがそもそもの間違いでした。とりあえず、Hyperlinkでファイルを開く程度で留めておくことにしました。

関連するQ&A