質問: エクセルで開いていないbookのセルの値が欲しい エクセルが少し使える程度です。 1000個のブック内に同じ名前のシートが1個づつできています。 その1000個のシート毎にk列の最大値を求めたいのですが、 1000個のシートを”全て開くことなしに”できないでしょうか? シート名は整理表から求めることができます。 シート名="c9&"\"&d9&"\["&a9&".xls]sheet1'" シートが開いていれば、以下で求めることができるのですが。 =max(シート名!$k$2:$k$1250)
回答: #2です。 説明が判りにくかったようですみません。 indirectの説明は余計でした。 indirectでなければ(式bの形であれば) 閉じたブックを参照することができますが、 式bを1000パターンも手打ちするのは大変です。 そこで、数式dを使って1000パターンの数式bを文字列として作ります。 しかし数式dが返す「数式」はあくまで文字列なので、 そのままでは求める値を返しません。 文字列扱いになっている「数式」を普通の数式としてexcelに認識させる方法として、 文字列の「数式」をコピーして、いったんメモ帳などに貼り付け、 それを再度コピーして、excelに貼り付け直す方法があります。 「メモ帳等を経由して一気に貼り付ける。」というのはそういう意味でした。 以下繰り返しになりますが、まとめです。 (私の理解では)ご質問の内容には2つの課題(条件)があります。 条件1.「閉じたブックの内容を参照したい」 条件2.「大量のブックの内容を参照したい」 もし条件1だけであれば、 b:=max('d:\***\[sample.xls]sheet1'!$k$2:$k$1250) の形で数式を入力すれば解決します。 (閉じたブックの内容を参照できます) しかし、大量のブックに対してこの形の数式をそれぞれ入力していくのは困難です。 つまり、この方法は条件2を満足しません。 条件2だけであれば、 c:=max(indirect("'"&a1&":\"&b1&"\["&c1&".xls]sheet1'!$k$2:$k$1250")) といった形で数式を入力してフィルすれば解決します。 (「整理表」から順次参照元を取得して参照を機械的に生成できます) しかし、この方法では閉じたブックを参照することは出来ません。 つまり、この方法は条件1を満足しません。 そこで、条件1・2を同時に満足する方法として提示したのが、 1.bの形の数式をいったん文字列として1000パターン生成する。 d:="=max('"&a1&":\"&b1&"\["&c1&".xls]sheet1'!$k$2:$k$1250)" 2.1で生成した文字列を数式として入力しなおす。 1で作った1000パターンの「数式」をメモ帳に貼り付ける ↓ それを再度エクセルに貼り付ける。 ↓ 1000パターンの「数式」が数式としてexcelに認識され、値を返す という方法です。 乱長文失礼しました。