こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ファイル名やシート名、パス等の変更を参照する方法

エクセルで他のファイルや他のシートのセルを参照している場合に、環境の変化で他のファイル名やパスが変更されたり、シート名が変更されると「ファイルが見つかりません。」というメッセージが表示され、影響が出たセルの数だけ利用者が元のファイルやシートを探す羽目になり、操作上の面倒を強いられております。
この場合、この様な手間を掛けないで済むよう予め変数を設定するセルを用意しておくように修正したいと思います。
環境に変更が生じた場合は、この変数を設定したセルだけを変更すれば個々のセルに影響が出ないようにすることが望ましいと考えますが、実際にどのようにすれば実現できるのかエクセルの関数等を調べても判りません。
具体的にファイル名やシート名、パス等の環境を設定するセルと、それを参照するセルの関係を下記の例で、
(1)参照するセルXの設定内容
(2)ファイル名やシート名、パスを自動的に設定したり、参照する方法
以上のご教示を、よろしくお願いいたします。

セルA:ファイル名を変更設定するセルで、内容:Table01
セルB:シート名を変更設定するセルで、内容:Sheet01
セルC:パスを変更設定するセルで、内容:D:\Data\Table
セルX:参照するセルで、変更前の内容:C:\Data\Table\[TableA.xls]SheetA'!C5

投稿日時 - 2003-11-08 15:05:00

QNo.700349

すぐに回答ほしいです

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

#1です。#1で出来ないと言いましたが、訂正します。下記で出来ると思います。
Sheet1のB1セルに「Sheet3」、C1に「A1」と入っているとき、Sheet3のA1セルの値を持ってくるには
例えばSheet1に関数=INDIRECT(B1&"!"&C1)を入れると
値を引いてきます。ブックの場合も
B3にaa1.xls(ブック名)
C3にTEST(シート名)
D3にA1として
=INDIRECT("["&B3&"]"&C3&"!"&D3)で値を引いてきました。

投稿日時 - 2003-11-08 22:23:34

お礼

本件は追試をして確認しました。
意外と簡単なことで解決したので、驚きでした。
2度に渡り、解決へ導いて頂き、感謝してます。
本当にありがとうございました。

ついでながら、SUM関数の対象セルに対してこれを下記のように応用したのですが、シート間で上手く行きません。
=SUM(INDIRECT("["&B3&"]"&C3&":"&C4&"!"&D3))
同じシート行や列ではOKですが、シート間ではNGでした。
これは自分で調べてみます。

投稿日時 - 2003-11-09 04:07:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

エクセルで、セルを間接的に指定するINDIRECT関数と似た機能をシート名やブック名にも適用する関数が無いかとの質問だと、私は解釈しました(違っていたらごめんなさい)。
Sheet1のB1セルにsheet3!a1と入れておき、=INDIRECT(B1)としてsheet3!a1を参照することは可能です。
しかしSheet3の部分を別セルに文字列にしたり、A1も別セルにして、=INDIRECT(B2)!INDIRECT(C2)などが出来ないと思います(B2にSheet3、C2にA1を文字列で入っているとき)。
なにか範囲名を使うことで出来ないかとも考えましたが。
私はエクセルの知識が中途半端な者ですが、「無い」と思います。
方法が「ない」と言うのは、後で回答が出ると無知を曝すわけで、言いい難いですが、本など一通り調べましたが見つかりませんでした。
普通エクセルの質問に対しては、すぐ回答が入るものですが、本件入っていないのは、これを裏付けるような気がします。
でも私も日頃エクセルを使っていて欲しい機能で、この後ズバリの回答が出ることを期待します。
(参考までに)
VBAでも文字列をオブジェクトの指定に使うプログラムは
結構難しいです。
Sheet1のB1セルに「Sheet2」と入っていて、Sheet2のA1に値が入っている時、Sheet2のA1セルを参照したいとき。
Sub test04()
Worksheets("sheet1").Activate
s = Worksheets("sheet1").Range("b1")
MsgBox Worksheets(s).Range("a1")
End SubはOK
Sub test03()
Dim sh As Worksheet
s = Worksheets("sheet1").Range("b1")
Set sh = Worksheets(s)
MsgBox sh.Range("a1")
End Sub
はOKとなります。

投稿日時 - 2003-11-08 20:55:02

お礼

VBAは考えてませんでしたので、この方法はこの際に勉強します。
ありがとうございました。

投稿日時 - 2003-11-09 02:36:49

あなたにオススメの質問