[EXCEL] XLOOKUP関数 一覧からデータを取り出す (VLOOKUP関数はもう必要ない)
▶MAP▶PDF版▶表示▶関数▶ショトカ▶操作/コピー▶実務▶NG▶検索
関連記事:XLOOKUP関数
【まとめ】
・XLOOKUP関数はデータ一覧からデータを取り出す際に使う。
・XLOOKUP関数の記述方法
=XLOOKUP(検索値,検索列,表示列)
意味:検索値のセルと同じものを、検索列から探して、表示列の同じ行のものを表示する
・行番号で範囲指定してはいけない (検索値はセル指定)。
× =XLOOKUP(D2,B2:B50,C2:C50)
〇 =XLOOKUP(D2,B;B,C:C)
・計算式の中に数値を入れてはいけない。
× =XLOOKUP(1,B;B,C:C)
〇 =XLOOKUP(D2,B;B,C:C) 注:D2に「1」と入れる。
【まとめ】
LOOKUP関数とは
XLOOKUP関数は、LOOKUP関数の一種です(LOOKUP=調べる)。
LOOKUP関数は、データの一覧から所定のデータを取り出すために使います。
「あるデータ(検索値。数字又は文字列)をデータの一覧(検索列)から探し出して、それに呼応するデータを表示する(返す)」関数です。
職員番号を入れると職員名や住所・生年月日などが、商品コードを入れると商品名や単価や発注先などを表示します。
「お役所」の実務では、文書番号や許可番号を入れると該当データが、自治体番号を入れると自治体名が出るなどの使い方があります。
ちょっとした一覧からデータを抜き出すことが簡単にできるので、二度入力や目コピー(見て記憶して手入力)が省け、大変便利です。
とても簡単&便利なのでぜひ使いこなしてください。
個人的には、SUMIFS、COUNTIFSとともに「三大便利関数」と感じています(SUM、IF、ROUND等は基本関数)。
LOOKUP関数には、もともとVLOOKUPとHLOOKUPの2つがありました。Office2021から、XLOOKUPが登場し、特段に使い勝手がよくなりました。
XLOOKUPは、VLOOKUPとHLOOKUPの両方の機能を備えた「上位互換」の関数です。
エクセル本やWEBでVLOOKUP関数の説明をしているものがありますが、今更あえてVLOOKUP関数を使う必要はありません。
最近掲載された記事でVLOOKUP関数を推しているものがあれば、スルーした方がいいでしょう。実務をやっていないか、最新のエクセルの知識が欠けていることの証左です。そういった記事を鵜呑みにしてしまうのは時間の無駄です。
なお、SUMIFS関数でなく、SUMIF関数を押している記事も同様です。スルーしましょう。
このサイトも含め、複数のサイトを見て、どれがいいか判断して取り込んでいくのが賢明です。
*過去の計算式を解析したり、古いバージョンのエクセルを使っている場合を除く。
XLOOKUP関数の使い方
以下をご覧ください。

水色欄には計算式が入っています(条件付き書式で自動色付け)。
左の表の「単価」は、右の「単価表」から自動で持ってきています。
(注意)通常「単価表」のようなリスト/データベース的なものは別シートにしておくべきですが、分かりやすくするために並べています。
C3セルの計算式を見てみます。
B3セルの「A4白黒」の単価として「5」が入っています。
「5」は手入力ではなく、計算式で出しています。

C3セルの計算式は、=XLOOKUP(B3,G:G,H:H)
これは、
「B3セルの中身(=A4白黒)を、G列から探して、同じ行にあるH列のデータを表示する」
という計算式です。
わかりやすいように、計算式(参照元)のトレースを表示してみます。

青丸又は青枠内が使われているところです。
黄色は実際に対象となっているセルです(黄色は手作業で付けました)。
B3セルの「A4白黒」と同じものをG列から探し出し、同じ行にある「5」を表示しています。
このように、簡単にデータを引っ張ってくることができます。
ぜひご活用ください。
【注意1】行番号で範囲指定してはいけない
XLOOKUP関数は、=XLOOKUP(検索値,検索列,表示列) と記述しますが、この時、検索列や表示列を行番号を付けて範囲指定することもできます。
例 =XLOOKUP(D2,B2:B50,C2:C50)
でも、これはやめましょう。
以下のように行番号は付けず列全体で範囲指定します。
=XLOOKUP(D2,B;B,C:C)
理由は、面倒&間違いやすいから。詳細は以下をご覧ください。
[EXCEL] セルを行番号で範囲指定してはいけない(SUMIFS/COUNTIF/XLOOKUP関数等)
【注意2】計算式の中にデータを入れてはいけない
XLOOKUP関数の中には、数値やデータを入れてはいけません。
× =XLOOKUP(1,B;B,C:C)
× =XLOOKUP("A4白黒”,B;B,C:C)
〇 =XLOOKUP(D2,B;B,C:C)
注:D2に「1」や「A4白黒」と入れる。
理由は、修正が面倒だからです。詳細は以下をご覧ください。
[EXCEL] 計算式に数値(やデータ)を入れてはいけない。初心者向け記事を鵜呑みにするなかれ!
ーーーー
以下は、XLOOKUP関数の前身であるVLOOKUP関数は使いづらいという説明です。
VLOOKUP関数を使ったことがない方はあえて読む必要はありません。
VLOOKUP関数を使っていた(使おうとして挫折した)方は、XLOOKUP関数との比較にどうぞ。
VLOOKUP/HLOOKUP関数とは
今更理解する必要はありませんが、
VLOOKUPのVは「Vertical(バーティカル」「垂直」、
HLOOKUP関数のHは「Horizontal(ホリゾンタル)」「水平」という意味です。
VLOOKUPは「上から下(垂直)」に調べる、
HLOOKUP関数は「左から右(水平)」に調べるために使いました。
ただし、いまでは無用の長物です。
XLOOKUP関数は、VLOOKUP関数+HLOOKUP関数(垂直でも、水平でも使える)
Excel2021から登場した「XLOOKUP」関数は、データを上下左右、どちらでも調べられる、という関数です。
2つの関数が一緒になっただけではなく、記述方法も簡略化され、なおかつ、融通も利くようになりました(詳細は後述)。
一方、VLOOKUP/HLOOKUP関数は、記述方法がちょっと面倒で、なおかつ、融通が利かないという欠点があります(XLOOKUP関数登場以前は、欠点を上回る利点があり、重宝されていました。)。
VLOOKUP関数が使いづらい理由① 何列目か数えないといけない
VLOOKUP関数の記述方法は、以下の通りです。
XLOOKUP関数と比較しながら見てみます。

=VLOOKUP(B4,G:H,2)
「B4セルの中身(=A4カラー)を、G列からH列のうち一番左のG列から探して、G列から右に2列目(=H列)にあるデータを表示する」
というものです。
最初の「検索値」はXLOOKUP関数と同じですが、その後に、検索の範囲(G:H)を指定して、次に、表示するデータがG列から何列目にあるか、を入れる必要があります。
XLOOKUP関数では、下のようにG列とH列の間にも青線が入っています。

これは、G列とH列を別々に指定している、ということです。
対して、C4セルのVLOOKUP関数だと、G列とH列の間に青線はありません。

これは、G列からH列をまとめて指定している、ということです。
そして、VLOOKUP関数では、この「まとめて指定した列」のうち、表示するデータは左から何列目にあるか、を示す必要があります。
つまり、何列目か数える必要があります。
上の例なら、「G~Hのうち、Gから2列目」とすぐに分かります。
でも「G~AB」のうちのAB列だったら、Gから数えて何列目でしょうか?
正直、数えるのは面倒です。
これが、VLOOK関数が使いづらい理由その1です(かなりいまいちな点です)。
VLOOKUP関数が使いづらい理由② 列を挿入するとおかしくなる
例えば、単価表のG列の後(右)に1列追加してみます。

XLOOKUP関数を使ったC3セルは、計算式が
=XLOOKUP(B3,G:G,H:H) から
=XLOOKUP(B3,G:G,I:I) に変わり、列挿入前と同じく「5」を表示しています。
列を挿入しても、計算式は自動で正しく対応している、といえます(エクセルは基本そうなっています)。
一方、VLOOKUP関数を使ったC4セルは、
=VLOOKUP(B4,G:H,2) から
=VLOOKUP(B4,G:I,2) に変わっています。
セルの挿入に対応して、G:H がG:I に自動で変わっています。
しかし、C4は「0」。
本来入るはずの「10」が入っていません。
これは「G:I,2」つまり「G列から2列目であるI列の中のデータを取り出す」という式になってしまっているからです(2列目にはデータがないので「0」になります)。
つまり、列を挿入しても、「○列目」は自動で変わっていないのです。
仮に、挿入した列に前年度単価を入れてみると・・・

本来表示すべき「10」ではなく、「8」が表示されました。
式のトレースでも見てみると
まずはXLOOKUP関数の場合

XLOOKUP関数は、実際に対象となる列のみを調べているのが分かります(H列は、G列とI列の青枠に挟まれているだけで、対象とはなっていません)。
一方、VLOOKUP関数は・・・

「G:H」が「G:I」と範囲は広がりましたが、あいかわらず範囲内の2行目(H列)を表示してしまっています。
範囲は広がっても、探しているのは「2列目」のままなのです。
ここは自動では直りません。
従って、列挿入したら、VLOOKUP関数の「○列目」もいちいち手で直さなくてはいけません。
しかも、間違えないためには、いちいち「○列目」と目で見て数えなくてはいけません。
これは面倒です。間違いもおきます。
怖くて表の修正もできません。
実際、VLOOK関数を使った表を引き継いだ際、この「トラップ」に気づかないまま、検索対象となるリスト(データベース)の列を増やしてしまうと、間違ったデータが表示され、大惨事になる場合があります。
これを避けるためには「〇列目」のところに、対象となる項目名の位置(〇列目)を調べる関数を入れる等により対応するのですが、それはそれでハードルが一つ上がります(分かりづらくもなる)。
XLOOKUP関数なら、リストの修正(列挿入)も簡単
その点、XLOOKUP関数は、列を挿入しても、削除しても自動で計算式が変わるので、手間&集中力いらずです(勿論、必要な列を削除したらダメです)。
また、該当列が具体的に示されているので、入力&理解しやすいといえます。
VLOOKUP関数が使いづらい理由③ 検索値が左端にないとダメ
VLOOKUP関数は、検索する列が一番左にないと検索できません。
「一番左の列を探して、表示するのは左から○列目」という指定しかできないのです。
例えば、下の表では、単価から種類を出してみます。
これまでの例とは逆になります。

右の表のG3に「10」と入れると、左のリストから「A4カラー」を表示します。
これには、XLOOKUP関数を使っています。

=XLOOKUP(G3,C:C,B:B) として、
G3の数値と同じものをC列から探して、同じ行のものを左隣りのB列から表示する、という計算式です。
表示するデータがある列(B列)が、検索列(C列)より左にあっても、問題なくできています。
*同じ単価のものが2つ以上あると正確ではなくなりますが、ここでは割愛します。
これ、VLOOKUP関数ではできません。

=VLOOKUP(G4,B:C,1)でも
=VLOOKUP(G5,B:C,2)でも
=VLOOKUP(G6,B:C,-1)でもダメ。
「C列のものを、その左にあるB列から表示する」ことができないのです。
常に、検索する列は一番左。
表示するデータがある列は、それよりも必ず右。
この制約は、かなり面倒です。
(VLOOK関数を使いたいがために、右にある検索列を、わざわざ左に持ってくる、なんてこともやっていました。)
結論:VOOKUP関数は、もう使わない
現在のエクセルではVLOOKUP関数を使う必要性はありません(過去に作られた計算式の解析や、古いエクセルを使う場合を除く)。
VLOOK関数には、昔、色々お世話になりましたのでお礼したところすが(苦労もさせられたので色々言いたいところもあるけど)、いまさらVLOOKUP関数を使う必要はありません。
覚える必要もありません。
時間の無駄と頭の混乱を生みます。
今において、VLOOKUP関数を推奨/紹介している情報は、パッ缶があるのに、その裏側を釘とトンカチで開けるやり方を示しているようなものです。
簡単に出来る方法があるのに、敢えて難しい方法を示すのは「悪」です。
VLOOKUP関数はハードルが高いので、エクセル初心者に教えようとすると、「便利さ」よりも「難しさ」を感じてしまうことでしょう。
そうすると、エクセル嫌いになってしまいます。
XLOOKUP関数であれば、ハードルも低いので、「難しさ」より「便利さ」を感じてもらえると思います。
そうすると、エクセルをもっと使いたくなります(そうあってほしい)。
XLOOKUP関数については、今後も説明していきたいと思います
(実務での使用例や、複数条件の扱い方など)。
以上、お役に立てば幸いです。
ご覧いただき、何か「発見」があれば「スキ」「フォロー」していただけると嬉しいです。
(作業1日 2h)
*本記事は、「[NG EXCEL]VLOOKUP関数をいまさら使ってはいけない」をもとに再構成したものです。
