• ベストアンサー

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/17068)
回答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/17068)
回答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

  • ExcelでのVLOOKUP関数について

    キー1を1000倍したうえで完全一致のVLOOKUP関数を使うと#N/Aエラーが発生します。 表示上は同じように見えますが内部的に異なる値となっているのでしょうか? 試しにエラー行に対して、キーとターゲットとなる当該セルを「=」でつないで確認しても「TRUE」となります。 添付画像は、 検索先としてA列に基準キーを130.168~130.192(step 0.001)で各行へ入力し、B列はA列を1000倍、C列はB列をROUND関数で整数値に丸めたものをキーとしました。 D列にVLOOKUPで参照する値を入力し、E列以降で以下の異なるパターンで値を参照しています。 (1)【E・F列】 ・E列に整数値をキーとして130168~130192(step 1)で入力。 ・E列をキーとしてB~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,B:D,3,FALSE)』 (2)【G・H列】 ・G列にE列/100をキーとして計算。 ・G列をキーとしてA~D列のVLOOKUP関数としています。   『=VLOOKUP(G3,A:D,4,FALSE)』 (3)【I列】 ・E列をキーとしてC~D列のVLOOKUP関数としています。   『=VLOOKUP(E3,C:D,2,FALSE)』 シートを複製し、キーの入力範囲を0.001~0.025(E列は1~25)にした場合はエラーがでませんでした。 その他の確認としてはTEXT、JIS、ASCなどを組み合わせて文字列としたキー同士のVLOOKUPではエラーにならず値を参照できています。

  • 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で列毎に並び替えたい

    お世話になります。 今、エクセルのA列に200個のそれぞれ異なる値(8個の英数字で構成された値)が入っているとし(A1~A200)、一方、C1セルを起点に300行×80列のセルそれぞれに計24000個の値が入っているとします。また、C1~C300のセルにはA列と同じ値が含まれていて、300個はそれぞれが異なる値とします。 ここで、300行x80列の表を、A列の右隣りに、A列の値と同じ値を持つC列セルを含む行が並ぶように表の行を並べ替えたいのです。 (1行1行の内容は変えずに、1行全体を上下に移動させる。どこに移動させるかは、C列の値と同じ値を持つA列セルの行に移動させる。) A列の値を検索キーとする16000個のVLOOKUPを埋め込めば出来そうですが、1列に200個のVLOOKUPだけ埋め込めばD列移行の値はくっついて並び替わってくれる方法はないでしょうか? よろしくお願いします。

  • VLOOKUPで●●を含む文字列を検索したい

    VLOOKUP関数を使って、検索値をD列、範囲をAB列にして、 B列の値段をE列に表示させたいと思っています。     A列        B列  C列     D列     E列 おいしいオレンジジュース   150 りんごジュース りんごジュース 天然果汁   200 オレンジジュース 検索範囲の文字には検索値の文字が含まれてはいるのですが、前や後ろ、もしくは前後両方に文字が追加されています。 あれこれ調べましたが、逆の条件の場合は他の関数+ワイルドカードの組み合わせでできるようでしたが、 自分がやりたいことは調べきれず、質問させていただきました。 一応、TRUE、FALSEで切り替えて検索してみたのですが、希望している結果とは違うものが出てしまいました。 (同じ結果が何度もダブって出る。データ的に1対1しかないのに) 文字列の場合のVLOOKUP関数のTRUE、FALSEの定義もよくわかりません。

  • excelで文字列を検索する関数を教えてください。

    いつもお世話になります。 エクセルの関数で、シートAのセルA1に入っている文字列をシートBのC列から探し出し、同じ文字列があればTrueをなければFalseを返す関数を教えてください。 わからないながらも色々調べてみたのですが、検索にはVLOOKUPがよく使われているようですが、シートBのC列は、データの並べ替えができないので、VLOOKUPは、使えないのです。 よろしくお願いします。

  • vLOOKUP関数の仕様

    VLOOKUP関数で検索値が検索対象に複数あるときに検索の型をfalseにすると 例えば E列に検索値のリストがありA列が検索対象になりC列が返す数値があるとすると =VLOOKUP(E1,$A$1:$C$1000,3,FALSE) という風にすると返す数値が A列で一番上にある一致行のC列を返す。 A列で検索値が一致する中でC列の値が最も少ない数値を返す。 のいずれかに見えるのですがこれは仕様として正しいのでしょうか?それとも、私の勘違いでしょうか? ちなみに、上記二つの仕様のうちどちらでも影響が無いんです。C列の数値が連番(時々欠番がありますが)ですので。

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

    エクセルのVLOOKUP関数に悩んでいます。 どなたかご指導お願いいたします。 *--------------------------* A~F列 すべて書式が時刻です。 A、B列には数式で計算された時刻が入力されており、 C列はA列+B列という計算式がはいっています。 F列に=VLOOKUP(C列、D:E列、2、FALSE)というように C列を検索値とし、D列を参照し、E列にある時刻をF列に 設定したいのですが、結果が#N/Aになります。 例えばA,B列が数式ではなく入力した値であれば 検索値であるC列がA列+B列 でも結果はOKでした。 検索値は数式セル同士を足し算した数式は設定不可能なのでしょうか?

  • vlookup関数で、任意の列ではなく、行、列

    タイトルの件、質問いたします。 =VLOOKUP(G2,A1:C3,2,FALSE) の関数があります。 これは、G2,A1の範囲の2列目の数字を返すものです。 これを、2列目ではなく、2列目の2行目の数字を返すものに出来ないでしょうか? 教えて下さい。

  • 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を使って、#N/A と、エラーが出るセルには、そのままではなくて、別のある列の数値を入れなさい、としたいのです。 このままの式だと、VLOOKUP(A1,$C$1:$D$5,2,false) なのですが、この場合の#N/Aに、もとの1の表の う にある 125 を持っていきたいのですが、 どのように式をかえればよいでしょうか? よろしくお願いします。 1の表           2の表          修正 A    B         C    D    →    E あ   123        あ    156        156 い   124        う    180        #N/A う   125        え    150        180 え   126        か    160        150 お   127        お    160        160

専門家に質問してみよう