• ベストアンサー

EXCEL関数でシート名を変数にする。

EXCEL関数で以下の事をしたく色々ためしたり過去の質問も 見たのですが分かりませんので教えてください。 一つのファイル内にシート1、シート2、シート3・・・のシートがあります。 シート3のA1のセルに =変数A1の式を入れたい。 変数A1の意味は、他のファイルのあるセルにシート1かシート2…を 入れておきその値でシート1のA1から値を読むかシート2…のA1から 値を読み込みかという事をしたのですがどのようにすればよいですか? 二つくらいだとif文でも出来るのですが、多数のシートを対象としているので変数で処理をしたいのですがどのようにすればよろしいでしょうか? =[別ファイル]シート4!A4!A1 のような式で、[別ファイル]シート4!A4のセルに入っているシート名で 読み込むセルのシートを変えたいと言うことです。 分かり辛い説明で申し訳ありません。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.4

これでどうですか? =INDIRECT("[ブック1.xls]" &[別ファイル]Sheet4!$A$4&"!A"&ROW()) ROW()は数式が入力されている行の行番号を調べる関数です。 1行目でこの数式を使うと1が戻ってきます。 2行目でこの数式を使うと2が戻ってきます。

take1966
質問者

お礼

ありがとうございます。 上記例で、上手くいきました。

その他の回答 (3)

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

昨日も同じ類の質問がありました。同類の質問はFAQです。答えは#1のご回答に出ています。ポイントは 固定の1つの指定ブック、指定シート、指定セルの値をとるときは セルに=をまずいれ、文字列 =[ブック1.xls]シート1!A1 のように入れますが (1)まず(ブック名かシート名か、セル番地かのデータの入っているセルをそのセル番地で置き換えて &で結合して、固定文字列は””で囲んで、正しい文字列を作る。 先頭=をつけて、正しい文字列になるかどうかテストすることができる。それができると (2)(1)でできた文字列をそのまま=をつけて入れるのでなく =INDIRECT( ) の括弧内に(=を省き)入れれた式をいれる。 これは()内を番地として扱うようエクセルに指示するわけです。 >、[別ファイル]シート4!A4のセルに入っているシート名で 読み込むセルのシートを変えたいと言うことです。 持ってくるセルは,[別ファイル]シート4!A4 にシート名だけが入っているケースとして、 =INDIRECT("[ブック1.xls]" & [別ファイル]シート4!A4 & "!A1") (A1は固定である例) となると思います。 原理は上記の通りだと思うが、本件少し複雑な例でテストしにくいので、うまくいくかやってみてください。

take1966
質問者

お礼

返答ありがとうございます。 上記例で、上手くいきました。 但し、この式を列に対してコピーして "[ブック1.xls]" & [別ファイル]シート4!A4 &"!A1" A1の部分をA2,A3,A4・・・としたかったのですが 文字列の為、上手くいきませんでした。 解決策として、"[ブック1.xls]" & [別ファイル]シート4!A4 &Z1の式とし、この式をコピーするとZ1の部分が、Z2,Z3・・・となりました。 Z1に1,Z2に2を入れることで解決しました。 この方法しかないでしょうか? 重ねての質問で申し訳ございません。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.2

応用として、 シート名に括弧()やスペースが入っている場合の方法を 追加で紹介しておきます。 =INDIRECT("'"&[別ファイル.xls]Sheet4!A4&"'!A1")

take1966
質問者

お礼

御丁寧な返答ありがとうございます。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

これでどうですか? =INDIRECT([別ファイル.xls]Sheet4!A4&"!A1") 別ファイルのSheet4のA4セルに 参照したいシート名が入力してあるという条件です。 <余談> シート名に()が使われていると正しく動作しません。 回避する方法はあります。

take1966
質問者

お礼

一番の返答ありがとうございます。 回答3のお礼に書かせていただいたのですが、別の問題が出てきました。 関数は、難しいです。