Excelで2つのテーブルをマージして、マージしたテーブルの特定の列がほしいと考えた。Rのmergeを思いついたが、わざわざRを使うのも面倒そうなので、Excelでmergeのような関数はないかと調べてみたら、VLOOKUPという便利な関数があったので紹介しておく。マージというのは、あるテーブルのキーを基準にテーブルを結合するというものである。例えば次のようになる。
名前 | 身長 |
---|---|
Aさん | 170 |
Bさん | 165 |
Cさん | 173 |
名前 | 体重 |
---|---|
Aさん | 70 |
Cさん | 65 |
Bさん | 58 |
これらを名前をキーにしてマージすると以下のようになる。それぞれの体型が1つのテーブルとしてまとめられている。VLOOKUP関数では名前・身長の表から体重を含む表を参照し、体重列を横につけることを実現する。
名前 | 身長 | 体重 |
---|---|---|
Aさん | 170 | 70 |
Bさん | 165 | 58 |
Cさん | 173 | 65 |
さて、VLOOKUP関数の定義としては、次のようになる。
VLOOKUP(調べたい対象,範囲,列番号,論理値)
各引数について順に説明する。
- 第1引数の「調べたい対象」は、第2引数の「探索範囲」でどこにあるかを調べたいものを入れる。
- 第2引数の「探索範囲」はマージしたいテーブルと考えて差し支えない。通常、長方形状の範囲が選択されるはず。別シートの範囲を選択する場合は、sheet2!$A$1:$D$100のように!を使ってシート名を明記する必要がある。探索は左端の列から順に行う。
- 第3引数の「列番号」は「探索範囲」で「調べたい対象」があった行の何列目を取り出したいかということを指定する。シートで何列目かではなく、探索範囲の何列目かを指定する必要がある。
- 第4引数の「論理値」は完全一致のデータを探索する場合は、falseを指定すればよい。
上の例について考える。もし二つの表がsheet1とsheet2の「A1:B4の範囲(ヘッダも含めて)」にあったとすれば、sheet1のC2セルは次のように書けば、マージしたときと同等の値が得られる。A2の箇所はAさんを対象にしたものなので、Bさん、Cさんのマージ結果を得たい場合は、A3やA4とすればよい。
=VLOOKUP(A2,sheet2!$A$2:$B$4,2,false)
なお、一致するデータが複数あった場合は、先に見つかった方の結果のみが返ってくることに注意。