2010年01月31日 VLOOKUP関数 
3か月ほどインターンをしたが、自分が実際に良く使うエクセル関数を紹介したいと思う。
エクセルの画面を引用すれば一番わかりやすいと思うが、面倒なのでベタ打ちで。
初心者でもわかりやすく説明してるとは思うが。
紹介する関数とはずばり言うと、index関数とmatch関数。
業務上エクセルを良く使うんだが、用途は主にデータの管理など。
例えば
| ID | 会社名|担当者 | 電話番号 | FAX番号 | 住所 |
って言う感じで各項目の下に数千行がずらーっと並んでる感じ。
別のシートで「ID」が数件与えられた際に、担当者を知りたい場合は
=VLOOKUP(「ID」, ID〜担当者のデータ,3,0)
※3とは範囲内にあるデータ、ID、会社名、担当者の3番目を出力するという意味、0は「一致する場合」を意味する)
=VLOOKUP(「ID」, ID〜担当者のデータ,2,0)
という感じ。
一番左のデータに対して、その右隣り(2個隣、3個隣でも)にあるデータを引っ張ってくるというわけですな。
で、まぁこんなことは基本中の基本なわけだが、
別のシートで「電話番号」が数件与えられた際に、会社名、担当者を出す場合はどうするべきかという問題にぶち当たってしまった事がある。
もう一度並び順を確認してみよう。
| ID | 会社名|担当者 | 電話番号 | FAX番号 | 住所 |
抽出したいものが電話番号より左にありますやん!!
よし、こういう場合は、、、、電話番号の列を一番左に持ってきて、
| 電話番号 | ID | 会社名|担当者 | FAX番号 | 住所 |
こうやってして、えーっとえーっと
=VLOOKUP(「電話番号」, 電話番号〜担当者のデータ えーっとえーっと会社名は1,2,3、、、3番目か。担当者ならえーっと4?
ぽちっと。
あ?エラー?あー0入れ忘れたーーー。
えーっとえーっと あー!! めんどくさいわ!!!!!
是非この関数を役立ててほしい。INDEXとMATCHの組み合わせである。
問題の確認。
別のシートで「電話番号」が数件与えられた際に、会社名、担当者を出す。
MATCH関数は
とすると、与えられた電話番号が電話番号データ列の中の何行目かを出してくれる。
一方 INDEX関数は
そう、つまり、
=INDEX(会社名のデータ列, MATCH(「電話番号」, 電話番号のデータ列,0))
とすれば、電話番号ソートで、行を割り出し、その行の会社名を出してくれる。
つまり、VLOOKUPなど不要なわけである。
しかもこの場合、検索する情報が一番左にある必要が無く、とても有効なわけ。
以下余談。
「Alt」「I」「N」「D」でセルや範囲に名前を付ける事が出来る。電話番号の列にTELsという名前を、会社名の列にNAMEsと名前を定義すると
=INDEX(NAMEs, MATCH(A1, TELs,0))
とできます。
是非試してほしい。
ま、知ってる人には普通過ぎるかも知れんが、他人の作ったシートでこれを使ってるのはいまだかつて見たことない。
ここでは自分が良く使うINDEXとMATCH関数を紹介したが、他にINDIRECT関数やOFFSET関数は非常に有効なので、気になる人は調べてみて。後者2つはマクロを組む際にも使えます。



なので、必要に応じて使い分けます。
個人的にはSUMPRODUCTをよく使います。
あれも便利。M下教授の「Excelはみなさんが
思っている100万倍頭がいい。」という
言葉を痛感します。