当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【Excel】複数のテーブルを切り替えて検索する

今回は VLOOKUP関数 と INDIRECT関数を組合せて、参照先のテーブルを自在に切り替えて しまいますよ。実際にご自身の Excel を動かしながら練習したい人は、下の2種類のサンプルをコピーして、セル A1 とセル A8 に貼りつけてください。ちなみにこれは Profile Editor で作成した架空の住所録ですので、安心してお使いくださいな。

氏名 ふりがな 住所
秋羽悠馬 あきば ゆうま 東京都新宿区北町 2-6-7
四斗辺真大 しとべ まひろ 東京都杉並区西荻北 7-18-8
下長虎太朗 しもなが こたろう 東京都中央区日本橋小舟町 6-35
船宝佑太 ふなとみ ゆうた 東京都新宿区須賀町 1-21-6
淡中泰智 たんなか たいち 東京都葛飾区新小岩 1-28-5
氏名 ふりがな 住所
名幸湊 なこう みなと 東京都足立区大谷田 7-19-9
仲泉恵介 なかいずみ けいすけ 東京都足立区東伊興 5-12-8
貂革浩 てんのかわ ひろし 東京都江戸川区上篠崎 5-32
栗明玄 くりあき げん 東京都新宿区市谷台町 4-45-9
重原悠真 しげはら ゆうま 東京都港区高輪 7-50-6

貼りつけたら、それぞれの表について、[ホーム] ⇒ [テーブルとして書式設定] から表をテーブルに変換してください。そのさい [先頭行をテーブルの見出しとして使用する] にチェックを入れておいてください。そして [デザイン] タブをクリックして、それぞれのテーブルに「住所録A」、「住所録B」という名前をつけておきます。
 
Excel住所AB秋羽悠馬
テーブルの下には次のようなシートを作っていきます。
 
Excel住所録テーブル

A18 はユーザーさんが住所録の A か B のどちらかを入力するセルです。
セル A21 にはユーザーさんが氏名を入力します。とりあえず A18 には「B」、A21 には「仲泉恵介」と入れておきます。そして C18 には

="住所録"&A18

と入力します。「””」で囲んだ文字列(住所録)とセル A18 に入力された「A」または「B」を連結して、今の場合は「住所録B」と表示されるわけです。つまりここにテーブル名が出力されているわけです。ところで VLOOKUP 関数は

=VLOOKUP(検索値,テーブル名,表示したい列番号,[検索の形])

という形で記述すると、指定したテーブル名を探しに行ってくれるわけですけど、この「テーブル名」は基本的に文字列で直接書いて指定する必要があります。なので C18 のように、他のセルからもってきてテーブル名を表示させているようなケースで使うことができません(融通がきかないですねー!)。なので C18 を表示されている文字列として読み取ってくれる別の関数が必要となるのです。

そこで登場するのが正義の味方(?)、INDIRECT関数なのです!
INDIRECT関数は、人間(「おまえは AI だろ」などという、くだらないツッコミなんてしている場合ではありませんよ)が、そこに表示されている文字列を見るのと同じような感覚でそのセルに表示された名前のセルや範囲(今の場合はテーブル)を探してくれます。「それは文字でも数値でもなく数式だから探せませんね」などという、他の Excel 関数にありがちな野暮なことは言わないのです。江戸っ子のような気風の良さで、「住所録B? よし! 今すぐ探してきてやるから、ちょいと待ってな!」とすぐに働いてくれるので、こばとは勝手に「江戸っ子関数」と呼んだりしてますよ。

… まあ、そんなことはどうでもいいのですけど、この関数を VLOOKUP 関数と組み合わせて

=VLOOKUP(A21,INDIRECT(C18),3,FALSE)

と入力します。「A21 セルに入った氏名を C18 にある名前のついたテーブルの左端から捜しだし、一致する名前があれば該当住所を抜き出します」ということをやらせています。このまま A18 セルを A に変更すると、そのテーブルには「仲泉恵介」さんはいませんから、「#N/A」というエラーメッセージを返します。今度は「住所録A」にある名前を A21 に入力してください。あ、ついでに余裕があれば C20 セルには

=A21&"さんの住所"

と入れておきましょう。「ユーザーさんが入力した人の住所は…」というガイド文です。絶対に必要というわけでもないですけど、こういう補足を適度に入れておくと、シートが使いやすくなります。データベース研究所トップページ

コメント