- ベストアンサー
エクセル・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が一致しないと、適当な?患者名が表示される。
- みんなの回答 (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 などのエラー全般に対して、該当する場合に真、そうでない場合に偽 を返します。 上記を組み合わせて、最初に記載した式を作ることで解決できると 思います。 以上、ご参考まで^^
その他の回答 (2)
- keirika
- ベストアンサー率42% (279/658)
=IF(A1="","",IF(ISERROR(VLOOKUP(A1,シート1!A:B,2,0)),"不一致",VLOOKUP(A1,シート1!A:B,2,0))) ではどうでしょうか。
お礼
仕組みはわかりませんが、 コピペでできました! ありがとうございます。
- hallo-2007
- ベストアンサー率41% (888/2115)
=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),"")) にして、下フィルではいかがでしょうか。
お礼
コピペでできました! ありがとうございます。 エクセルを使った、予約管理表などを、 ほかの部署からも頼まれており、 「コピペでいいか?!」ではなく、 細かなアドバイスを頂き大変ありがとうございます。