• ベストアンサー

VLOOKUPで困っています

A1 B1 C1 D1 ←列 A W E 15 B E T 8 C K T 37 A L E 10 A L T 52 Aの列を検索してDの値を拾いたいのだが、Aの列に複数同じ値があるので、Aを検索した後にB、Cの列も参照して、正しいDの値を拾えるようにしたい。 上の例で言えば、 A L E のときのDは10で A L T のときのDは52 ということができるような数式を作りたいのですが・・・ どなたか教えていただけないでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • shiotan99
  • ベストアンサー率68% (140/203)
回答No.2

こんにちは~ No.1さんの方法がカンタンかとは思いますが、一応ご参考までに作業列を使わない方法を。 A1:D10にデータがあり、F1からH1に検索条件を入れると仮定して・・。 たとえば、A L Eを検索するなら、F1に A、G1に L、H1に Eと入力。 結果を出したいセルに =VLOOKUP(H1,IF((A1:A10=F1)*(B1:B10=G1),C1:D10),2,FALSE) と入力して、Ctrl+Shiftを押しながらEnterで確定(配列数式)。 数式が{  }で囲まれていればOK。 {  }で囲まれていなければNG。 そのセルを選択し、F2キーを押したあと、 もう一度、Ctrl+Shiftを押しながらEnterで確定してください。

その他の回答 (4)

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

#3です。何度もすみません。 (1)朝あわてていて、大事な事がもれてました。 A,B,C列の表はA-B-C列の昇順でソートしてあることが必要です。 この制約をはずすと、プログラムが本格的に組まないとなりません。 (2)#3では条件が入っているセルを、A1,B1,C1に固定して決めていましたが、引数で自由に指定できるように下記で改良しました。 Function VLK(x, y, z As Range) r = Range("a:a").Find(What:=x.Value, SearchOrder:=xlByRows).Row r = Range(Cells(r - 1, "B"), Cells(100, "B")).Find(What:=y.Value, SearchOrder:=xlByRows).Row r = Range(Cells(r - 1, "C"), Cells(100, "C")).Find(What:=z.Value, SearchOrder:=xlByRows).Row VLK = Cells(r, "D") End Function A2:D9 A L E 32 A L T 34 A W E 11 B E T 23 C F H 52 C K T 45 C M Q 23 C N W 34 たとえば条件が3つのセルにA12=C,B12=N,D12=Wのとき 関数式=VLK(A12,B12,D12)で34が求まります。

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

#3です。実例で載せた中の &nbspは全て省いて見てください。 質問例と似たような例を作ったものです。 見苦しくなってすみません。

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

VBAで私製関数を作ってみました。 A1:D9に C    N W A    L   E   10 A    L   T   52 A    W   E   15 B    E   T   8 C    K   T   37 C    M Q 23 C    N W 33 C    F H 44 A1,B1,C1は検索条件の3文字列を入れます。 答えを出すセルに =VLK()と入れます。普通の関数と同じような書き方です。 上記の場合は33という値が返ります。 Function VLK() r = Range("a:a").Find(What:=Range("A1"), SearchOrder:=xlByRows).Row r = Range(Cells(r - 1, "B"), Cells(100, "B")).Find(What:=Range("b1"), SearchOrder:=xlByRows).Row r = Range(Cells(r - 1, "C"), Cells(100, "C")).Find(What:=Range("c1"), SearchOrder:=xlByRows).Row VLK = Cells(r, "D") End Function VBEの画面を出し、標準モジュールを挿入し、その部分に貼り付けます。 もう少し相対化したいのですが、とりあえず。 Functionの中でActivateがつかえないようで、てこずりました。 条件を4つにするのも拡張できそうですが略。

  • TK01
  • ベストアンサー率43% (43/100)
回答No.1

C1 と D1の間に、1つ列を追加して、=A1&B1&C1 といれると、文字列が1つにつながります。 それを Vlookup の検索値として式を作ってみてはいかがですか?

関連するQ&A