• ベストアンサー

VLOOKUP関数 #N/Aになってしまう 

エクセル2007です。 ------------------------------ 分類 料理名 中華 エビチリ 和食 お味噌汁 洋食 たらこパスタ ------------------------------ と言う表を作り、 D2に「エビチリ」 D3に「=VLOOKUP(D2,A:B,-1,0)」 としました。 しかし、「=VLOOKUP(D2,A:B,-1,0)」が「#N/A」になってしまいます。 「エビチリ」を「A:B」列の中から探して、一個前の列から値を引っ張って、「中華」を表示させたいのですが、何がいけないのでしょうか? ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

VLOOKUPは、左にあるキー列から右にある値を引っ張ってくる関数です。 -1を指定して右から左を取ってくるみたいなことは、全く出来ません。 配置を入れ替えてA列に「エビチリ」列を配し、B列をVLOOKUPした方が簡単ですが、どうしても配置を動かしたくないときは =INDEX(A:A,MATCH(D2,B:B,0)) のような関数を使います。

nb45tr78
質問者

お礼

おっしゃるとおり列を入れ替えたらできました! =INDEX(A:A,MATCH(D2,B:B,0)) でもできました! VLOOKUPを使わなくてもできるなんて知りませんでした。 ありがとうございました。

その他の回答 (3)

回答No.4

「VLOOKUP」がダメなら「LOOKUP」を使って・・・ =LOOKUP(D2,B:B,A:A) の式でも出来ますねぇ~

nb45tr78
質問者

お礼

LOOKUP関数もエクセルで使えるのですね。 知りませんでした。ご回答ありがとうございました。

回答No.3

こんにちは 他の回答者様の言うとおり、VLOOKUPは、列指定に-1というような指定はできません。 理由は、VLOOKUP関数は、指定範囲の最も左の列を検索列として検索し、その列 を1列目として、何列目を取得するかを指定するからです。 検索方法としては、検索列となる料理名を検索範囲の最も左の列にもってくるか フォームを崩したくないのならば、INDEXとMATCH関数を組み合わせたものを使用します。 =INDEX(A:A,MATCH(D2,B:B,0),1) INDEX関数は、指定した範囲の指定した行、列を取得します。 =INDEX(検索範囲,行番号,列番号) 検索範囲がA2:B4の場合で =INDEX(A2:B4,3,1)とすると 質問者さんの場合では、"洋食"が返ってきます。 A2:B4を3行2列の配列として、3行目、1列目を返しているのです。 検索列は、A列だけなので、列は1で固定でき、=INDEX(A:A,x,1)とできます。 xは検索したい値が何行目かになりますが、 ここで、MATCH関数を使用します。 MATCH関数は =MACTH(検索値,検索範囲,0または1)です。 最後の0または1は検索の型ですが、0が完全一致です。 詳細は省きます。 MATCH(D2,B:B,0)とすると、B列を検索し、D2の値と一致した時の 何番目にヒットしたかの値を返します。 ※B:Bは、B1が先頭(1行目)になりますので、この場合、何行目で一致したか  という情報になります。 もしB2:B12のようにすると、B2が先頭になります。 従って、エビチリと入れると、2行目でヒットするので2が返り、検索したい行を 取得できます。 上記のINDEXとMACTHを組み合わせて   =INDEX(A:A,MATCH(D2,B:B,0),1) とすると、フォームを崩さずに検索することも可能です。 なにかあれば補足してください。 それでは

nb45tr78
質問者

お礼

INDEX関数とMATCH関数を使えばいいのですね。 詳しいご説明ありがとうございます。 とても分かりやすかったです。

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.2

VLOOKUP関数で検索するのは最初の1列 指定の式ではAの「分類」列しか検索しない VLOOKUPでやりたければAとBを交換してAを「料理名」列にすれば可能

nb45tr78
質問者

お礼

列を交換してみたらできました。ありがとうございました。

関連するQ&A