Excel(エクセル)のVLOOKUP関数についてお伺いしたいことがあります。

自動入力の参照に使う表は、”完全一致”に限定されているんですが・・・。

完全一致ではなく・・・オートフィルターのように”含む”や”で始まる”といった条件に一致したものと関連する項目を表示するようにはできないのでしょうか??

例えば、商品番号Bで始まるものの値段入力やABCを含む商品番号の値段入力など。。。

もしありましたら教えていただきたいです。よろしくお願い致します。
質問の仕方が分かりにくいかもしれません。。すみませんm(__)m

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2008/05/08 15:44:51
  • 終了:2008/05/15 15:45:02

回答(5件)

id:Gay_Yahng No.1

Gay_Yahng回答回数724ベストアンサー獲得回数262008/05/08 16:25:40

ポイント20pt

vlookupでは出来ないですね。

例のBを含む のは1つだけでしょうか?Bを含むものすべてを検索したいのでしょうか?

http://q.hatena.ne.jp/1210229090

id:mamakazu

ありがとうございます。

後者のBを含むものすべてです。。

2008/05/09 01:19:37
id:Baku7770 No.2

Baku7770回答回数2831ベストアンサー獲得回数1812008/05/09 04:02:33

ポイント20pt

 関数では1件しか検出できないので無理ですね。

 オートフィルのオプションを使えば質問文に近いことが可能です。

http://www.eurus.dti.ne.jp/yoneyama/Excel/filter3.htm

 

id:mamakazu

ありがとうございます!!!

2008/05/10 20:54:13
id:kaiton No.3

kaiton回答回数260ベストアンサー獲得回数342008/05/09 20:54:21

ポイント20pt

検索窓を作るような仕組みを考えてみました。(実際にコード入力する欄は別にすることを想定)


A2を検索窓とします。(コードの一部でも入れる)

マスタとなるデータをH1:J11に作り

コード 名称 単価
aaa111 aaaa 100
abc123 abcabc 110
bde654 bbbttt 200
... ... ...

F2: 1 or 2 (1:始まる、2:含む)の検索方法を指定


G2=IF(ISERROR(FIND($A$2,H2,1)),9999,IF($F$1=1,IF(FIND($A$2,H2,1)=1,ROW(),9999),ROW()))

をG11までコピー


B2=SMALL($G$2:$G$11,ROW()-1)

をB11までコピー


C2=IF($B2<>9999,INDEX($H$1:$J$11,$B2,COLUMN()-2),"")

をE2の横へコピー、C:E列を下に11行目までコピー


これで、A2の検索窓で a とか aa と入力しエンターでC,D,E列に検索結果が表示されると思います。

B,G列は計算列なので、非表示にしても良いかもしれません。


http://www.geocities.jp/chiquilin_site/data/060322_extraction.ht...

あたりの情報が参考になるかも知れません。

id:mamakazu

ありがとうございます!

やってみます!!!

2008/05/10 20:54:47
id:SALINGER No.4

SALINGER回答回数3454ベストアンサー獲得回数9692008/05/10 00:22:31

ポイント20pt

ワークシート関数は戻り値が一つなので後者は不可能ですが、

前者、最初に条件に一致した値を返す含むや始まるのようにワイルドカードを使えるVLookUp関数を

ユーザー定義で作ってみました。


VBEで標準モジュールに以下のコードをコピーしてください。

参考、標準モジュールの追加方法

Function myLookUp(st As String, r As Range, retu As Long) As String
    Dim gyou As Long
    gyou = Range(Cells(r.Row, r.Column), Cells(r.Row + r.Rows.Count - 1, r.Column)) _
        .Find(st, Cells(r.Row + r.Rows.Count - 1, r.Column), xlValues, xlWhole, _
        xlByColumns, xlNext, True, True, False).Row
    myLookUp = Cells(gyou, r.Column + retu - 1).Value
End Function

ここで作ったユーザー定義関数は

=myLookUp(検索値、範囲、列番号)

と、VLookUpとほとんど同じですが、検索値に*や?のワイルドカードを使うことができます。

(*は任意の文字列、?は任意の一文字)

例えばBから始まるは B*、ABCを含むは *ABC* で表せます。

id:mamakazu

ユーザー定義関数というのがあるんですね!!

ありがとうございます。

やってみます!!

2008/05/10 20:55:38
id:minubow No.5

minubow回答回数216ベストアンサー獲得回数52008/05/10 01:29:46

ポイント20pt

「含む」の場合は、FIND関数で、

「で始まる」の場合は、LEN関数とMID関数を組み合わせて判定します。

例)セルA1が、「AAA」を含むかどうか

 =FIND(”AAA”,A1)

例)セルA1が、「AAA」(セルC1の値として入っている場合)で始まるかどうか

 =MID(A1,1,LEN(C1))=C1

で判定できるかと思います。

http://dummy

  • id:Gay_Yahng
    VLOOKUPはそのセルに条件に一致した1つのセルの内容を表示するので複数の表示は無理ですね。マクロを使えばできると思いますが、関数ならIF関数で書き出していって並べ替えか、フィルタで制限するとか。
  • id:kaiton
    #3の回答者です。
    > F2: 1 or 2 (1:始まる、2:含む)の検索方法を指定
    は F1= 1 or 2 の誤りです。
    F1セルに1を設定すると「○で始まる」を、2を設定すると「○を含む」を検索します。

    うまく動かないなら、コメントで補足します。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません