- ベストアンサー
エクセルでファイル名やシート名、パスの変更を参照する方法
- エクセルで他のファイルや他のシートのセルを参照している場合、環境の変化でファイル名やパスが変更されると「ファイルが見つかりません。」というメッセージが表示されることがあります。この手間を省くために変数を設定するセルを用意し、環境の変化があっても影響を受けないようにすることが望まれます。
- 具体的には、セルAにファイル名、セルBにシート名、セルCにパスを設定します。セルXで参照したいセルの内容を変更前の形式で入力しておきます。環境が変わった場合、セルA、セルB、セルCの内容を変更するだけで、セルXは変更前の内容を維持したまま参照が可能です。
- これにより、環境の変化に対応するために、個々のセルの内容を変更する手間を省くことができます。Excelの関数を使用してファイル名やシート名、パスを設定し、参照するセルを変更する方法を調べて実現することができます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1です。#1で出来ないと言いましたが、訂正します。下記で出来ると思います。 Sheet1のB1セルに「Sheet3」、C1に「A1」と入っているとき、Sheet3のA1セルの値を持ってくるには 例えばSheet1に関数=INDIRECT(B1&"!"&C1)を入れると 値を引いてきます。ブックの場合も B3にaa1.xls(ブック名) C3にTEST(シート名) D3にA1として =INDIRECT("["&B3&"]"&C3&"!"&D3)で値を引いてきました。
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
エクセルで、セルを間接的に指定する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となります。
お礼
VBAは考えてませんでしたので、この方法はこの際に勉強します。 ありがとうございました。
お礼
本件は追試をして確認しました。 意外と簡単なことで解決したので、驚きでした。 2度に渡り、解決へ導いて頂き、感謝してます。 本当にありがとうございました。 ついでながら、SUM関数の対象セルに対してこれを下記のように応用したのですが、シート間で上手く行きません。 =SUM(INDIRECT("["&B3&"]"&C3&":"&C4&"!"&D3)) 同じシート行や列ではOKですが、シート間ではNGでした。 これは自分で調べてみます。