つい集めてしまうものはなんですか?

エクセル2007です。

------------------------------
分類料理名
中華エビチリ
和食お味噌汁
洋食たらこパスタ
------------------------------
と言う表を作り、

D2に「エビチリ」
D3に「=VLOOKUP(D2,A:B,-1,0)」
としました。

しかし、「=VLOOKUP(D2,A:B,-1,0)」が「#N/A」になってしまいます。

「エビチリ」を「A:B」列の中から探して、一個前の列から値を引っ張って、「中華」を表示させたいのですが、何がいけないのでしょうか?

ご回答よろしくお願いします。

「VLOOKUP関数 #N/Aになってしま」の質問画像

A 回答 (4件)

VLOOKUPは、左にあるキー列から右にある値を引っ張ってくる関数です。


-1を指定して右から左を取ってくるみたいなことは、全く出来ません。

配置を入れ替えてA列に「エビチリ」列を配し、B列をVLOOKUPした方が簡単ですが、どうしても配置を動かしたくないときは
=INDEX(A:A,MATCH(D2,B:B,0))
のような関数を使います。
    • good
    • 0
この回答へのお礼

おっしゃるとおり列を入れ替えたらできました!

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

お礼日時:2012/06/03 15:45

「VLOOKUP」がダメなら「LOOKUP」を使って・・・


=LOOKUP(D2,B:B,A:A) の式でも出来ますねぇ~
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/08 20:35

こんにちは



他の回答者様の言うとおり、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)

とすると、フォームを崩さずに検索することも可能です。

なにかあれば補足してください。
それでは
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/08 20:35

VLOOKUP関数で検索するのは最初の1列


指定の式ではAの「分類」列しか検索しない
VLOOKUPでやりたければAとBを交換してAを「料理名」列にすれば可能
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/03 15:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報