別シートからQUERYなどの関数を用いて読み込みたいことがある。この時 =QUERY(..., "select A, C", 1)
のようにAやCのような識別子を用いて読み込める。この方式は簡単に別の場所から読み込めるため非常に便利に使える。
一方でマスターとなっているシートで列の増減があった場合に、この手法は壊れやすいという問題がある。そこで対処法を考えてみたのでメモしておく。
列の増減に対応できるようにするには、列ヘッダー名指定で読み込めれば良い。自分だとINDEXとMATCHを組み合わせて達成した。サンプルとして https://docs.google.com/spreadsheets/d/1YH8dxBUCpuy9EcAN9PW4kUKeVWne3qCBTQMgV9dfvE4/edit#gid=0 を用意した。
たとえばmasterdataシートから「名前」という列ヘッダー名を持つ1列をすべて読み込むには次のような関数を使う。
=INDEX(masterdata!A:AA, 0, MATCH("名前", masterdata!1:1, 0))
- (1) MATCHの利用によって1行目の中で「名前」という値が何列目にあるかを返せる
- (2) INDEXで行に0(=全行返す)+ (1)で返ってきた列番号を与えることで、「名前」が列ヘッダーとなっている列をすべて取れる
こんな感じでやりたいことができました。他に良いやり方があれば募集。