dポイントプレゼントキャンペーン実施中!

エクセルの関数、LOOKUPを使って、
患者IDから患者名を引き出したいのですが、
IDが不一致の場合は「該当なし」がわかるような表示にしたい。
現在はIDが一致しない場合、適当な?患者名が表示されてしまう。

シート1のA列に患者ID
シート1のB列に患者名
以上の情報があらかじめ入力されています。

やりたいことは
シート2のA列にIDを入力すると
シート2のB列に患者名を表示。
ID入力しない場合は、空白。
IDが一致しない場合は、不一致などの表示。

現在の計算式
シート2のB列に計算式が入力されています。
=IF(A1="","",LOOKUP(A:A,シート1!A:B,シート1!B:B))

現在できていること。
・患者IDを入れなければ空白
・患者IDを入力し、シート1のIDが一致したら、患者名を返す。

困っていること
・患者IDが一致しないと、適当な?患者名が表示される。

A 回答 (3件)

こんにちは。


LOOKUP関数よりもVLOOKUP関数を使うことをお薦めします。
ただし、範囲は

(1)テーブルは連続した範囲であること。
(2)範囲は検索列となる"範囲の最左列で昇順に並べ替えられている"
  こと。

関数:VLOOKUP(検索値,範囲,列番号,検索の型)

>現在の計算式
>シート2のB列に計算式が入力されています。
>=IF(A1="","",LOOKUP(A:A,シート1!A:B,シート1!B:B))

→ シート2のB1に
  =IF(A1="","",IF(ISNA(VLOOKUP(A1,シート1!$A:$B,2,0)),
  "該当者なし",VLOOKUP(A1,シート1!$A:$B,2,0)))

  または、No2さんが書かれた様に

  =IF(A1="","",IF(ISERROR(VLOOKUP(A1,シート1!$A:$B,2,0)),
  "該当者なし",VLOOKUP(A1,シート1!$A:$B,2,0)))

  と入力して、行方向にコピーします。

【解説】

VLOOKUPは検索値をキーとして、範囲の最左列を行方向(Vertical)
に検索していき、一致した行の指定した列(キーの列を含めて何列目)
を参照します。
 ※参考:列をキーにして検索し、行を参照するものに、
     HLOOKUP(Horizon)があります。

まず、1つ目の検索値は検索したい"ユニークな値"ですからA:A
という指定は適切ではありません。 検索値は A1、$A1 などの
ようにします。 ※ユニーク: 唯一の、 独自の、

意味:A1の内容をキーにして・・

2つめの範囲は、連続している必要があり、キー(範囲の最左列)
で昇順に並べ替えられている必要があります。
並べ替えられていない場合、正しい結果が得られない場合があります。

患者ID/患者名をシート1のA列/B列にテーブルを作っているなら、
範囲は、『シート1!A:B』または『シート1!$A:$B』です。

『シート1!$A:$B』の$は絶対参照で、コピーをしてもその参照セル
は変わりません。 今回は、『シート1!A:B』でも大丈夫ですが、
今後、別の表で列方向にコピーしたりして、作業量を軽減することを
考えると、範囲(列)は変わりませんので$をつける癖をつけること
をお薦めします。

3つめは、VLOOKUPの場合、見つかった行の
"検索列を含めて何列目を参照するか" を指定するものです。

テーブルは患者ID/患者名
検索列は患者IDの1列目、目的の患者名は2列目ですから、
"2"を指定します。

最後の検索の型ですが、
0は完全一致、1または指定なしだと、近似値で一致したものを対象
にして参照します。 0を指定すると該当なしの場合に#N/Aを返し
ます。

上記のように、VLOOKUPは検索の結果、一致するものがない場合#N/A
というエラーを返します。 該当なしはこのエラーを利用します。

このエラー結果を確認するための関数として
ISNA()、ISERROR()があります。

ISNA(VLOOKUP(A1,シート1!$A:$B,2,0)
→ ISNA()は#N/Aだった場合に真、そうでない場合に偽を返します。

ISERROR(VLOOKUP(A1,シート1!$A:$B,2,0)
→ ISERROR()は、#N/A,#VALUE,#REF!,#DIV/0,#NUM!,#NAME,#NULL
などのエラー全般に対して、該当する場合に真、そうでない場合に偽
を返します。

上記を組み合わせて、最初に記載した式を作ることで解決できると
思います。 以上、ご参考まで^^
    • good
    • 0
この回答へのお礼

コピペでできました!
ありがとうございます。

エクセルを使った、予約管理表などを、
ほかの部署からも頼まれており、
「コピペでいいか?!」ではなく、
細かなアドバイスを頂き大変ありがとうございます。

お礼日時:2008/07/09 16:04

=IF(A1="","",IF(ISERROR(VLOOKUP(A1,シート1!A:B,2,0)),"不一致",VLOOKUP(A1,シート1!A:B,2,0)))



ではどうでしょうか。
    • good
    • 0
この回答へのお礼

仕組みはわかりませんが、
コピペでできました!
ありがとうございます。

お礼日時:2008/07/09 15:57

=IF(A1="","",LOOKUP(A:A,シート1!A:B,シート1!B:B))



=IF(A1="","",IF(COUNTIF(シート1!A:A,A1),VLOOKUP(A1,シート1!A:B,2,FALSE),""))
にして、下フィルではいかがでしょうか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!