• ベストアンサー

VLOOKUP関数は一番左の値しか検索できない?

例えば、 1  aaa 2  bbb 3  ccc と言う値を入れて、 D1に「1」を入れ、=VLOOKUP(D1,A1:C3,2,0) すれば、「aaa」が返ってきますが、 D2に「aaa」を入れ、=VLOOKUP(D2,A1:C3,-1,0) とした場合、#N/Aになってしまいます。 一番左側しか検索値として指定できないのでしょうか?

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

  • ベストアンサー
回答No.3

遊びです =VLOOKUP(D2,CHOOSE({2,1},A1:A3,B1:B3),2,0) INDEX/MATCH関数を使ってください

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

その他の回答 (6)

回答No.7

No.6 です、たびたび申し訳ありません。 No.6 の 1 つ目の数式は、「=index(A$1:C$3,,2)」というふうに「$」を付けていなくてはなりませんでした。 また、この数式を確定するときは、Ctrl+Shift+Enter ではなく Ctrl+Enter でも大丈夫でした。「=index({1,2,3;4,5,6;7,8,9},,2)」といった数式を 3 行 1 列のセル範囲に入力する場合は、Ctrl+Shift+Enter でないといけません。失礼しました。

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

回答No.6

>INDEXの第2(行番号)、第3(列番号)引数に 0 の入力も可能ですよ No.5 さん、補足ありがとうございます。 実を言うと、そのとおりなのです。No.4 では話が複雑になると思って、あえて触れなかったのですが。 「0」を指定すると、行または列を指定しない( 1 つに限定しない)という意味に解釈されます。つまり全体の行または全体の列となります。 添付図では、A1:C9 のセル範囲に 1~9 の数値を入力しています。次に E1:E3 を選択した状態で、数式バーをクリック。「=index(a1:c3,,2)」と入力し、Ctrl+Shift+Enter を押しながら確定したものです。「=index(a1:c3,0,2)」と入力しても同じです。 また、D7 セルでは、「=small(index(a7:b8*2,),2)」として A7:B8 の各セルを 2 倍した配列を考え、数式中に導入しています。10×2、3×2、4×2、-2×2 という 4 数の中で 2 番目に小さいのは 3×2 = 6 であるため、D7 では 6 を返していますね。「=small(index(a7:b8*2,0,0),2)」としても同じです。

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

回答No.5

INDEXの第2(行番号)、第3(列番号)引数に 0 の入力も可能ですよ http://office.microsoft.com/assistance/hfws.aspx?AssetId=HP103426089990&lcid=1041&CTT=1&origin=EC001022984&queryid=97264d33%2D4499%2D40bd%2D9fb3%2Dba72dd46b1d1&css=index&Application=ZXL110&LCS=1&respos=2 ちなみに B2セルを参照するのに =INDEX(A:C,0,2) 2:2 と入力することもできます 脱線失礼しました。m(_ _)m # 参照演算子 # (スペース 1 つ) # 共通部分を示す参照演算子。2 つの参照に共通するセル参照を作成する (B7:D7 C6:C8)

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

回答No.4

VLOOKUP 関数は左端の値しか検索できないということは、既に出ている回答のとおりです。その代わり VLOOKUP は INDEX(MATCH) より短い数式になるので、サッと書くにはラクです。 この左端という話とはまた別の仕様なのですが、VLOOKUP の第 3 引数として指定できる値は、1 以上の整数です。0 番目とか -1 番目の列というのは、指定できません。 1 なら指定できるということは、件(くだん)の左端の値、すなわち検索した値自身を返すことも VLOOKUP は可能ということを意味します。 INDEX の第 2・第 3 引数の場合も、1 以上の整数しか指定できないという事情は同じです。 ただ、例えば添付図のように、INDEX の第 2 引数において、入れ子になった MATCH に 2 番目の列(B1:B3)を検索させているとき、その左隣の列(A1:A3)から INDEX は値を返すことができます。つまり INDEX の第 3 引数において、1 を指定すればいいのです。 2 番目の列から見て左隣の列とは、0 番目の列ではなく、1 番目の列ですね。だから左隣の値を返すとはいっても、0 や -1 を指定することにはならないわけです。 なお MATCH は、1 以上の整数を返す関数です。

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

VOOKUP関数は一番左側の列を基準にその右のデータを引っ張ってくる数式ですので、ご希望の検索はできません。 例示のデータのようにA列が数字で昇順に並んでいるなら(確実に検索データがあるなら)以下のような関数で代用できます。 =LOOKUP(D2,B1:B3,A1:A3) 一般的に検索文字の列よりも左の列でも検索できるようにしたなら以下のような関数を使用することになります。 =INDEX(A1:A3,MATCH(D2,B1:B3,0)) ちなみにエラー処理については、エクセルのバージョンによって利用できる数式が異なりますので、適宜IFERROR関数やISERROR関数などを使用してください。

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

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

VLOOKUPは左から探して右を取ってくる事しかできません。 B列からA列を検索するには =INDEX(A:A,MATCH(D2,B:B,0)) などのように違う関数を使って工夫します。

qgigymibyi6
質問者

お礼

ご回答ありがとうございます。

関連するQ&A

専門家に質問してみよう