Google Spreadsheetを使っているとき、別のマスターデータシートから特定列だけ読み込みたい時がある。この時簡単に読み込む方法としてはIMPORTRANGEやQUERY関数を組み合わせて使う方法がある。
ただこのやり方だと、マスターデータシートに列が追加された時に壊れやすいという問題がある。QUERY関数などはヘッダー名を指定して読み込むことができず、SELECT Col1, Col3 のような書き方をする必要がある。これだとマスターデータの途中に列を追加した場合に簡単に壊れてしまう。
そこでマスターデータシートのヘッダー名をキーにして読み込む方法を考えてみた。サンプルは こちらのspreadsheetにおいている。
できること
以下のようなマスターデータがあるとして

別シートで一部だけ読み込みたい。この時にマスターデータに列追加しても壊れないようにしたい。

ヘッダー名をキーにして読み込む方法
やり方としては読み込みたい列ごとに次のような関数を書くこと。これだけで、masterというシートから「名前」というヘッダーの列をすべて読み込める。
=INDEX(master!A1:Y, 0, MATCH("名前", master!1:1, 0))
もう少し関数の意味をコメントで解説する。
// MATCHでとってきた列番号を元に、その列を全てIMPORTする
=INDEX(
master!A1:Y,
// INDEXの第二引数に0を指定すると全行を返す(列全体を対象)
0,
// どの列番号を読み込むかをMATCHを使って決める
// ヘッダー行から「名前」に完全一致する列番号を取得できる
MATCH(
"名前",
master!1:1,
0 // 完全一致モード
)
)
このやり方を使えばマスターデータシートの変更に多少強くデータを読み込めて便利である。
別のspreadsheetからも読み込みたい場合
また別シートではなく別のspreadsheetから読み込みたい時はIMPORTRANGEと組み合わせれば良い。こんな感じ。
=INDEX(IMPORTRANGE("<sheet URL>", "master!A1:Y"), 0, MATCH("ColName", IMPORTRANGE("<sheet URL>", "master!1:1"), 0))