- ベストアンサー
エクセルのFIND関数の複数セル参照について
- エクセルのFIND関数を使用して複数のセルを参照する際に問題が発生しています。
- 現在、該当する項目がない場合に「#N/A」と表示されてしまうため、IF関数を使用して「未使用」と表示するようにしましたが、うまく動作しません。
- LOOKUP関数とCOUNT関数の内部で使用されているFIND関数の参照内容が異なるため、問題が発生しています。また、LOOKUP関数は旧バージョンとの互換性を維持するためのものであり、VLOOKUPやHLOOKUP、MATCH関数で代用することはできません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
回答を投稿してから部分一致に気がつきました。 そのときは =IFERROR(VLOOKUP("*"&B4&"*",G:H,2,FALSE),"未使用") =IFERROR(INDEX(G:G,MATCH("*"&B4&"*",H:H,0)),"未使用") のようにします。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
ご利用のエクセルのバージョンがご相談に書かれていませんが,情報から2010以降を利用しているのが明らかです。 とりあえずご質問の数式をそのまま活かしたいなら =IFERROR(LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") とでもしてください。 普段使いの関数を使い アドレス列(仮にG列)のひとつ右隣(仮にH列)に名称列があるなら =IFERROR(VLOOKUP(B4,G:H,2,FALSE),"未使用") としたほうが,遙かに簡単です。 リストの配置をどうしても動かしたくないなら 仮にH列を検索してG列を取得する =IFERROR(INDEX(G:G,MATCH(B4,H:H,0)),"未使用") です。
お礼
ご回答ありがとうございます! 質問内容からOfficeのバージョンがお分かりになられるとは、流石です。 =IFERROR(LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") としたほうが遥かにスマートですね!ぜひそのようにさせていただきます^_^ なぜLOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称])のような面倒な書き方になっているのかといいますと、部分一致でないと照合しないデータが含まれているからです。 ご教示の方法で「LOOKUP」関数を「VLOOKUP」や「INDEX」関数に置き換えてしまいますと、完全一致となり、一部のデータが誤って「未使用」となってしまいます。
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
複数一致するときに、どこの値が返ってくるか安定しないけどいいのかなあ とか心配しつつ FIND(B4,テーブル1[アドレス]) は、ヘルプに載っているような基本的な使用方法ではなく、配列として返しています。 そのままでは配列として認識していません。INDEX関数やLOOKUP関数など、配列を扱う関数なら、配列として扱われますが、COUNT関数は、セル範囲として扱う関数になっています。 で、配列として認識させるためには、 =IF(COUNT(FIND(B4,テーブル1[アドレス])),LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") [Ctrl]+[Shft] +[Enter] で確定、配列数式。{ }で挟まれる。 または、配列として認識させるよう =IF(COUNT(INDEX(FIND(B4,テーブル1[アドレス]),)), LOOKUP(0,0/FIND(B4,テーブル1[アドレス]),テーブル1[名称]),"未使用") といった方法もあります。
お礼
ご教示いただいた方法で無事に配列として認識させることができました。ありがとうございます! 「テーブル1[アドレス]」にはゴミデータが入っていて、部分一致でないと照合しませんが、重複することはないのでご心配なく^_^
お礼
ご教示いただきありがとうございます。 「"*"」という風に書くとそのままアスタリスクは文字として検索されるのかと思いきや、そうではなかったんですね! 大変勉強になりました。ありがとうございました。