質問: indirect関数 エラーになる sheet1とsheet2があり、 sheet1のa1には「tset」という値が入っています。 そこで、sheet2の任意のセルに sheet1のa1の値を入れたいのですが 「=sheet1!a1」なら可能なのに sheet2のa1に「sheet1」と入力し sheet2のa2に「=indirect(a1)!a1」とするとエラーになります。 このような場合は、indirect関数を使えばいいと知ったのですが 何が間違っていますか?
回答: indirect 関数の仕様では、参考 url にあるとおり、文字列を引数とします。「セル参照」あるいは「セル範囲に付けられている名前」を表す文字列(参照文字列)を引数として指定しますが、代わりにセル参照を指定した場合は、参照元の文字列を関数が受け取ってきます。シート名のみを引数とする方法は、ありません。 ○ =a1 ○ =sheet1!a1 ○ =indirect(a1) ...... a1 セルに「a2」などの有効な参照文字列が記入されている場合のみ ○ =indirect("a1") ......「=a1」と同じ意味 × =indirect(sheet1) ......エラー「#name?」 × =indirect("sheet1") ......シート名を含む参照文字列が未完成のため、エラー「#ref!」 ○ =indirect("sheet1!"&a1) ...... sheet2 の a1 セルに「a2」などの有効な参照文字列が記入されている場合のみ ○ =indirect("sheet1!"&"a1") ......「=sheet1!a1」と同じ意味 ○ =indirect("sheet1!a1") ......「=sheet1!a1」と同じ意味 ○ =a1!a1 ...... excel のサービス機能により「a1」が「'a1'」に自動変換されるため、「a1」という名前のシートが存在する場合のみオッケー △ =a1&"!"&a1 ......一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す △ =indirect(a1)&"!"&a1 ...... a1 セルに「a2」などの有効な参照文字列が記入されている場合のみ一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す △ =indirect("a1")&"!"&a1 ......一応エラーにはならないが、期待とは全く異なる結果(結合された文字列)を返す × =indirect("a1!")&a1 ......シート名を含む参照文字列が未完成のため、エラー「#ref!」 × =indirect(a1)!a1 ......「&」と「"」がないため、数式の入力がそもそも受け付けられない × =sheet1!indirect("a1") ......数式の入力がそもそも受け付けられない ○ =indirect(a1&"!"&a1) ...... a1 セルに「a2」などの有効な参照文字列が記入されており、かつ、「a2」などの名前のシートが存在する場合のみ ○ =indirect(b1&"!"&a1) ...... b1 セルに「sheet1」など、a1 セルに「a2」などの有効な参照文字列が記入されている場合のみ ○ =indirect(a1&"!a1") ...... a1 セルに「sheet1」などの有効な参照文字列が記入されている場合のみ × =indirect(合計) ......エラー「#name?」または「#ref!」 ○ =indirect("合計") ......「合計」という名前が付けられたセルが存在する場合のみ indirect では、正しいセル参照になる文字列でありさえすれば、自由に文字列をつなげて作ることができます。 ●=indirect(c1&d1) ●=indirect("sheet1!"&c1&d1) ●=indirect(a1&b1&"!e1") ●=indirect(a1&"!"&c1) ●=indirect("合計")