• ベストアンサー

VLOOKUPで?

 エクセルのVLOOKUPでマイナスは出来ないのですか? 何がしたいかというと、一番左ではなく真中をキーにして一番左を検索する方法は無いのですか? Aにコード Bに名前 Cに電話番号 と入っていた場合 コードから 名前 電話番号は検索できますが 電話番号をキーにしたい場合はどうすればいいのですか Dにコードを入れるしかないのでしょうか? ちなみにエクセルでしたいのです・・・(アクセスだと出来るはずだが・・・・)

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

  • ベストアンサー
  • kimrin
  • ベストアンサー率22% (4/18)
回答No.1

こんにちは!kennta111さん。 VLOOKUPではないですが、ヘタな関数で良ければ。 Aにコード Bに名前 Cに電話番号 でデータが2行目からと言う事で。 D1に電話番号(検索キー)を入力、E1に検索結果を表示。 仮にデータ行は6件とする。 E1に入れる関数 =OFFSET($C$2,MATCH($D$1,$C$2:$C$7)-1,-1) 以上

kennta111
質問者

お礼

回答 ありがとうございます すこしややこしいですね・・・・ アクセスのほうが簡単な気が・・・ エクセルでもしたかったのですがアクセスのほうがらくかな・・・・

その他の回答 (3)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.4

A列:コード、 B列:名前、 C列:電話番号。 2行目から16行目までデータがあるとします。 D2に照合したい電話番号があるとします。   対応するコード: =INDEX(A2:A16,MATCH(D2,C2:C16,0),1)   対応する名前 : =INDEX(B2:B16,MATCH(D2,C2:C16,0),1) MATCHの照合の型を『0』にして、電話番号をソートしていない状態を想定しています。 後はINDEXで取り出しています。VLookUpと同じ意味合いだと思います。 参考にデータが増えた時に変更しなくてもいい算式を作ってみました。 上の『16行目までデータがあるとします』の前提をなくした算式です。 コード: =INDEX(INDIRECT("A2:A"&MATCH("",A:A,-1)),MATCH(D2,INDIRECT("C2:C"&MATCH("",A:A,-1)),0),1) 名前も同様です。表のデータ数がどんどん増えるような場合は有効です。 INDIRECTで対象セル範囲を定義しているわけです。VBAでの『Range("A1").End(xlDown).Row』で最終行を定義する方法を関数に使ってみました。 当然、VLookUpにも使えます。ご参考に。

kennta111
質問者

お礼

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

  • comv
  • ベストアンサー率52% (322/612)
回答No.3

こんばんは! VLOOKUP()では無理です。 既にkimrinさんが記載された 同様の検索機能を持つ MATCH()関数で検索列の対象位置(何番目)を探し出して、 INDEX()関数にて抽出列からその位置の値を抽出するのが 簡単かもしれません! =INDEX(コードの範囲,MATCH(検索値,電話番号範囲,0)) で試してみて下さい!

kennta111
質問者

お礼

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

  • 468
  • ベストアンサー率50% (11/22)
回答No.2

こんにちは。 たぶんVLOOKUPとかHLOOKUPは表から拾い出すので 左端とか上端が項目になっていないといけないのでは? と思うのですが。 (この項目の何列または何行目のものを拾ってくるという関数なので) なので例えばA列を電話番号にして B列にコード C列に名前 と入力しておくと電話番号からでも拾えますが・・・。 順番を変えれない場合は別の関数を使う方が早いかもしれないですね。 あまりお役にたてる答えでなくて申し訳ないです。

kennta111
質問者

お礼

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

関連するQ&A