• ベストアンサー

VLOOKUP 範囲の複数列指定

vlookupは指定範囲の左側だけを検索しますよね。 そこを、範囲を指定した場所全てを検索して、指定した列の文字を返すことはできますか?別に他の関数を併用した方法でもかまいません。

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

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

一例です。 範囲をA1:C10として、抽出列をA列としたら次の様な数式でしょうか。 =INDEX(A:A,SUMPRODUCT(($A$1:$C$10=検索値)*ROW($A$1:$A$10))-1,0)

gastronome
質問者

お礼

何度やっても#NAMEエラーが出るのですが、別シートに返そうとしているのが原因でしょうか?

その他の回答 (5)

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.6

#1です。 前回の質問とあわせまして、よくご質問の内容を理解せずに回答しました事お詫びいたします、すいませんでした。 で、改めて回答ですが・・・ (1)A列に行を挿入して、 A1に =IF(ISERROR(MATCH(Sheet2!$B$3,B1:D1,0)),0,Sheet2!$B$3) として必要なところまでコピーしてください。 (2)Sheet2のCに =Vlookup(B1,Sheet1!A1:E4,5) としてみればいかがでしょうか? (1)で検索文字を強引に左端にもってきて(2)でVlookupを使用しました。

noname#79209
noname#79209
回答No.5

#4です。 > B列を検索してC列に人の名前を返す 正確には「B列のデータを別シート上で検索してC列に人の名前を返す」です。 「解ったんだから、いいじゃないか」と言われるかも知れませんが、 この辺りを正しく書いておかないと、方向違いの回答が返ってきます。 探したいB列の値が、Sheet1の複数の列にあるので、VLOOKUPは使えませんね。 DGETも特定の列から探すので使えませんし、MATCHも行列なので使えません。 そこで、探したいデータがSheet1だとしたら、C列に =IF(SUMPRODUCT((Sheet1!$A$1:$C$4=Sheet2!B3)*(ROW(Sheet1!$A$1:$C$4)))>0,INDIRECT("Sheet1!C"&SUMPRODUCT((Sheet1!$A$1:$C$4=Sheet2!B3)*(ROW(Sheet1!$A$1:$C$4)))),"") で、如何でしょう。

noname#79209
noname#79209
回答No.4

DGET関数でも出来ます。     A      B 1   種類    品名 2   野菜    キ* 3   種類    品名 4   くだもの  いちご 5   くだもの  キウイ 6   野菜    れんこん 7   野菜    にんじん 8   くだもの  りんご 9   野菜    キャベツ 10  野菜    大根 11  野菜    たまねぎ 12  くだもの  なし で、=DGET($A$3:$B$12,2,$A$1:$B$2)とすれば 「種類が野菜」で、「品名がキで始まる」行の品名欄にある中身(この例では「キャベツ」)が表示されます。 A2を「くだもの」にすれば、「キウイ」が表示されます。

gastronome
質問者

お礼

すいません。自分が馬鹿なものでなかなか理解できないのですが。 A  B  C  D   E 1  梨 柿 苺 山下 2 芋 米 栗 鈴木 3 鳥 馬 羊 松本 4 魚 犬 猫 田中 というシートがあって。 別シートで A  B  C 1  猫 田中 2 芋 鈴木 3 梨 山下 4 犬 田中 というように、B列を検索してC列に人の名前を返す 例えば「猫」を前のシートから検索して一致する 「田中」の名前を返したいときにでも使えますか?

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO2です。 数式に誤りがありましたので訂正させて頂きます。 =INDEX(A:A,SUMPRODUCT(($A$1:$C$10=検索値)*ROW($A$1:$A$10)),0)

gastronome
質問者

お礼

ありがとうございます。さっそく試してみます

  • pbforce
  • ベストアンサー率22% (379/1719)
回答No.1

INDEX関数とMATCH関数の組み合わせでいけませんか?

関連するQ&A