• ベストアンサー

エクセル・LOOKUPで、不一致の場合の表示

エクセルの関数、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が一致しないと、適当な?患者名が表示される。

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

  • ベストアンサー
回答No.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 などのエラー全般に対して、該当する場合に真、そうでない場合に偽 を返します。 上記を組み合わせて、最初に記載した式を作ることで解決できると 思います。 以上、ご参考まで^^

maronaji
質問者

お礼

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

その他の回答 (2)

  • keirika
  • ベストアンサー率42% (279/658)
回答No.2

=IF(A1="","",IF(ISERROR(VLOOKUP(A1,シート1!A:B,2,0)),"不一致",VLOOKUP(A1,シート1!A:B,2,0))) ではどうでしょうか。

maronaji
質問者

お礼

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

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

=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),"")) にして、下フィルではいかがでしょうか。

関連するQ&A