• ベストアンサー

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

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

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

  • ベストアンサー
noname#77845
noname#77845
回答No.1

=VLOOKUP("*"&D1&"*",A:C,3,FALSE)

greenvs188
質問者

お礼

早速のご回答ありがとうございます。うまくいきました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.3

#2です。 >式を=OFFSET(E1,MATCH(A1&"*",$D$1:$D$6,0)-1,0)とせずに上記のようにした意図がわからなかったのですが >$D$1:$D$6 ミスですね。すみません。 >OFFSET(E1,MA・・のE1 OFFSETの基点なのでD1にしたりE1にしたり、2,3書き方はありえます。関係箇所は少し変わりますが。 質問のAーC列は、検索表を2列の例にしました点は、質問と変えてます。 >vlookup関数でもワイルドカードが使えました そうですね。済みませんでした。

greenvs188
質問者

お礼

早速のご回答ありがとうございました。よくわかりました。2度手間とらせてしまいすみませんでした。

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.2

例データ D1:E6 木下 12 佐藤彦 23 北佐藤商店 34 佐藤 3 北田 11 大松 16 A1 に「佐藤」 B1 に =OFFSET(D2,MATCH(A1&"*",$D$2:$D$6,0)-1,1) ワイルドカード*、?が使えます。 ただしD列は文字列であること。 該当の一番上の行しか返さない。 VLOOKUP関数はワイルドカード*、?が使えないと思うが。 上記は=OFFSET(D2,MATCH("*"&A1&"*",$D$2:$D$6,0)-1,1) がベターかも。先頭に限るなら別になると思う。

greenvs188
質問者

お礼

回答ありがとうございます。こんな方法もあるのですね、参考にさせていただきます。ただ、一応回答No1のとおりやるとvlookup関数でもワイルドカードが使えました。また、式を=OFFSET(E1,MATCH(A1&"*",$D$1:$D$6,0)-1,0)とせずに上記のようにした意図がわからなかったのですが教えていただけますでしょうか。よろしくお願いします。

関連するQ&A