• ベストアンサー

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/7940)
回答No.1

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

qgigymibyi6
質問者

お礼

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

関連するQ&A

  • エクセルVLOOKUP関数の検索値について

      A   B     C     D     E 1 あ AAA 2 い  BBB 3 う  CCC 4 え  DDD 5         お   い  =VLOOKUP(C5,A1:A4,2,0) VLOOKUP関数にて、質問です。 検索値候補1=C5のセル 検索値候補2=D5のセル 範囲=A1:B4 E5=関数 (ここに式を入れたい) 検索値候補1がない時は、候補2を検索する そんな式はどうすればよいですか? 素人ですので、おたすけください

  • VLOOKUP関数でエラーを表示したくありません

    VLOOKUP関数で、データが索引テーブルに無かった場合、”#N/A”が返ってきますが、これを出さない方法はありませんか?                (テーブル)   AAA 10         AAA 10 BBB #N/A        CCC 20 CCC 20         XXX 30                ZZZ 40

  • VLOOKUP関数で検索値と一致項目を取得できません

    VLOOKUP関数で検索値と一致項目を取得できません 下記のような表があるとき、 =VLOOKUP(K1,A2:B4,2,TRUE)と記述し『CCC』を取得したいのですが、 『BBB』を取得してしまいます。  |A |B |C |D |E |F |G |H |I |J |K 1|0.6|0.6|0.6|0.6|0.6|0.6|0.6|0.6|0.6|0.6|=SUM(A1:J1) 2| 4|AAA 3| 5|BBB 4| 6|CCC 一致しない場合は、近似値を取得したいため、検索方法をTRUEにしています。 EXCEL2007を使用しています。 K1の値を数値で『6』と入力した場合や、『=0.6*10』など記入した場合は、『CCC』が取得できます。 また、A1~J1を0.5にした場合は『BBB』が取得できるので、関数自体は正しいと思うのですが、原因がわかりません。 現在のところ、=ROUND(SUM(A1:J1),2)としてごまかしているのですが、 原因がわかりましたら、教えていただけますでしょうか?

  • =VLOOKUPで、検索値が手打ちだと値が得られません

    A列に名前、B列に番号、がそれぞれあるとします。 C列に名前を入れると、D列に番号をかえすようにします。 =VLOOKUP(C1,A:B,2,0) 上記をD列に入力し、C列に値を入力する場合。 検索元である、A列の値をコピペすれば、該当するB値がえられます。 しかし、C列に手入力したり、他のファイルからコピペした名前では B列の番号がかえってきません。A列にフィルタを使い検索すると ヒットしましたので、単に該当する値が無いので#N/Aとなるわけでは ありません。初歩的な質問なのでしょうが、よろしくお願いします。

  • vlookup関数の使い方

    vlookup関数を使って検索する場合、指定された範囲の1列目に特定の値がないとき、#N/Aが返ってきますが、私は1列目に特定の値がない時には数字の0(ゼロ)が返ってくるように四苦八苦しています。なんとかならないでしょうか。

  • VLOOKUP関数の「検索値」を範囲で指定する

    エクセルのVLOOKUP関数で、通常は検索値は一意のものを指定しますが、範囲指定しているケースがありびっくりしてしまいました。これはどのようなことなのでしょうか?   A   B 1 品名  単価 2 もも  200 3 りんご 150 4 みかん 100 5 なし   80 とあり、   C   D  1 品名  単価 2 なし 3 もも 4 みかん C列に入れた検索値で、上の表から単価を検索する場合、 通常 =VLOOKUP(C2,$A$2:$B$5,2,FALSE)といった感じで D2のセルに打ち込み、D2のセルの場合は、「検索値はC2」と固定している思うのですが、 =VLOOKUP($C$2:$C$4,A2:B5,2,FALSE)でも 同じ結果になっています。もちろんこれをそのままD4までコピーしても求める通りの結果が出てきます。 検索値は、式においては必ずしも一意で指定する必要はないのでしょうか?

  • vlookup関数について

    vlookup関数について教えてください。    A       B         C      D      E        1  あじ    りんご     2  さば    みかん            3  さんま   ばなな        という内容で、D1セルに入力した内容に応じてE1セルに内容を転記させていました。 E1=VLOOKUP(D1$A$1$B3,2,FALSE) 上記で運用していたときはうまくいったのですが、 Cの列にも文字をいれ、E1セルにはCの内容を検索して、B列の内容を転記したいと 思って作りかえるとうまくいきません。 今回の新しいやり方では、 ・A列からの検索はいらない(でも他ファイルから参照されているので、削除、移動はできない) ・E1=VLOOKUP(D1$A$1$C2,2,FALSE)では #N/A となる ・A列からの検索がいらないから、E1=VLOOKUP(D1$B1$C2,1,FALSE) でも #N/A 調べてみたのですがわからなくて・・・ どこがおかしいのか、教えてください。宜しくお願いします。

  • VLOOKUP関数が#N/Aで使えません

    こんにちは。 エクセルで表を作っています。 VLOOKUP関数を使いたいのですが、エラー#N/Aが出て使えません。とてもシンプルな式なのに、何がだめでできないのか全く解かりません。 式は、=VLOOKUP(C3&D3,A7:D12,4,FALSE)です。 ちなみに、=VLOOKUP(C2,B7:D12,3,FALSE)にはちゃんと反応して数値を返してくれます。違いは検索値だけなのですが、数字になっているので、文字列に指定もしました。違うセルで=C3&D3は返してくれています。 何がいけなくてできないのか、教えていただけると助かります。 よろしくお願いします。

  • vlookup関数で検索値を含む文字列を検索する方法

    vlookup関数で例えば E1のセルに=vlookup(D1,A:C,3,false)とした場合、D1が佐藤であれば、A列に「佐藤」がある場合には当然、「佐藤」がある行の3列目の値が返されますが、「佐藤」はなく「佐藤A」や「A佐藤」がある場合にもこれらがある行の値を返して欲しいのですが、いい方法はありませんでしょうか。*を使ってできると思ったのですがうまくいきません。上記例で、=vlookup("*佐藤*",A:C,3,false)とすればできますが、*佐藤*の部分はD1の引用を利用したいのです。  よろしくお願いします。

  • 【エクセル】 関数を使って他のエクセルの値を読み込みたい

    エクセルで外部ファイルの値を読み込みたいのですが、その際に読み込み先(シート)を関数を使って切り替えたいので、アドバイスをいただけないでしょうか。 検索で調べてみたらVBAを使う回答が多いのですが、VBAを使える人が周りにいない(私もそうです)ので、後々のメンテナンスを考えると関数を使って切り替えたいのです。 【環境】 WINDOWS XP エクセル2000 C:\AAA (CドライブにAAAというフォルダ) フォルダAAAには、BBBとCCCというエクセルファイルがあります CCCには、シート名1、2、3という3つのシートがあります。 【目標】 ファイルBBBのセルの値を操作すれば、読み込み先が変更されてBBBで表示される値が切り替わる。 【だめだった例】 BBBのセルA1にシート名を入れます。「1~3の数値」 同じくセルB1にパスを表示させます「="'C:\AAA\[CCC.xls]1"&A1&"'"」 ・・・後ろのA1が変化することで読み込み先が変わるはず。 同じくセルC1にCCCから読み込んだ値を表示させます。 「=INDIRECT($B$1&"!"&ADDRESS(ROW(F7),COLUMN(F7)))」  ・・・B1で表示された読み込み先のセルF7の値を表示するはず。 結果は「#REF!」になります。 CCCを同時に起動させると上手く読み込むので、リンクの問題なのでしょうか? なお関数を使わないでパスを記述したセルでは、CCCを起動させなくても上手く読み込んでくれます。 よろしくお願いします。 

専門家に質問してみよう