『vlookup関数』の欠点と、『index関数』と『match関数』を組み合わせてデータを抽出する方法(Excel スプレッドシート必須スキル)
最後に解説に使った実際のスプレッドシートURLを添付しますので、ぜひ最後までお読みください。
vlookup関数には弱点・欠点がある
ビジネスの現場で最もよく使われている関数の1つである「vlookup関数」には致命的な弱点・欠点があることを把握して使ってらっしゃるでしょうか?この記事では、ビジネス現場におけるvlookup関数のあるあるミス事例(弱点)と、それを克服するためのindex関数 match関数の使い方について、分かりやすく紹介していきます。
本題の前にvlookup関数の復習
vlookup関数とは、表を縦方向に検索し、特定のデータに対応する値を取り出す関数です。
vlookup関数の構文
=vlookup(検索値,範囲,列番号,検索の型)
実際の使用例を見た方が理解が早いと思いますので、使用例を記載いたします。
集計目的
従業員データベース(smartHR等からDLしてきたリスト)から、在職中の従業員の生年月日を抽出し、在職中の従業員の平均年齢を算出する。
手順
検索値:「尾崎直樹」さんの生年月日を検索したい。よって、検索値は「尾崎直樹」の値がある「A4」を指定
範囲:検索値である「氏名」から抽出したい列までを範囲指定する。ただし、今後「部署名」を抽出する可能性もあるため、今回は「B:F」と幅広い範囲を指定している(「B:E」でも問題なし)
列番号:検索値から数えて何番目の列に抽出したい値がある列の数字を記載する。①氏名、②入社日、③退職日、④生年月日、⑤部署名であり、今回は生年月日を抽出したいので「4」を記入
検索型:通常は完全一致である「FALSE」を記入
元データのシート
集計シート
vlookup関数の弱点
vlookup関数には有用な関数であり、私も使うことがありますが、弱点・欠点があるため、それを正確に理解した上で使用しないと、業務上のミスの温床となってしまいます。ここでは、vlookup関数の弱点について説明いたします。
弱点1.参照元データの列(カラム)がズレたら、集計シートに誤ったデータを返してしまう!
1つのシートを複数人で作業している現場では「あるある」のミスです。私も何度もコレが原因でスプレッドシートやExcelでエラーが発生しているのを見てきました。
例えば、前述の従業員データにおいて、労務担当者が人事データシステムからダウンロードされるCSVに「月給」を追加し、「従業員データ」タブに値貼付をしたとします。そうすると、vlookup1関数の列番号も1列ズレてしまい、本来「生年月日」を抽出しなければならないところ、「月給」が抽出されてしまうというミスが起こります。
弱点2.検索列が範囲列の必ず一番左にないとエラーになってしまう
vlookup関数ユーザーであれば、検索列よりも右にある値を抽出したいと思ったことが多々あると思います。しかしながら、vlookup関数の仕様上、それは叶いません。
例えば、上述の「従業員データ」の事例でいうと、「氏名」を検索値として「従業員番号」を抽出することはできません。まぁ、不便ですよね。
vlookup関数の弱点を解決する『index関数』と『match関数』を覚えよう
『index関数』と『match関数』を組み合わせることで『vlookup関数』と同じデータ抽出ができる
まず、最低限の機能として、index関数とmatch関数を組み合わせることで、vlookup関数と同様に、ある範囲からデータを抽出することができ、全く同じ値を返すことができます。
弱点克服1:参照元の列(カラム)がズレても、集計シートに返す値はズレない
vlookup関数では1列参照先がズレてしまった「元data_ミス事例」のタブを参照したところ、index関数とmatch関数を組み合わせたらズレずに「生年月日」列の値を返すことができました。
弱点克服2:検索列よりも左の値を返すことができる
vlookup関数だと「氏名」よりも左にある「従業員番号」のデータを抽出することができませんでした。index関数とmatch関数を組み合わせて使うと「従業員番号」も抽出することができます。
それでは、index関数とmatch関数それぞれの仕様を見ていきましょう
index関数の解説
index関数とは、行番号と列番号で指定されるテーブルまたは配列の要素の値を返す関数です。index関数単独で使うことは稀であり、通常、match関数と組み合わせて使います。
index関数の構文
=index(範囲,行番号,列番号)
match関数の解説
match関数は、セルの範囲で指定した項目を検索し、その範囲内の中で「上から何番目か」又は「左から何番目か」を返します。
match関数の構文
=match(検索値,範囲,検索方法)
index関数とmatch関数の組み合わせ
手順
範囲:検索したい元データを範囲指定する(わざわざ狭くする必要がないため、今回は幅広にA:Z列を指定している)
行指定:match関数を用いてA4「尾崎直樹」が元データB列の中で上から何番目にあるかを返します(12番目)。
列指定:match関数を用いてC3「生年月日」が元データ3行目の中で左から何番目にあるかを返します(6番目)。
最後に
複数名でExcelやスプレッドシートで作業するための必須スキル
会社において複数名でExcelやスプレッドシートで作業するに当たり、vlookup関数の弱点を知らずに使ってしまうのは自殺行為であり、ミスの温床を増やす行為になりかねません。もちろん、vlookup関数を使って良い場面も多々あります。これに加えて、index関数とmatch関数の組み合わせが適切な場面を把握し、使いこなせるようになりましょう。
vlookup関数とmatch関数を組み合わせることも可能
理論的には可能ですし、実際にはできますが、あまり一般的ではないことをすると他の作業者が混乱するため、一般的かつ利便性の高いindex関数と組み合わせることをオススメします。
本日の解説に用いたスプレッドシートURLはコチラ
Twitterアカウントのフォローをよろしくお願いします!
私は、事業会社CFOの視点から、生産性が高いExcel及びスプレッドシートの使い方を中心に呟いています。フォロワーが増えるとやる気も増えますので、ぜひフォローをよろしくお願いしますm(__)m
twitterアカウント
https://twitter.com/Naoyuki_Hori