Hatena::ブログ(Diary)

常に周りの人々に笑いを提供したいんだ・・・

2010年01月31日 VLOOKUP関数

今日起きたら自分の家にいた。


3か月ほどインターンをしたが、自分が実際に良く使うエクセル関数を紹介したいと思う。

エクセルの画面を引用すれば一番わかりやすいと思うが、面倒なのでベタ打ちで。

初心者でもわかりやすく説明してるとは思うが。


紹介する関数とはずばり言うと、index関数とmatch関数

業務上エクセルを良く使うんだが、用途は主にデータの管理など。

例えば

| ID | 会社名|担当者 | 電話番号 | FAX番号 | 住所 |

って言う感じで各項目の下に数千行がずらーっと並んでる感じ。


そこで、良く使う関数がVLOOKUP関数

別のシートでIDが数件与えられた際に、担当者を知りたい場合は

=VLOOKUP(ID, ID〜担当者のデータ,3,0)

※3とは範囲内にあるデータID会社名、担当者の3番目を出力するという意味、0は「一致する場合」を意味する)

なのでデータ的に2番目に位置する「会社名」を知りたい場合は

=VLOOKUP(ID, ID〜担当者のデータ,2,0)

という感じ。

一番左のデータに対して、その右隣り(2個隣、3個隣でも)にあるデータを引っ張ってくるというわけですな。

で、まぁこんなことは基本中の基本なわけだが、

別のシートで電話番号」が数件与えられた際に、会社名、担当者を出す場合はどうするべきかという問題にぶち当たってしまった事がある。

もう一度並び順を確認してみよう。

| ID | 会社名|担当者 | 電話番号 | FAX番号 | 住所 |

抽出したいものが電話番号より左にありますやん!!

よし、こういう場合は、、、、電話番号の列を一番左に持ってきて、

電話番号 | ID | 会社名|担当者 | FAX番号 | 住所 |

こうやってして、えーっとえーっと

=VLOOKUP(電話番号」, 電話番号〜担当者のデータ えーっとえーっと会社名は1,2,3、、、3番目か。担当者ならえーっと4?

ぽちっと。

あ?エラー?あー0入れ忘れたーーー。


えーっとえーっと あー!! めんどくさいわ!!!!!




是非この関数を役立ててほしい。INDEXとMATCHの組み合わせである。

問題の確認。

別のシートで電話番号」が数件与えられた際に、会社名、担当者を出す。

MATCH関数

=MATCH(電話番号」, 電話番号のデータ,0)

とすると、与えられた電話番号電話番号データの中の何行目かを出してくれる。

一方 INDEX関数

=INDEX(会社名のデータ、何行目か)

を指定することで会社データの指定した行を返してくれる。

そう、つまり、

=INDEX(会社名のデータ, MATCH(電話番号」, 電話番号のデータ,0))

とすれば、電話番号ソートで、行を割り出し、その行の会社名を出してくれる。

つまり、VLOOKUPなど不要なわけである。

しかもこの場合、検索する情報が一番左にある必要が無く、とても有効なわけ。





以下余談。

「Alt」「I」「N」「D」でセルや範囲に名前を付ける事が出来る。電話番号の列TELsという名前を、会社名の列NAMEsと名前を定義すると

電話番号」セル番号をA1とすると

=INDEX(NAMEs, MATCH(A1, TELs,0))

とできます。



是非試してほしい。

ま、知ってる人には普通過ぎるかも知れんが、他人の作ったシートでこれを使ってるのはいまだかつて見たことない。

ここでは自分が良く使うINDEXとMATCH関数を紹介したが、他にINDIRECT関数やOFFSET関数は非常に有効なので、気になる人は調べてみて。後者2つはマクロを組む際にも使えます。

yoschiyoschi 2010/02/01 00:12 なるほど、目からウロコ。VLOOKUPのヘビーユーザ
なので、必要に応じて使い分けます。

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

daewoodaewoo 2010/02/01 00:24 確かにSUMPRODUCTは皆良く使ってますね。自分も良く使います。今思うとマクロも組まずに関数だけで流体力学の計算して流線とか出してたM下教授は実は相当恐ろしい人なのではないかと。。。