Google Spreadsheet における indirect のTipsと concatenate の必要性
状況
Google Spreadsheet にて vlookup 等の引数に indirect を用いて別シートの範囲を参照させようとした。
しかし、
sheet1!A1 = "hoge"
sheet1!B1 = "fuga"
sheet1!C1 = vlookup( B1, indirect( A1 + "!A:B" ) )
こんな感じでは失敗する。
問題の指摘と解決策 1 (現在は無意味)
superuserに関連した指摘を発見できる。
Google Spreadsheetではindirect関数はA:Cの様な行指定の無い範囲指示に対応していないので A1:C999 とかすれば良いらしい。
※しかし、これは後に現時点では不要である事に気づいた。過去の仕様ではそうだったのだろう。
問題の指摘と解決策 2
indirect の引数が operator+(string,string) 的な演算子ではダメらしい。つまり以下はダメ。
A1 + "!A:B"
これは、
concatenate(A1, "!A:B")
とすると失敗しなくなる。
まとめ
sheet1!A1 = "hoge"
sheet1!B1 = "fuga"
sheet1!C1 = vlookup( B1, indirect( concatenate( A1, "!A:B" ) ) )
これ正解。